You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 22:40:32