完整的PC端第一人称相机CharacterController的位移,旋转,跳跃,碰撞功能。
public float speed = 12F;
public float jumpSpeed = 8F;
public float gravity = 20.0F;
private Vector3 moveDirection = Vector3.zero;
//------------------------------
public float sensitivityX = 10F;
public float sensitivityY = 10F;
public float minimumY = -60F;
public float maximumY = 60F;
float rotationY = 0F;
private GameObject player;
public Transform m_camera;
private CharacterController controller;
void Start()
{
m_camera = this.transform.GetChild(0);
controller = GetComponent<CharacterController>();
player = this.gameObject;
}
void Update()
{
if (m_camera.gameObject.activeSelf)
{
PlayerControl();
}
}
private void PlayerControl()
{
if (controller.isGrounded)
{
moveDirection = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
//if (Input.GetButton("Jump"))
// moveDirection.y = jumpSpeed;
}
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
//-------------------------------------
if (Input.GetMouseButton(0))
{
float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = Mathf.Clamp(rotationY, minimumY, maximumY);
m_camera.localEulerAngles = new Vector3(-rotationY, 0, 0);
this.transform.localEulerAngles = new Vector3(0, rotationX, 0);
}
}