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,但似乎根本没有旋转物体。
1条答案
按热度按时间r55awzrz1#
旋转是由你自己引起的。你添加了xRotation,它会影响倾斜,但是你使用了Transform.Rotate,它在局部起作用。这意味着当倾斜时,你的Rotate不再围绕世界的Y轴,而是围绕对象的倾斜Y轴,向你不想要的轴添加旋转。
解决这个问题最简单的方法是正确地构建层次结构,以确保按照您想要的顺序应用旋转。
Root对象将应用平移(偏移/移动)。YawPivot仅绕Y轴旋转。PitchPivot仅绕X轴旋转(通常位于颈部或头部区域周围)。