假设我有一个Player
脚本连接到玩家,然后一个Enemy
脚本连接到场景中的所有敌人,比如20个敌人。如果玩家杀死一个敌人,我必须调用EnemyDied
函数。如果我做一个代理EnemyKillDelegate
,当玩家杀死任何敌人时,它将调用注册的函数EnemyDied
。但在这种情况下,每个敌人的EnemyDied
都会调用,这肯定不是我想要的。有没有办法专门调用敌人脚本中已死亡的EnemyDied
函数。我知道我可以调用敌人脚本中已死亡的GetComponent
,然后调用该函数,但 * 有没有其他方法可以做到这一点?*
public class Player : MonoBehaviour
{
//This Scrip is attach to only Player
public static event Action EnemyKillDelegate;
void EnemyDied()
{
EnemyKillDelegate?.Invoke();
}
}
public class Enemy : MonoBehaviour
{
//This Scrip is attach to every enemy in the scene
private void OnEnable()
{
Player.EnemyKillDelegate += EnemyDied;
}
private void OnDisable()
{
Player.EnemyKillDelegate -= EnemyDied;
}
void EnemyDied()
{
Debug.Log("I am Dead");
}
}
1条答案
按热度按时间pod7payv1#
合适的方法是使用不同的委托。不,它不会调用每个
Enemy
游戏对象的方法,只调用订阅了委托的对象的方法。然后你可以得到被杀死的敌人的名字如下:
这里
enemyName
可以为null(假设你连续调用Player.EnemyDied()
)。同样,如果只有一个玩家,你可以省略委托(Player p
)的参数。