问题描述
我有一个平台,如果物体在上面不均匀分布,它可以在一个宽圆柱体上摆动。
为此,我创建了一个带有网格对撞机的圆柱体,并在其顶部放置了一个平台,其中心彼此重合。
然后我在平台上附加了一个代码来冻结它的位置,即平台现在只能旋转,不能下落。
代码如下:
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(...)
如果您使用的是刚体,您还可以在检查器中限制绕特定轴的旋转。