销毁一个物体并用原始物体位置的预制件替换?

时间:2018-05-25 17:06:07

标签: c# unity3d

enter image description here

绿球搜寻白球,"感染"他们。白球被摧毁但它们在原点返回。我试图改变白球的位置,但是我一直在努力将转换为Vector3"错误。

public Rigidbody prefabInfection;
public Transform infectLocation;

void OnCollisionEnter(Collision colInfo)
{
    if (colInfo.collider.tag == "Infection")
    {
        Destroy(gameObject);
        Instantiate(prefabInfection);
    }
}

这是当前正在使用的代码。

我也是Unity的新手。我不应该破坏白球,而是以某种方式将它们变成绿球吗?这可能吗?

实例化似乎是唯一的方法。我想做的就是更换白色"人类"球到绿色"感染"的。

2 个答案:

答案 0 :(得分:3)

您看到的错误可能是因为您使用的是Transform对象而不是.position。假设您的代码是白球gameObject上的一个组件,请尝试:

public Rigidbody prefabInfection;

void OnCollisionEnter(Collision colInfo)
{
    if (colInfo.collider.tag == "Infection")
    {
        Destroy(gameObject);
        Instantiate(prefabInfection, transform.position, transform.rotation);
    }
}

通过将transform.position传递给Instantiate函数,新对象将在与您正在销毁的对象相同的位置创建。希望这是你想要的行为!

答案 1 :(得分:2)

因为您正在销毁当前对象,所以您的脚本永远不会实例化新对象,因为它在有机会之前就已被销毁。

Instantiate(prefabInfection, gameObject.transform.position);
Destroy(gameObject);

如果按此顺序执行,并传入对象的位置,它应该按照您的意图工作。

编辑:我刚刚得知Destroy实际上会等到当前Update()帧完成后才能销毁对象。我会留下我的答案,因为我仍然认为最后拨打Destroy()是一种更好的做法。