Вот я думаю будет нормально.
Управление идет из зазначеных клавиш, в скрипте не нужно назначать, все только при присваивании.
Файл желательно назвать PlayerMovement, и все будет работать.
using UnityEngine;
using System.Collections;
[RequireComponent ( typeof( CharacterController ))]
public class PlayerMovement : MonoBehaviour {
public float moveSpeed;
public float backSpeed;
public float strafeSpeed;
public string goForward;
public string goBack;
public string goLeft;
public string goRight;
private Transform _myTransform;
private CharacterController _controller;
public void Awake (){
_myTransform = transform;
_controller = GetComponent<CharacterController>();
}
void Start () {
moveSpeed = 7.0f;
backSpeed = moveSpeed / 2;
strafeSpeed = moveSpeed / 2;
goForward = "w";
goBack = "s";
goLeft = "a";
goRight = "d";
}
void Update () {
Walk();
Strafe();
}
private void Walk (){
if( Input.GetKey( goForward )) _controller.SimpleMove(_myTransform.TransformDirection( Vector3.forward ) * moveSpeed);
if( Input.GetKey( goBack )) _controller.SimpleMove(_myTransform.TransformDirection( Vector3.forward ) * -backSpeed);
}
private void Strafe (){
if( Input.GetKey( goLeft )) _controller.SimpleMove(_myTransform.TransformDirection( Vector3.right ) * -strafeSpeed);
if( Input.GetKey( goRight )) _controller.SimpleMove(_myTransform.TransformDirection( Vector3.right ) * strafeSpeed);
}
}
это только управление от третего лица.
Камера нге будет поворачиваться, щас напишу, по любому кому то пригодиться