C# 如何限制摄像头';s垂直旋转统一3D

C# 如何限制摄像头';s垂直旋转统一3D,c#,unity3d,camera,C#,Unity3d,Camera,我想限制相机的垂直旋转,这样它就不能360度旋转了。我试过很多教程,但都不管用,所以我选择了 请检查我的代码 [RequireComponent(typeof(PlayerMoto))] 公共类玩家控制器:单行为{ 公共浮动速度=5,灵敏度; 私人游戏者摩托马达; 公开游戏对象之手; 公共摄像机; float lookUpMax=.6 f; void Start(){ 马达=获取组件(); cam=GetComponent(); } 无效更新(){ //cam.transform.localEu

我想限制相机的垂直旋转,这样它就不能360度旋转了。我试过很多教程,但都不管用,所以我选择了

请检查我的代码

[RequireComponent(typeof(PlayerMoto))]
公共类玩家控制器:单行为{
公共浮动速度=5,灵敏度;
私人游戏者摩托马达;
公开游戏对象之手;
公共摄像机;
float lookUpMax=.6 f;
void Start(){
马达=获取组件();
cam=GetComponent();
}
无效更新(){
//cam.transform.localEulerAngles=新矢量3(cam.transform.localEulerAngles.x,0,0);
float_xmove=Input.GetAxis(“水平”);
float_zmove=Input.GetAxis(“垂直”);
Vector3_moveHorizontal=transform.right*_xmove;
Vector3 _movVertical=transform.forward*_zmove;
矢量3 _速度=(_水平移动+_垂直移动)*速度;
运动速度;
float _yRot=Input.GetAxis(“鼠标X”);
矢量3旋转=新矢量3(0 f,0 f)*灵敏度;
电机旋转(_旋转);
float xRot=Input.GetAxis(“鼠标Y”);
Vector3 _cameraRotation=新Vector3(_xRot,0 f,0 f)*灵敏度;
电机旋转摄像机(摄像机旋转);
if(Input.GetKey(KeyCode.LeftShift)和&Input.GetKey(KeyCode.W)){

对于(;speed如果我理解了您的代码,则移动相机的部分是:

float _xRot = Input.GetAxis("Mouse Y");
Vector3 _cameraRotation = new Vector3(_xRot, 0f, 0f) * sensetivity;
然后,代码在另一个类上调用此方法

motor.RotateCamera(_cameraRotation);
这可能(因为之前的建议不起作用)通过

GameObject.Rotate(_cameraRotation);
为了限制相机的旋转,我们需要直接应用旋转,如果通过向现有旋转添加旋转来应用旋转,则无法夹紧旋转。 因此,假设您可以跳过该调用并直接应用旋转(我不知道是否会有副作用),假设您的
cam
变量是您的相机。 如果所有这些假设都正确,您可以尝试:

float _xRot += Input.GetAxis("Mouse Y") * sensetivity;
xRot = Mathf.Clamp(_xRot, xMin, xMax);
cam.transform.rotation = Quaternion.Euler(_xRot, 0.0f, 0.0f);
记得把它注释掉

//motor.RotateCamera(_cameraRotation);
你可以申报

public float xMin;
public float xMax;
并尝试价值观,直到找到最佳价值观

我强烈怀疑我建议的代码不会解决您的所有问题,或者可能会增加问题,因为您的播放器和相机的实际转换都是由另一个脚本应用的,而该脚本没有提供。在这种情况下,您也可以向我们提供该代码,但我建议您尝试编写自己的代码,您可以自定义该代码你的需要

至于为什么夹紧旋转不像看上去那么容易,这篇文章很有趣:

试试这个
tnx试图帮助我,但它仍然不起作用。如果我让xMax=60和xMin=-60什么都不发生,它仍然没有限制,但如果我做xMax=-60和xMin=60,它只是开始旋转相机,我无法停止它。我真的需要知道你的问题是什么。此外,你需要为我们提供更多的上下文。例如,我们使用什么语言使用什么操作系统?
 private void Rotation()
    {
        x_axis += speed * Input.GetAxis("Mouse X"); // speed = 2f;

        y_axis -= speed * Input.GetAxis("Mouse Y");
        y_axis = Mathf.Clamp (y_axis, -45, 45); // limits vertical rotation

        transform.eulerAngles = new Vector3(y_axis, x_axis, 0.0f);
    }