- Home /
Character cannot move Diagonally forwards
I have been building a custom character controller from this set of tutorials Set of Tutorials. I can move diagonally backwards pressing the S and D keys or S and A but not forwards pressing W and A. I'm sure I've done everything right as they have said and have no idea why it is not working.
My Code: TP_Controller
using UnityEngine;
using System.Collections;
public class TP_Controller : MonoBehaviour {
public static CharacterController CharacterController;
public static TP_Controller Instance;
void Awake ()
{
CharacterController = GetComponent("CharacterController") as CharacterController;
Instance = this;
}
// Update is called once per frame
void Update ()
{
if (Camera.main == null)
return;
GetLocomotionInput();
TP_Motor.Instance.UpdateMotor();
}
void GetLocomotionInput()
{
var deadZone = 0.1f;
TP_Motor.Instance.MoveVector = Vector3.zero;
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);
}
}
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 ()
{
SnapeAlignCharacterWithCamera();
ProcessMotion();
}
void ProcessMotion()
{
// Transform MoveVector to World Space
MoveVector = transform.TransformDirection(MoveVector);
// Normalize MoveVector if Magnitude > 1
if (MoveVector.magnitude > 1)
MoveVector = Vector3.Normalize(MoveVector);
// Multiply MoveVector by MoveSpeed
MoveVector *= MoveSpeed;
// Multiply MoveVector by DeltaTime
MoveVector *= Time.deltaTime;
// Move the Character in World Space
TP_Controller.CharacterController.Move(MoveVector);
}
void SnapeAlignCharacterWithCamera()
{
if (MoveVector.x != 0 || MoveVector.z != 0)
{
transform.rotation = Quaternion.Euler(transform.eulerAngles.x,Camera.main.transform.eulerAngles.y,transform.eulerAngles.z);
}
}
}
I just tossed your scripts onto a simple scene...a plane and a capsule. It worked fine. Diagonal movement worked in all four directions. I've sometimes seen strange limits with character controllers when there are child objects with colliders. Try turning off the colliders of any children on the character. Also you can try my test above, empty scene, capsule, scripts.
Thanks I totally didn't realise I left a collider on the child object indicating forwards!
Your answer
Follow this Question
Related Questions
Why is Input.GetAxisRaw() not returning whole numbers when using a joystick? 1 Answer
How to successfully apply force calling a function from another script 1 Answer
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Right Stick Aiming Problem (Dual Stick Shooter) 3 Answers
OnMouseEnter/Exit problem 2 Answers