c# - Mathf.Clamp 在 Unity 3D 中将我的 eulerangle 重置为 minValue

标签 c# unity3d quaternions euler-angles clamp

Mathf.Clamp 在达到最大值时将我的欧拉角重置为最小值,而不是将其限制在最大值。我试过这个:

            rotateX = Input.GetAxis("Mouse X") * senseX;
        player.transform.Rotate(player.up, Mathf.Deg2Rad * rotateX, Space.World);

        playerXRotation = player.eulerAngles;

        while (playerXRotation.y > 180f)
            playerXRotation.y -= 360f;

        Debug.Log("Y Rotation: " + playerXRotation.y);
        playerXRotation.y = Mathf.Clamp(playerXRotation.y, lowLimitY, highLimitY);
        player.transform.eulerAngles = playerXRotation;

还有这个:

         rotate = Input.GetAxis("Mouse X") * senseX;
         rotation = player.transform.eulerAngles;
         rotation.y += rotate * RateOfRotate;

         while (rotation.y > 180)
         {
             rotation.y -= 360;
         }
         rotation.y = Mathf.Clamp(rotation.y, lowLimitY, highLimitY);
         player.transform.eulerAngles = rotation;

在这两种情况下,我的 lowLimitY = 0 和 highLimitY = 180;我被困在这个问题上,不知道如何解决它。任何帮助将不胜感激。

最佳答案

因为旋转是四元数

并且它们会转换为范围为 [0-360) 的欧拉角,因此 while (rotation.y > 180) 将永远不起作用。

您需要单独跟踪旋转值,固定到所需值,然后将其应用于对象的旋转。

rotation = player.transform.eulerAngles;
float rotationY = rotation.y + rotate * RateOfRotate;
rotationY = Mathf.Clamp(rotationY, lowLimitY, highLimitY);
rotation.y = rotationY;
player.transform.eulerAngles = rotation;

关于c# - Mathf.Clamp 在 Unity 3D 中将我的 eulerangle 重置为 minValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53053267/

相关文章:

unity3d - 无法在 Unity 的音频源中添加音频剪辑

c# - 在 Unity/C# 中,.Net 的 async/await 是否真的启动了另一个线程?

matrix - 对象旋转时法线旋转错误

C# 创建缩略图(低质量和大尺寸问题)

c# - .NET 脚本编辑器的替代品

c# - 如何使用c#代码更改ppt表格单元格的背景颜色?

rotation - 两个四元数之间的 "Distance"(或角幅度)?

c# - 定义错误代码的规则?

unity3d - 如何从脚本统一播放音频剪辑?

c++ - 在 C++ 中对代数结构矩阵使用类的开销