2013-03-21 165 views
1

我试图让我的游戏产生敌人时,玩家达到一个方式点。产卵敌人问题

现在,我有这个功能工作。当我的玩家获得第一种方式时,敌人会产生。他只有在他杀死了屏幕上的所有敌人后才会继续前进。但是,当他到达第二个路点时,没有敌人产生。

现在,在我的碰撞I类调用下面的代码行:

Destroy(gameObject) 

虽然这项工作的第一点位,第二个不会酿出什么作为游戏对象我的碰撞类已附着到已经被摧毁。然而,我所有的敌人都是预制装备,我认为销毁功能只会破坏预制的那个实例。无论何时调用实例化方法,它只会销毁该实例。

我产卵我的敌人用下面的方法:

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; 
     } 

我知道上面的行目前仅检查一种类型的敌人,但目前我遇到的是地面敌人。

有谁知道我怎么能删除敌人预制我从我的第一部分产卵,它们一旦被击中了,然后把它重生在下一节中没有错误:

The object of type 'GameObject' has been destroyed but you are still trying to access it.

+0

你在哪里发起'gameObject'?你在哪里删除/销毁它们? – Joetjah 2013-03-21 13:17:09

+0

我在一个名为SpawnGroundEnemy的类中实例化了我的gameObject,并在EnemeyDeath类中摧毁了它们。 – N0xus 2013-03-21 14:16:28

+0

呃,显然你试图在它被销毁时访问'GameObject'。我看不到你创建并销毁它的代码,并且我确定这不是所有使用'GameObject'的代码。我无法通过提供的代码找到错误... – Joetjah 2013-03-21 14:22:28

回答

0

我猜测会是两个不同的碰撞事件“破坏”了游戏对象。第一个破坏它,第二个抛出错误。

我在类似情况下所做的是将Destroy代码放入被销毁的对象中。然后从碰撞类中,使用gameObject.SendMessage(string)向实际的对象发送消息,消除它。

没有看到进一步的代码,我不能推测错误的起源,但以上是我最好的猜测。 SendMessage也可以带一个DontRequireReceiver参数,所以如果两个碰撞事件试图发送一条消息,它不会弹出一个错误。

0

而不是摧毁它们,你可以使用disablegameObject.SetActive()