Unity 3D C#:如何限制第一人称相机垂直旋转角度?
问题:限制第一人称相机垂直旋转范围
我在用Unity新输入系统制作第一人称控制器,想要限制相机的垂直旋转范围,避免它进行360度旋转。目前水平旋转作用于玩家对象,垂直旋转作用于玩家的子对象相机。我尝试过使用Mathf.Clamp和欧拉角,但都没有效果,以下是我的代码:
using UnityEngine; using UnityEngine.InputSystem; public class FirstPersonController : MonoBehaviour { public AICOde PlayerControls; Vector2 moveDirection = Vector2.zero; public Vector3 jumpForce; float hlookDirection; float vlookDirection; public float isJumping; public InputAction move; public InputAction jump; public InputAction look; public Rigidbody rb; public bool isOnGround; public float moveSpeed; public float sensitivity; public Camera playerCamera; public Quaternion cameraRotation; private void Awake() { PlayerControls = new AICOde(); } private void Start() { playerCamera = gameObject.GetComponentInChildren<Camera>(); Cursor.lockState = CursorLockMode.Locked; } private void OnEnable() { jump = PlayerControls.Player.Jump; move = PlayerControls.Player.Move; look = PlayerControls.Player.Look; move.Enable(); jump.Enable(); look.Enable(); } private void OnDisable() { move.Disable(); jump.Disable(); look.Disable(); } private void Update() { cameraRotation = playerCamera.transform.rotation; hlookDirection = look.ReadValue<Vector2>().x; vlookDirection = look.ReadValue<Vector2>().y; moveDirection = move.ReadValue<Vector2>(); isJumping = jump.ReadValue<float>(); } private void FixedUpdate() { //MOVE PLAYER rb.velocity = transform.TransformDirection(new Vector3(moveDirection.x * moveSpeed, rb.velocity.y, moveDirection.y * moveSpeed)); //ROTATE PLAYER WITH MOUSE gameObject.transform.Rotate(Vector3.up, hlookDirection * sensitivity * Time.deltaTime); //ROTATE CAMERA WITH MOUSE playerCamera.transform.Rotate(Vector3.left, vlookDirection * sensitivity * Time.deltaTime); //JUMP if (isJumping > 0 && isOnGround == true) { rb.AddForce(jumpForce, ForceMode.Impulse); } if (isJumping > 0) { isOnGround = false; } if (isOnGround) { moveSpeed = 5f; } else { moveSpeed = 4f; } } //MAKE SURE PLAYER IS ON GROUND BEFORE JUMPING private void OnCollisionEnter(Collision collision) { if(collision.collider.CompareTag("Ground")) { isOnGround = true; } else { isOnGround = false; } } }
内容的提问来源于stack exchange,提问作者Swirlz
相关产品推荐
相关产品推荐

