要先把摄像机镜头放在player里
public class PlayerController : MonoBehaviour {
Vector3 movement;
Rigidbody playerRigidbody;
// player移动速度
public float speed = 6f;
private float x;
private float y;
private float xSpeed = 2;
private float ySpeed = 2;
private Quaternion direct; // player direct
void Awake()
{
playerRigidbody = GetComponent<Rigidbody>();
}
void Update() {
// keyboard move
float h = Input.GetAxisRaw("Horizontal"); // A D
float v = Input.GetAxisRaw("Vertical"); // W S
transform.Translate(Vector3.forward * v * speed * Time.deltaTime); // W S 上 下
transform.Translate(Vector3.right * h * speed * Time.deltaTime); // A D 左右
// Jump
if (Input.GetButtonDown("Jump")) {
playerRigidbody.velocity += new Vector3(0, 5, 0); //添加加速度
playerRigidbody.AddForce(Vector3.up * 50); //给刚体一个向上的力,力的大小为Vector3.up*mJumpSpeed
}
// mouse move
x += Input.GetAxis("Mouse X") * xSpeed;
y -= Input.GetAxis("Mouse Y") * ySpeed;
direct = Quaternion.Euler(y, x, 0);
transform.rotation = direct;
}
}
第二版
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private CharacterController m_Controller;
private Animator m_Animator;
public float Speed = 10;
public float JumpSpeed = 10;
private float m_Gravity = 9.8f;
private Vector3 m_MoveDirection;
private void Start()
{
m_Controller = GetComponent<CharacterController>();
m_Animator = GetComponentInChildren<Animator>();
}
void Update()
{
if (m_Controller.isGrounded)
{
var forward = Vector3.ProjectOnPlane(Camera.main.transform.forward, Vector3.up);
var right = Vector3.ProjectOnPlane(Camera.main.transform.right, Vector3.up);
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
m_MoveDirection = forward * v + right * h;
if (Input.GetKey(KeyCode.A) ||
Input.GetKey(KeyCode.S) ||
Input.GetKey(KeyCode.W) ||
Input.GetKey(KeyCode.D))
{
m_Animator.SetBool("walk", true);
m_Animator.SetBool("idle", false);
}
else
{
m_Animator.SetBool("idle", true);
m_Animator.SetBool("walk", false);
}
transform.forward = Vector3.Slerp(transform.forward, m_MoveDirection, Time.deltaTime * 10);
m_MoveDirection *= Speed;
if (Input.GetButton("Jump"))
m_MoveDirection.y = JumpSpeed;
}
m_MoveDirection.y -= m_Gravity * Time.deltaTime;
m_Controller.Move(m_MoveDirection * Time.deltaTime);
}
}