我有一个平台,如果物体不均匀地分布在它上,它可以在一个宽圆柱体上摆动。
为了做到这一点,我用网格对撞机创建了一个圆柱体,在上面放置了一个平台,它的中心彼此重合。
然后我在平台上附加了一个代码,这个代码冻结了平台的位置,也就是说,平台现在只能旋转,而不能掉落。
以下是代码:
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方向上的旋转,这样它就只能朝一个方向旋转- In x。
我尝试使用四元数类中对Euler ()方法的调用,将某个旋转角度设置为x轴,并将其他2个轴设置为零,在我看来,一切都应该工作,但这一行在我的代码中似乎没有做任何事情:Quaternion rotation = Quaternion.Euler(23f, 0f, 0f);。
你有更多的选择来冻结这两个轴吗?
发布于 2021-07-19 17:09:18
我看你是Unity3D的新手。你的“位置冻结”实际上没有任何作用,你只是把零加到这个位置上,而把零加到某物上并不能改变它。如果你的圆柱体没有Rigidbody成分,它不会因为重力而下降。
您的旋转不会对您有任何影响,因为您创建了一个名为rotation的变量,但是没有给它赋值。另外,不用为Y和Z写零,您可以将Vector3.right乘以X值。所以你的圆柱体向X方向旋转的代码是:
transform.rotation = Quaternion.Euler(Vector3.right * 23f);
发布于 2022-04-23 07:18:14
冻结所有旋转
rigidbody.constraints = RigidbodyConstraints.FreezeRotation;冷冻比旋转:
rigidbody.constraints = RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ;您可以找到视图统一文献,但是他们并没有很好地解释它
发布于 2021-07-19 17:08:31
我不确定我是否误解了你的问题,但这一行代码:
Quaternion rotation = Quaternion.Euler(23f, 0f, 0f);不会做任何事情,因为您从未使用您创建的变量。如果要设置轮换,请尝试:
transform.rotation = Quaternion.Euler(...)如果您使用的刚体,您也可以限制旋转围绕特定的轴在检验员。
https://stackoverflow.com/questions/68444315
复制相似问题