首页 > 解决方案 > 在 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 条件并循环遍历每种敌人类型,但是添加更多敌人后会变得乏味。

这样做的最佳方法是什么?

谢谢

标签: c#unity3d

解决方案


为什么不让敌人来决定会发生什么?

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()方法应该是publicand virtual


推荐阅读