I am using First Person Control and I would like to control the game by keyboard arrows. But the arrows can only go forward/backward/right/left, I cannot turn around. What I want is that you turn around when you press the right or left arrow and then I can use the up arrow to move forward.
I understand that you have to modify the next script:
private var motor : CharacterMotor;
// Use this for initialization
function Awake () {
motor = GetComponent(CharacterMotor);
}
// Update is called once per frame
function Update () {
// Get the input vector from kayboard or analog stick
var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
if (directionVector != Vector3.zero) {
// Get the length of the directon vector and then normalize it
// Dividing by the length is cheaper than normalizing when we already have the length anyway
var directionLength = directionVector.magnitude;
directionVector = directionVector / directionLength;
// Make sure the length is no bigger than 1
directionLength = Mathf.Min(1, directionLength);
// Make the input vector more sensitive towards the extremes and less sensitive in the middle
// This makes it easier to control slow speeds when using analog sticks
directionLength = directionLength * directionLength;
// Multiply the normalized direction vector by the modified length
directionVector = directionVector * directionLength;
}
// Apply the direction to the CharacterMotor
motor.inputMoveDirection = transform.rotation * directionVector;
motor.inputJump = Input.GetButton("Jump");
}
// Require a character controller to be attached to the same game object
@script RequireComponent (CharacterMotor)
@script AddComponentMenu ("Character/FPS Input Controller")
I did a lot of modifications but each time for some strange reason the mesh collider doesn’t work anymore and I can walk throught all the walls
For example, when you take the next script instead of the script above, the mesh collider doesn’t work anymore.
function Update () {
if (Input.GetKey(KeyCode.UpArrow)) transform.Translate(Vector3.forward * Time.deltaTime);
if (Input.GetKey(KeyCode.DownArrow)) transform.Translate(-Vector3.forward * Time.deltaTime);
if (Input.GetKey(KeyCode.RightArrow)) transform.Rotate(0, 1, 0);
if (Input.GetKey(KeyCode.LeftArrow)) transform.Rotate(0, -1, 0);
}
Can somebody please tell me how to modify the first script so that I can turn around with the left/right arrow keys and that the mesh collider keeps working?