要添加动画状态机
public class PlayerController : MonoBehaviour {
Vector3 movement;
Rigidbody playerRigidbody;
Animator animator;
// player移动速度
public float speed = 6f;
private float x;
private float y;
private float xSpeed = 2;
private float ySpeed = 2;
private Quaternion direct; // player direct
// 判断是否落地
private bool grounded = true;
void Awake()
{
playerRigidbody = GetComponent<Rigidbody>();
animator = GetComponent<Animator>();
}
void Update() {
// keyboard move
float h = Input.GetAxisRaw("Horizontal"); // A D
float v = Input.GetAxisRaw("Vertical"); // W S
// animating
bool walking = h != 0f || v != 0f;
animator.SetBool("Forward", walking);
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")) {
if (grounded == true)
{
animator.SetBool("Jump", true);
playerRigidbody.velocity += new Vector3(0, 5, 0); //添加加速度
playerRigidbody.AddForce(Vector3.up * 50); //给刚体一个向上的力,力的大小为Vector3.up*mJumpSpeed
grounded = false;
}
}
// mouse move
x += Input.GetAxis("Mouse X") * xSpeed;
y -= Input.GetAxis("Mouse Y") * ySpeed;
direct = Quaternion.Euler(y, x, 0);
transform.rotation = direct;
}
// 落地检测
void OnCollisionEnter(Collision collision) {
animator.SetBool("Jump", false);
grounded = true;
}
}
本文介绍了一个使用Unity引擎实现的玩家控制器脚本,该脚本实现了基本的角色移动、跳跃及视角旋转功能,并通过动画状态机来控制角色动画的播放状态。代码中详细展示了如何根据键盘输入来控制角色移动,以及如何通过碰撞检测来判断角色是否落地,进而控制跳跃动画。

被折叠的 条评论
为什么被折叠?



