首先,我是一个业余程序员,在过去的7年里断断续续地学习,和项目中使用Node.JS。现在我决定转向另一种主要语言,并开始学习C#,学习游戏开发等。我正在构建一个技能树,我可以“我真的不明白如何在没有一堆空的GameObjects(Unity)保存信息的情况下,以干净有序的方式存储我需要的每项技能的信息。
我知道(至少是我最喜欢的方式)如何在Node.JS中实现这一点,但是我找不到将其转换为C#的正确信息。
Node.JS范例
var skillTree = [
{
name: "Skill1",
effect: skill1Func,
unlocked: true,
prereqs: [ ]
},
{
name: "Skill2",
effect: skill2Func,
unlocked: false,
prereqs: [1, 5]
}
];
正如您所看到的,它只是一个对象数组,所有对象都遵循相同的属性,但属性是预先确定的,而不是添加的。我只是找不到正确的路径来存储这些信息,以便在C#中使用,所以如果有人能帮助我,将不胜感激!
2条答案
按热度按时间ckx4rj1h1#
This answer基本上拥有一切。
无论如何,我想添加一个Unity特定的建议/扩展:
而不是“硬编码”这在一个脚本中,并使用基于索引的
int[] PreReqs
不是更动态和可扩展的简单地创建和配置技能在统一编辑器?因此,我将使用
ScriptableObject
,它基本上允许您创建技能资产,这些技能资产位于资产中,并且不附加到特定的GameObject
。然后你可以通过
Assets
-〉右键单击-〉Create
-〉Skill
创建示例,命名并配置它。这样你就可以很容易地在preReqs
中直接将它们彼此链接起来,而不必依赖于任何索引。在最终的消费者组件中,您将最终在一个字段中引用所有这些属性
根据您对
Effect
的需求,我们还提供了另一个扩展:例如,如果Effect
不是enum
,而是一个自定义方法,则可以简单地将此Skill
设置为abstract
类型,并基于它拥有不同的子技能,例如然后例如
您可以向该方法传递所需的任何参数,并基本上在这些参数上执行任何代码,同时创建每个技能的示例并像以前一样在
skillTree
中引用它们。fgw7neuy2#
通常你会创建一个类对象来定义数据的结构。然后你可以创建一个该类类型的变量,并在构造函数中填充数据。例如: