如何冻结 z & y 轴方向的旋转? Unity3D

问题描述

我有一个平台,如果物体在上面不均匀分布,它可以在一个宽圆柱体上摆动。

为此,我创建了一个带有网格对撞机的圆柱体,并在其顶部放置了一个平台,其中心彼此重合。

然后我在平台上附加了一个代码来冻结它的位置,即平台现在只能旋转,不能下落。

代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DeterminantOfPlatformEquilibrium : MonoBehavIoUr
{
   Vector3 newYPos;

    void Start()
    {
    newYPos = transform.position;
    }

    void Update()
    {
        /*We're setting the position of the object in the
        "y" direction - unchanged,and equal to zero,so that the platform does not fall becaude of gravity*/
newYPos.y += 0.0f;
transform.position = newYPos;
newYPos += new Vector3(0f,0f,0f);

    }
}

除了冻结平台的位置之外,我还必须冻结它在 y 和 z 方向上的旋转,以便它只在一个方向上旋转 - 在 x 上。

我尝试使用 Quaternion 类中对 Euler() 方法调用来做到这一点,为 x 轴设置一定的旋转角度,并将其他 2 个轴设置为零,在我看来,一切都应该工作,但这一行在我的代码中似乎没有做任何事情:Quaternion rotation = Quaternion.Euler(23f,0f);

您是否有更多可能的选项来冻结这两个轴?

解决方法

我发现您是 Unity3D 的新手。 你的“位置冻结”实际上什么都不做,你只是在位置上加零,而在某些东西上加零不会改变它。如果您的圆柱体没有 Rigidbody 组件,它就不会因重力而下落。

您的旋转对您没有任何作用,因为您创建了一个名为 rotation 的变量,但您没有将它分配给任何地方。此外,您可以将 Vector3.right 乘以 X 值,而不是为 Y 和 Z 写零。所以在 X 方向旋转你的圆柱体的代码是:

transform.rotation = Quaternion.Euler(Vector3.right * 23f);

,

我不确定我是否误解了您的问题, 但是这行代码:

Quaternion rotation = Quaternion.Euler(23f,0f,0f);

什么都不做,因为您从不使用您创建的变量。 如果你想设置旋转尝试:

transform.rotation = Quaternion.Euler(...)

如果您使用的是刚体,您还可以在检查器中限制绕特定轴的旋转。