C# 在Unity中通过代码创建轴心点
在Unity中创建门脚本时,必须设置轴点。使门成为此轴点的子对象。打开门时,轴点将旋转,门将自动相对于轴点旋转 我知道你可以在编辑器中创建一个空的游戏对象,但我想通过代码来实现C# 在Unity中通过代码创建轴心点,c#,unity3d,C#,Unity3d,在Unity中创建门脚本时,必须设置轴点。使门成为此轴点的子对象。打开门时,轴点将旋转,门将自动相对于轴点旋转 我知道你可以在编辑器中创建一个空的游戏对象,但我想通过代码来实现 [SerializeField] Vector3 pivotPosition; // the spawn position of the pivot point Transform pivot; void Start() { pivot= new GameObject().transform; //
[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
}
因此,在inspector中,当门旋转(0,0,0)时,这可以很好地工作
旋转门(例如(0,-30,0)时,创建门时未正确放置轴点
如何通过执行
pivot.position=pivotPosition,在门旋转(x,y,z)的情况下正确创建此枢轴点,并具有正确的位置代码>将轴放置在对象的中心
我在这里看到3种可行的选择:
1-如果要制作门的模型,可以使其中心位于枢轴位置,也可以位于地面上,以帮助定位门的高度
2-在枢轴位置使用带有父对象的门预制件。(实际上可以使用该父级作为轴心,而不是通过脚本创建它)
3-如果门的游戏对象中心位于其中心,并且您无法更改它,则可以手动或使用进行计算。通过执行pivot.position=pivotPosition代码>将轴放置在对象的中心
我在这里看到3种可行的选择:
1-如果要制作门的模型,可以使其中心位于枢轴位置,也可以位于地面上,以帮助定位门的高度
2-在枢轴位置使用带有父对象的门预制件。(实际上可以使用该父级作为轴心,而不是通过脚本创建它)
3-如果门的游戏对象中心在其中心,而您无法更改它,则可以手动或使用进行计算。您可以使用变换。旋转
范例
using UnityEngine;
public class RotateAround : MonoBehaviour {
public Transform pivot;
public float degreesPerSecond;
void Update () {
transform.RotateAround(pivot.position, Vector3.up, degreesPerSecond * Time.deltaTime);
}
}
您可以使用Transform.RotateAround
范例
using UnityEngine;
public class RotateAround : MonoBehaviour {
public Transform pivot;
public float degreesPerSecond;
void Update () {
transform.RotateAround(pivot.position, Vector3.up, degreesPerSecond * Time.deltaTime);
}
}
有多种可能的解决方案。以下是我所知道的,按我的偏好顺序排列:
您可以使用Transform.RotateAround()
您可以像现在这样使用层次结构来透视它。旋转“枢轴”父对象将获得所需的“围绕枢轴旋转子对象”效果
您可以“手动”计算围绕枢轴的旋转:
- 方式:
rotation*(向量-轴)+pivot
- 其中:
旋转
=表示旋转的四元数
(vector-pivot)
将对象置于“原点”以应用旋转(与使用层次方法的逻辑相同)
+pivot
=旋转完成后,重新应用对象和轴之间的偏移
- 重要提示:使用
四元数
s应用旋转时,四元数
应始终是第一个操作数(不要执行此操作:(向量-轴)*旋转
)
如果要创建三维网格,特别是在建模应用程序中,只需在其中调整轴即可。
- 好处:在这种情况下,如果您的3D应用程序支持动画(它可能支持),您甚至可以在那里执行打开/关闭动画
无论三维模型的轴如何,都可以使用(Unity)动画
有多种可能的解决方案。以下是我所知道的,按我的偏好顺序排列:
您可以使用Transform.RotateAround()
您可以像现在这样使用层次结构来透视它。旋转“枢轴”父对象将获得所需的“围绕枢轴旋转子对象”效果
您可以“手动”计算围绕枢轴的旋转:
- 方式:
rotation*(向量-轴)+pivot
- 其中:
旋转
=表示旋转的四元数
(vector-pivot)
将对象置于“原点”以应用旋转(与使用层次方法的逻辑相同)
+pivot
=旋转完成后,重新应用对象和轴之间的偏移
- 重要提示:使用
四元数
s应用旋转时,四元数
应始终是第一个操作数(不要执行此操作:(向量-轴)*旋转
)
如果要创建三维网格,特别是在建模应用程序中,只需在其中调整轴即可。
- 好处:在这种情况下,如果您的3D应用程序支持动画(它可能支持),您甚至可以在那里执行打开/关闭动画
无论三维模型的轴如何,都可以使用(Unity)动画