绿球搜寻白球,"感染"他们。白球被摧毁但它们在原点返回。我试图改变白球的位置,但是我一直在努力将转换为Vector3"错误。
public Rigidbody prefabInfection;
public Transform infectLocation;
void OnCollisionEnter(Collision colInfo)
{
if (colInfo.collider.tag == "Infection")
{
Destroy(gameObject);
Instantiate(prefabInfection);
}
}
这是当前正在使用的代码。
我也是Unity的新手。我不应该破坏白球,而是以某种方式将它们变成绿球吗?这可能吗?
实例化似乎是唯一的方法。我想做的就是更换白色"人类"球到绿色"感染"的。
答案 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()
是一种更好的做法。