最直接移动对象以达到巨大Gameobject的特定点的正确方法

时间:2018-03-09 15:24:32

标签: unity3d

代码看起来像这样:

void Update () {
   if(Vector3.Distance(transform.position, specificPositionOfHugeGameobject) < dist)
   {
      transform.position = Vector3.MoveTowards(transform.position, 
      specificPositionOfHugeGameobject, Time.deltaTime * speed);
   }
}

意识到我想要将对象移动到hugeGameobject.position,而是将该对象移动到该巨大游戏对象的特定点。

我认为最佳解决方案是创建一个空的游戏对象,它是巨大游戏对象的孩子。然后,将对象移向该空的子游戏对象。

2 个答案:

答案 0 :(得分:1)

您提出的解决方案是在Unity中执行此操作的常用方法。

作为替代点,您可以对其进行硬编码或让用户在公共字段中输入Vector3。

public Vector3 targetPosition;

void Update () {
    if(Vector3.Distance(transform.position, specificPositionOfHugeGameobject) < dist)
    {
        transform.position = Vector3.MoveTowards(transform.position, 
        targetPosition, Time.deltaTime * speed);
    }
}

这当然意味着目标位置是固定的。由于您的巨大游戏对象正在移动,目标点必须相对移动。您可以使用HugeGameObject的信息(位置和旋转)自己编码每帧的targetPosition计算。但是,当您使用父对象时,这正是Unity为您所做的事情:它计算子元素相对于父元素的位置。

因此,使用Unity的层次结构功能实际上是最正确的方法。

答案 1 :(得分:0)

另一种简单的方法是添加一个简单的Vector3 offset,取决于巨大的position

public Vector3 offset;

void Update ()
{
   if(Vector3.Distance(transform.position, specificPositionOfHugeGameobject) < dist)
   {
      transform.position = Vector3.MoveTowards(transform.position, hugePosition + offset, Time.deltaTime * speed);
   }
}

现在在检查员中使用offset