我在实例化一个新对象,一旦它击中边界就销毁旧对象。该对象在正确的位置实例化并具有正确的行为,但是一个脚本不会更新对新对象的引用,即使我已将它写入脚本中。对象引用在新对象实例化后不会更新
碰撞事件:
void OnTriggerExit2D(Collider2D other)
{
if (other.GetComponent<Rigidbody2D>() == projectile)
{
Respawn();
Ammo -= 1;
SetAmmoCount();
Destroy(GO);
UpdateReferences();
}
}
UpdateReferences方法:
void UpdateReferences()
{
projectile = GameObject.FindGameObjectWithTag("Damager").GetComponent<Rigidbody2D>();
tran = GameObject.FindGameObjectWithTag("Damager").GetComponent<Transform>();
GO = GameObject.FindGameObjectWithTag("Damager");
}
每次我运行游戏它似乎并没有能够找到新对象。然而,我已经使用这种方法更新对象引用在其他脚本为同一个对象,它工作得很好。不知道我做错了什么。
重生方法:
void Respawn()
{
GameObject.Instantiate(player, Vector3.zero, Quaternion.identity);
projectile.isKinematic = true;
isSpawned = true;
}
它编译我用一些不好的名字来引用的对象和事情。是的,我正在实例化的对象是预制件。所以读成Destroy()
多一点,我突然想到一个问题我之前具有
void Respawn()
{
GameObject obj = GameObject.Instantiate(player, Vector3.zero, Quaternion.identity) as GameObject;
obj.tag = "Damager";
projectile.isKinematic = true;
isSpawned = true;
}
Post your Respawn();函数代码 – Programmer
'GameObject.Instantiate(Object,Vector3.zero,Quaternion.identity);'?该代码不应该编译。我想知道你在实例化什么以及如何声明这个对象。这是预制吗?再次更新您的代码。 – Programmer
我使用一个公共的GameObject播放器来引用统一的预制 – geolaw