unity3d 为什么我的Unity对象旋转受到限制?

js5cn81o  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(238)
public class cameraRotation : MonoBehaviour
{
    [SerializeField] float speed = 20f;
    public Vector2 movement;
    public float lrCMovement;
    public float udCMovement;
    [SerializeField] float rotationX;
    [SerializeField] float rotationY;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    public void onCameraMove(InputAction.CallbackContext ctx)
    {

        movement = ctx.ReadValue<Vector2>() * speed;
        lrCMovement = movement.x;
        udCMovement = movement.y;
     

    }
    // Update is called once per frame
    void Update()
    {
        transform.rotation = new Quaternion(transform.rotation.x + -udCMovement *   
        Time.fixedDeltaTime, transform.rotation.y + lrCMovement * Time.fixedDeltaTime, 
        transform.rotation.z, 1);

    }
}

我做了一个物体,我想让它根据用户的输入旋转,通过游戏手柄。但是,当手柄向一边倾斜的时间更长时,它不会旋转360度,而是停止在大约40度。有人知道我做错了什么吗?

5sxhfpxr

5sxhfpxr1#

首先,Quaternion并不比一个向量复杂多少,所以你不能把x,y,z相加,但是你可以这样做

transform.rotation *= Quaternion.Euler(-udCMovement *   
        Time.fixedDeltaTime, lrCMovement * Time.fixedDeltaTime, 0);

因为您使用Time.fixedDeltaTime,我建议您使用FixedUpateTime.deltaTime,不要错过和匹配它们。
我会怀疑这是一个Gimbal lock的情况。

相关问题