- Home /
Question by
Arkideit · Aug 10, 2012 at 08:38 PM ·
c#controllerthird-personpersonmotor
3rd person Controller weird behavior.
Hello everyone. I have a scrip based on 3dbuzz.com tutorial and i have problem with strafing my character. So, there is two scripts. First is TP_Controller.
using UnityEngine;
using System.Collections;
public class TP_Controller : MonoBehaviour
{
public static CharacterController CharacterController;
public static TP_Controller Instance;
// Use this for initialization
void Awake ()
{
CharacterController = GetComponent("CharacterController") as CharacterController;
Instance = this;
}
// Update is called once per frame
void Update ()
{
if (Camera.mainCamera == null)
return;
GetLocomotionInput ();
TP_Motor.Instance.UpdateMotor();
}
void GetLocomotionInput()
{
// Establish dead zone
var deadZone = 0.1f;
// Calculate new vector each frame
TP_Motor.Instance.MoveVector = Vector3.zero;
// if outside the deadzone, ie. can handle this input
if (Input.GetAxis("Vertical") > deadZone || Input.GetAxis("Vertical") < -deadZone)
TP_Motor.Instance.MoveVector += new Vector3(0, 0, Input.GetAxis("Vertical"));
if (Input.GetAxis("Horizontal") > deadZone || Input.GetAxis("Horizontal") < -deadZone)
TP_Motor.Instance.MoveVector += new Vector3(Input.GetAxis("Horizontal"), 0, 0);
}
}
Second is TP_Motor.
using UnityEngine;
using System.Collections;
public class TP_Motor : MonoBehaviour
{
public static TP_Motor Instance;
public float MoveSpeed = 10f;
public Vector3 MoveVector { get; set; }
// Use this for initialization
void Awake()
{
Instance = this;
}
// Update is called once per frame
public void UpdateMotor()
{
SnapAlignCharacterWithCamera ();
PrecessMotion();
}
void PrecessMotion()
{
//Transform MoveVector to World Space
MoveVector = transform.TransformDirection(MoveVector);
//Normalize MoveVector if Magnitude > 1
if (MoveVector.magnitude > 1)
MoveVector = Vector3.Normalize(MoveVector);
//Multyply MoveVector by MoveSpeed
MoveVector *= MoveSpeed;
//Multyply MoveVector by DeltaTime
MoveVector *= Time.deltaTime;
//Move the Character in World Space
TP_Controller.CharacterController.Move(MoveVector);
}
void SnapAlignCharacterWithCamera()
{
if (MoveVector.x != 0f || MoveVector.z != 0f)
{
transform.rotation = Quaternion.Euler(transform.eulerAngles.x,
Camera.mainCamera.transform.eulerAngles.y,
transform.eulerAngles.z);
}
}
}
The problem is that my character (Test Capsule =)) cant strafe forward only backward. That means when i pressing forward key (up/W) and left/right key at the same time my capsule going only forward. But if i pressing backward key + left/right it straif perfectly movig back. So can anyone tell me what is wrong, please?=)
Comment
Your answer
Follow this Question
Related Questions
Are there any 3rd person controllers like this 2 Answers
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
3rd person controller NullReferenceException 2 Answers
Flip over an object (smooth transition) 3 Answers