unity3d 人物跳躍控制
阿新 • • 發佈:2019-01-25
要新增動畫狀態機
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;
}
}