代码看起来像这样:
void Update () {
if(Vector3.Distance(transform.position, specificPositionOfHugeGameobject) < dist)
{
transform.position = Vector3.MoveTowards(transform.position,
specificPositionOfHugeGameobject, Time.deltaTime * speed);
}
}
意识到我不想要将对象移动到hugeGameobject.position
,而是将该对象移动到该巨大游戏对象的特定点。
我认为最佳解决方案是创建一个空的游戏对象,它是巨大游戏对象的孩子。然后,将对象移向该空的子游戏对象。
答案 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
。