欢迎来到我的第一个技术博客! 我个人和专业人士使用Unity已有5年以上,一路遇到很多障碍。 我可以为其中一些在线搜索找到解决方案,但并非总是如此。 我们都遇到了很少有人谈论的问题,并且没有在线可用的解决方案。 因此,在我的博客中,我想分享我对这些问题的解决方案,以及我从总体上学到的关于Unity的经验和教训。
Unity检查器的局限性之一是它不支持字段的动态类型。 例如,在您的游戏中,您有一个名为Mage的类,并且它具有一个Ability公共变量,它是以下各种实际能力的基类。

运作方式如下。 首先,我们将创建名为AbilityFactory类的东西,而不是将Ability用作PrimarySpell,现在Mage类将如下所示。
这个想法是要提供一个工厂类,该类允许您为咒语选择一种动态类型,并且还可以根据选择的动态类型正确显示字段。 工厂将在Awake中创建适当的运行时功能。 这是工厂的样子:
它的作用是为每种动态能力类型提供一个枚举表示形式,并为每种动态类型提供一个实例,并在给定一种能力类型时返回相应的实例。 创建新能力类型时,我们要做的就是在工厂中添加3行:switch语句中的新枚举,新实例和新案例。 因此,一旦我们设置了这种模式,创建新技能类别的开销将非常低。
最后但并非最不重要的一点是,我们需要一个自定义编辑器类来使魔术发生,使我们的法师拥有动态咒语!
这里的OnEnable和OnInspectorGUI是相当标准的。 魔术发生在DrawPrimarySpell中,它使用反射在工厂中找到相应的Ability实例,然后相应地显示其序列化属性!
你有它! 动态属性字段! 最初需要花费一些时间进行设置,但是这使得游戏的设计和调整更加方便!
如有任何疑问,请随时在下面发表评论或发送电子邮件给我!