using UnityEngine;
[System.Serializable]
public class PlayerMovement : MonoBehaviour
{
private Rigidbody rb;
public int speed = 1;
private float sneak;
private float sprint;
public float jumpHeight = 3f;
public float gravityScale = 5f;
private Camera mainCamera;
private void Awake()
{
rb = GetComponent<Rigidbody>();
}
private void Start()
{
mainCamera = Camera.main;
// 添加自定义的Player控制的方式,可能需要更改控制代码
}
private void Update()
{
if (Input.GetKey(KeyCode.W))
{
rb.AddForce(transform.forward * speed * sneak);
}
else if (Input.GetKey(KeyCode.S))
{
rb.AddForce(-transform.forward * speed * sneak);
}
else if (Input.GetKey(KeyCode.A))
{
rb.AddForce(-transform.right * speed * sneak);
}
else if (Input.GetKey(KeyCode.D))
{
rb.AddForce(transform.right * speed * sneak);
}
else
{
rb.velocity = new Vector3(0, rb.velocity.y, 0);
}
if (Input.GetKey(KeyCode.LeftCtrl))
{
sneak = 0.5f;
}
else
{
sneak = 1f;
}
if (Input.GetKey(KeyCode.LeftShift))
{
sprint = 2f;
}
else
{
sprint = 1f;
}
float jumpForce = Mathf.Sqrt(jumpHeight * -3 * (Physics.gravity.y * gravityScale));
if (Input.GetKeyDown(KeyCode.Space) && IsGrounded())
{
rb.AddForce(Vector2.up * jumpForce, ForceMode.Impulse);
}
// 使摄像机跟随着玩家
transform.position = mainCamera.transform.position - mainCamera.transform.forward * 5;
transform.rotation = Quaternion.LookRotation(mainCamera.transform.forward, Vector3.up);
}
private void FixedUpdate()
{
rb.AddForce(Physics.gravity * (gravityScale - 1) * rb.mass, ForceMode.Acceleration);
}
private bool IsGrounded()
{
return Physics.Raycast(transform.position, Vector3.down, 1.1f);
}
}
评论 (0)