【问题标题】:How to have a Game Object remove itself from a list? (Unity3d)如何让游戏对象从列表中删除自己? (Unity3d)
【发布时间】:2014-07-26 20:51:14
【问题描述】:

好的,所以基本上我有一个跟踪场景中所有敌人的列表。我主要使用列表,这样我可以让每个敌人检查其他敌人的位置,这样他们就不会出现在同一个地方。每当创建敌人时,它都会将自己添加到列表中,但是我需要敌人在被杀死后将其删除。我尝试了下面代码中的内容,但它引发了一个错误(ArgumentOutOfRangeException:参数超出范围)。

void Start () 
{
    Manager.EnemyList.Add(this.gameObject);
    ListSpot = Manager.EnemyList.Count; 
}

//Kills the enemy
public void Kill()
{
    Manager.EnemyList.RemoveAt(ListSpot);
    Destroy(this.gameObject);
}

【问题讨论】:

  • 你试过Manager.EnemyList.Remove(this.gameObject)吗?

标签: c# list unity3d gameobject


【解决方案1】:

使用 System.Collections.Generic 命名空间中的列表,然后您可以使用对象实例调用 Add 和 Remove。它将使用实例的哈希函数来做它的事情。

List<GameObject> enemies = new List<GameObject>();
enemies.Add(enemy1);
enemies.Remove(enemy1);

编辑:您的解决方案引发异常,因为索引从 0 开始,并且 count 将始终从 1 开始计数。如果添加第一个元素,其位置为 0,但计数为 1。

【讨论】:

  • 但是,大多数时候,我们希望列表存储一些东西,而删除它们时,我们可能没有那个游戏对象..
  • 如果您需要在单体行为和游戏对象的生命周期之外的东西,您现在可以使用静态初始化方法,例如使用此属性的老式静态 main 方法:docs.unity3d.com/ScriptReference/…
猜你喜欢
  • 2021-11-22
  • 2016-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多