c# - 在 Unity 中获取任何对撞机对象的方法的最有效方法是什么?
问题描述
我有一个子弹游戏对象,可以通过OnTriggerEnter2D()
. 在我添加不同的敌人类型之前,这一直很好用:
private void OnTriggerEnter2D(Collider2D collision)
{
Enemy enemy = collision.GetComponent<Enemy>();
if (enemy != null)
{
enemy.Destroy();
GameObject effect_ = Instantiate(bulletEffect, transform.position, transform.rotation);
Destroy(effect_, 0.5f);
Destroy(gameObject);
}
}
因此,如果子弹与它发生碰撞,Enemy()
那么它应该调用它的Destroy()
方法。
问题是现在我在我的游戏中添加了多个敌人,例如有一个Runner()
具有自己的死亡方法的类名的敌人。
我可以添加一个 if 条件并循环遍历每种敌人类型,但是添加更多敌人后会变得乏味。
这样做的最佳方法是什么?
谢谢
解决方案
为什么不让敌人来决定会发生什么?
private void OnTriggerEnter2D(Collider2D collision)
{
Enemy enemy = collision.GetComponent<Enemy>();
if (enemy != null)
{
enemy.DoDeathEffects(); //you will need to create this function.
Destroy(gameObject);
}
}
你的子弹永远不应该决定敌人做什么,那是敌人的权限。由于您希望您的各种敌人具有不同的行为,这意味着您将需要对类进行子Enemy
类化,并且DoDeathEffects()
方法应该是public
and virtual
。