生成敌人问题
本文关键字:问题 敌人 | 更新日期: 2023-09-27 18:04:58
我试图让我的游戏在玩家到达一个路径点时生成敌人。
现在,我有这个功能工作。当我的玩家到达第一条路时,敌人就会出现。他只有在杀死屏幕上的所有敌人后才会继续前进。然而,当他到达第二个路径点时,没有敌人出现。
现在,在我的碰撞类中,我调用以下代码行:
Destroy(gameObject)
虽然这工作的第一个方式点,第二个不会产生任何东西作为游戏对象,我的碰撞类已被附加到已被破坏。然而,我所有的敌人都是预制物,我认为destroy函数只会破坏预制物的实例。无论何时调用instantiate方法,它都只会销毁该实例。
我用以下方法生成敌人:
public GameObject SpawnEnemies()
{
Vector3 _position = new Vector3(transform.position.x, transform.position.y, transform.position.z);
// instantiate particel system
Instantiate(_particle, _position, Quaternion.identity);
_clone = (GameObject)Instantiate(_enemy, _position, transform.rotation);
_ai = _clone.GetComponent<HV_BaseAI>();
_ai._waypoints = _wayPoints;
return _clone;
}
然后我通过碰撞方法中的以下代码来发现有多少敌人仍然活着:
GameObject g, f; // enemies I want to spawn
g = GameObject.FindGameObjectWithTag("SectionController");
f = GameObject.FindGameObjectWithTag("SectionController");
HV_SectionController tempSectionControllerGroundEnemies, tempSectionControllerFlyingEnemies;
tempSectionControllerGroundEnemies = g.GetComponent<HV_SectionController>();
tempSectionControllerFlyingEnemies = f.GetComponent<HV_SectionController>();
tempSectionControllerGroundEnemies._numberOfGroundEnemies.Remove(gameObject); // remove enemies from list
tempSectionControllerFlyingEnemies._numberOfFlyingEnemies.Remove(gameObject);
//Destroy(gameObject);
_numberOfGroundEnemies = tempSectionControllerGroundEnemies._numberOfGroundEnemies.Count;
_numberOfFlyingEnemies = tempSectionControllerFlyingEnemies._numberOfFlyingEnemies.Count;
然后当我想继续时,我做以下检查:
if (_groundEnemiesRemaining == 0)
{
MoveToNextSection();
_sectionStartTime = Time.time;
}
我知道上面这行目前只检查了一种敌人,但它是地面敌人,我现在有问题。
有没有人知道我如何删除敌人预制我从我的第一个部分,一旦他们被击中,然后有它重生在下一个部分没有错误:
类型为"GameObject"的对象已被销毁,但你仍然正在访问
我的猜测是游戏对象被两个不同的碰撞事件"摧毁"了。第一个程序销毁它,第二个程序抛出错误。
在类似的情况下,我所做的是将Destroy代码放在被销毁的对象中。然后,在你的碰撞类中,使用gameObject.SendMessage(string)
向实际对象发送一条消息,从而销毁它。
如果没有看到进一步的代码,我无法推测错误的起源,但以上是我最好的猜测。SendMessage也可以接受一个dontrequirerreceiver参数,所以当两个冲突事件试图向它发送消息时,它不会弹出一个错误。
与其摧毁它们,不如用gameObject.SetActive()
来disable
它们!