在Unity中创建门脚本时,您必须设置一个轴心点。你使门成为这个支点的孩子。打开门时,枢轴点会旋转,门会自动相对旋转。
我知道你可以在编辑器中创建一个空的GameObject,但我想通过代码来实现它。
[SerializeField]
Vector3 pivotPosition; // the spawn position of the pivot point
Transform pivot;
void Start()
{
pivot= new GameObject().transform; // create the pivot point
pivot.position = pivotPosition; // position the pivot point
transform.SetParent(pivot); // parenting
}
因此,当检查员将门旋转了(0,0,0)时,这种方法很好。
例如,当旋转门时(0,-30,0),创建时枢轴点未正确放置。
如果正确放置,即使门被(x,y,z)旋转,我该怎样才能正确创建此枢轴点
答案 0 :(得分:3)
您可以使用de-DE
实施例
Transform.RotateAround
https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html
答案 1 :(得分:1)
通过执行pivot.position = pivotPosition;
,您将枢轴放在对象的中心。
我在这里看到3个可行的选项:
1 - 如果您正在制作门的型号,您可以将其中心放在地面上的枢轴位置,以帮助定位门的高度
2 - 在枢轴位置使用带有父对象的门预制件。 (实际上可以将该父级用作枢轴而不是通过脚本创建它)
3 - 如果门的GameObject中心位于其中心并且您无法更改它,您可以手动或使用MeshRenderer.bounds计算它。
答案 2 :(得分:0)
有多种可能的解决方案。以下是我所知道的,按照我的偏好顺序:
Transform.RotateAround()
。rotation * (vector - pivot) + pivot
rotation
= Quaternion
代表您的轮换。(vector - pivot)
将您的对象置于“origin”以应用旋转(与使用层次结构方法的逻辑相同)。+ pivot
=在旋转之后重新应用对象和枢轴之间的偏移量。Quaternion
进行轮换时,Quaternion
应始终为第一个操作数( 不 < / strong>执行此操作:(vector - pivot) * rotation
)。