【问题标题】:creating a pivot point by code in Unity在 Unity 中通过代码创建轴心点
【发布时间】:2017-10-20 11:27:14
【问题描述】:

在 Unity 中创建门脚本时,您必须设置轴心点。你让门成为这个枢轴点的子节点。开门时,枢轴点旋转,门会自动相对旋转。

我知道你可以在编辑器中创建一个空的游戏对象,但我想通过代码来实现。

[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) 也有正确的位置

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    你可以使用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);
        }
    }
    

    https://docs.unity3d.com/ScriptReference/Transform.RotateAround.html

    【讨论】:

      【解决方案2】:

      通过pivot.position = pivotPosition;,您将枢轴放置在对象的中心。

      我在这里看到了 3 个可行的选项:

      1 - 如果你正在制作门的模型,你可以让它的中心在枢轴的位置上,也可以在地面上帮助定位门的高度。

      2 - 使用门预制件,其父对象位于枢轴的位置。 (实际上可以将该父级用作枢轴,而不是通过脚本创建它)

      3 - 如果 Door 的 GameObject 中心位于其中心并且您无法更改它,您可以手动或使用 MeshRenderer.bounds 计算它。

      【讨论】:

        【解决方案3】:

        有多种可能的解决方案。以下是我所知道的,按我的偏好顺序排列:

        1. 您可以使用Transform.RotateAround()
        2. 您可以使用层次结构对其进行旋转,就像您正在做的那样。旋转“枢轴”父级将产生“围绕枢轴旋转子级”的预期效果。
        3. 您可以“手动”计算围绕枢轴的旋转:
          • 如何:rotation * (vector - pivot) + pivot
          • 在哪里:
            • rotation = Quaternion 代表您的轮换。
            • (vector - pivot) 将您的对象置于“原点”以应用旋转(与使用层次结构方法的逻辑相同)。
            • + pivot = 在旋转完成后重新应用对象和枢轴之间的偏移量。
            • 重要提示:当使用Quaternions 应用旋转时,Quaternion 应该始终是第一个操作数(不要这样做:@ 987654329@)。
        4. 如果您正在创建 3D 网格,特别是在建模应用程序中,您可以简单地在那里调整枢轴。
          • 奖励:在这种情况下,如果您的 3D 应用程序支持动画(它可能支持),您甚至可以在那里制作打开/关闭动画。
        5. 您可以使用 (Unity) 动画,而不管您的 3D 模型的轴心。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-08
          • 1970-01-01
          • 2013-06-09
          • 1970-01-01
          • 2012-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多