【发布时间】:2017-07-17 02:49:03
【问题描述】:
我制作了一个当前在我的盒子碰撞器中的游戏对象列表,它可以工作。但是,当我将游戏对象设置为非活动时,
gameObject.SetActive(false); // 消灭敌人
游戏对象保留在列表中而不会被删除。如何从另一个类的 OnTriggerEnter 函数的 List 中删除 gameObject?
PlayerLifeClass:
private List<GameObject> ObjectsInRange = new List<GameObject>();
public void OnTriggerEnter(Collider collider)
{
if (collider.tag != "Player" && collider.tag == "Zombie")
{
ObjectsInRange.Add(collider.gameObject);
damage = ObjectsInRange.Count; //amount of zombies inside collider
//***Over here***
zombie.DamagePlayer(damage);
Debug.Log(damage);
}
}
public void OnTriggerExit(Collider collider)
{
if (collider.tag != "Player" && collider.tag == "Zombie")
{
//Probably you'll have to calculate wich object it is
ObjectsInRange.Remove(collider.gameObject);
Debug.Log(ObjectsInRange);
}
}
--
ZombieClass:
public class Zombie : MonoBehaviour
{
public int currentHealth;
private Player player;
private PlayerLifeCollider playerCollider;
public void Damage(int damageAmount)
{
//subtract damage amount when Damage function is called
currentHealth -= damageAmount;
//Check if health has fallen below zero
if (currentHealth <= 0)
{
//if health has fallen below zero, deactivate it
gameObject.SetActive(false); //***Over here***
}
public void DamagePlayer(int damage)
{
player.Life(damage);
}
}
【问题讨论】:
-
为什么不直接做
Destroy(gameObject); -
会 Destroy(gameObject) 从列表中删除它吗?我本来打算这样做,但后来有人告诉我 SetActive(false) 性能更好。
-
我觉得它只会使游戏对象为空,而不是从列表中删除它。
-
我猜我听不懂你的问题,所以你想从 Zombie 类的 Damage() 函数内部的 ObjectsInRange 列表中删除游戏对象?
-
是的。我认为替代方案的问题在于,如果您在停用后调用 List.Remove,它将无法正常工作。
标签: c# unity3d triggers gameobject