我目前正在为Unity中的RPG游戏开发一个Ability系统。
我已经决定使用由Ability
类实例组成的Ability系统,每个实例包含一个Effect
s数组。
在某项异能上,使用Use()
上的Ability
方法进行调用,该方法循环遍历Effect[]
数组并在每个方法上调用Apply()
方法。
我看到它的方式是我必须确保每个效果都可以获取它需要的信息并将其存储在自己的类中的变量中,因为我无法通过Apply()
将特定参数传递给效果> Use()
来电。{/ p>
假设我可以找到一种方法,那么在所有能力或单独的实例之间只共享一个Effect
个实例会更有效。
我可以看到两者的缺点:
1)我期望的是,对于共享实例,Use()
调用必须排队(我是否正确地认为?),这可能会在进行多次调用时减慢游戏速度。
2)对于个别实例,我不会遇到这个问题,但我会不断在内存中加载更多实例。
哪个最好?在一般编程实践和表现方面?
答案 0 :(得分:1)
我实际上处于类似的情况,并认为我会分享我的一些想法。
我不认为使用Use()函数会让任何事情变慢,因为必须在任一实现中运行相同的基本代码,我不认为这是一个队列是必要的,因为你可以使函数静态,不要求类的任何实例调用类方法。
我认为答案主要取决于您需要将哪些信息传递给Use()函数。如果每个角色都需要存储特定于每种能力的参数,那么让单个实例不能真正节省内存,它只会改变内存的组织方式,因此我会选择个别实例以方便使用。如果所有参数都是特定于字符而不是特定于能力的,那么我认为其他实现对于内存来说会更好,因为您只需要存储一些东西来指向正确的Use()函数。
我希望这有帮助!我真的不知道这是你正在寻找的那种答案,但我认为它比没有答案更好。我很想知道你选择使用什么!