unity3d 即使启用了刚体约束,角色也会在X和Z轴上随机旋转

5us2dqdw  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(201)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;

class FirstPersonCamera : MonoBehaviour
{

    public float mouseSensitivity = 100f;

    public Transform playerTransform;
    public Transform weaponTransform;

    private float xRotation = 0;

    void Start()
    {
        UnityEngine.Cursor.lockState = CursorLockMode.Locked; //Hides the cursor and locks it to the center
    }

    void Update()
    {
        float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;
        float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;

        xRotation -= mouseY;
        xRotation = Mathf.Clamp(xRotation, -90, 90);

        transform.localRotation = Quaternion.Euler(xRotation, 0, 0);
        weaponTransform.localRotation = Quaternion.Euler(xRotation, 0, 0);

        playerTransform.Rotate(new Vector3(0.0f, mouseX, 0.0f));

        //playerTransform.gameObject.GetComponent<Rigidbody>().MoveRotation(Quaternion.Euler(0.0f,mouseX,0.0f));

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            UnityEngine.Cursor.lockState = CursorLockMode.None;
        }
    }
}

这是我使用的球员看(鼠标控制),这不断发生:

即使我有刚体X和Z旋转锁定。问题似乎主要出现在一起使用键盘控制和鼠标。这里是playerMove代码以及:https://codeshare.io/wnzrYj。它不应该做任何与旋转有关的事情。
我试过移除playerTransform.Rotate,问题似乎消失了。我也试过通过刚体旋转gameObject,但似乎根本没有旋转物体。

r55awzrz

r55awzrz1#

旋转是由你自己引起的。你添加了xRotation,它会影响倾斜,但是你使用了Transform.Rotate,它在局部起作用。这意味着当倾斜时,你的Rotate不再围绕世界的Y轴,而是围绕对象的倾斜Y轴,向你不想要的轴添加旋转。
解决这个问题最简单的方法是正确地构建层次结构,以确保按照您想要的顺序应用旋转。

Root -> YawPivot -> Body -> PitchPivot -> Head/Camera

Root对象将应用平移(偏移/移动)。YawPivot仅绕Y轴旋转。PitchPivot仅绕X轴旋转(通常位于颈部或头部区域周围)。

相关问题