C# 实例化新对象后对象引用不更新
我实例化了一个新对象,在旧对象到达边界后销毁它。对象在正确的位置实例化并具有正确的行为,但是一个脚本不会更新对新对象的引用,即使我已将其写入脚本中 碰撞事件:C# 实例化新对象后对象引用不更新,c#,unity3d,C#,Unity3d,我实例化了一个新对象,在旧对象到达边界后销毁它。对象在正确的位置实例化并具有正确的行为,但是一个脚本不会更新对新对象的引用,即使我已将其写入脚本中 碰撞事件: void OnTriggerExit2D(Collider2D other) { if (other.GetComponent<Rigidbody2D>() == projectile) { Respawn(); Ammo -= 1; SetAmmoCount()
void OnTriggerExit2D(Collider2D other)
{
if (other.GetComponent<Rigidbody2D>() == projectile)
{
Respawn();
Ammo -= 1;
SetAmmoCount();
Destroy(GO);
UpdateReferences();
}
}
我用了一些坏名字来引用对象和东西。是的,我正在实例化的对象是一个预置对象。将您的重生函数替换为:
void Respawn()
{
GameObject obj = GameObject.Instantiate(player, Vector3.zero, Quaternion.identity) as GameObject;
obj.tag = "Damager";
projectile.isKinematic = true;
isSpawned = true;
}
因此,在阅读了
Destroy()
之后,我又想起了我以前遇到的一个问题。使用Destroy()
时,实际上也会销毁对该对象的引用。因此,在尝试创建新副本并将引用移到该副本时,会产生问题。您应该使用的是GameObject.SetActive()
,然后引用将全部更新到带有实例化的新对象,并且引用将更新到我上面的问题中。发布您的重生();函数代码GameObject.Instantiate(Object,Vector3.zero,Quaternion.identity)代码>?这段代码不应该编译。我想知道您正在实例化什么,以及该对象是如何声明的。这是预制的吗?再次更新您的代码。我使用一个公共游戏对象播放器引用Unity中的预置用下面的内容替换您的respawn函数,看看它是否也能工作什么是GO
,以及您为什么要销毁它。你说它似乎找不到新的物体。你有错误吗?还是同一个问题,参考文献没有更新我考虑过,但我不知道GO是什么。很好,你自己想出来了。是的,给东西命名是我不喜欢的。不管怎样,谢谢你的帮助。
void Respawn()
{
GameObject.Instantiate(player, Vector3.zero, Quaternion.identity);
projectile.isKinematic = true;
isSpawned = true;
}
void Respawn()
{
GameObject obj = GameObject.Instantiate(player, Vector3.zero, Quaternion.identity) as GameObject;
obj.tag = "Damager";
projectile.isKinematic = true;
isSpawned = true;
}