我最近遇到了一些问题,只是在我正在制作的游戏中传递对象/敌人的引用,我想知道我是否使用了错误的方法.
我遇到的主要问题是处置敌人和物体,当其他敌人或玩家可能仍然有链接时.
例如,如果你有一只兔子和一只狼,狼可能会选择兔子作为它的目标.我正在做的是,狼有一个GameObject Target = null;,当它决定它是饥饿时,目标成为兔子.如果兔子然后死了,比如另一只狼杀了它,它就无法正确地从游戏中移除,因为这只狼仍然有参考它.
此外,如果您使用的是解耦方法,兔子可能会被闪电击中,将其健康状况降至零以下.当它下次更新时,它意识到它已经死亡,并从游戏中移除......但是没有办法更新对它感兴趣的所有内容.
如果你给每个敌人一个唯一的ID,你可以简单地使用对它的引用,并使用一个处理它的中央查找类.如果怪物死了,查找类可以从它自己的索引中删除它,随后任何试图访问它的东西都会被告知它已经死了,然后他们可以采取相应的行动.
有什么想法吗?
你的做法听起来很合理,为什么不呢?在哈希图中注册所有对象应该不会太昂贵。然后,您可以拥有某种事件总线,其中对象可以注册不同的事件。
除此之外,我想到了另一种方法。您可以让兔子直接暴露该事件,然后让狼对其进行注册。
第二种方法因其简单性而具有吸引力,但它会在某种程度上将事件发布者与订阅者耦合起来。第一种方法在技术上更复杂,但也具有允许其他类型查找的优点。