我目前正在进行一项练习,我想为此创建一份技术设计文档。
因此,我需要为虚构项目中的一系列问题评估可能的解决方案。
以下是对练习的快速浏览:
游戏的艺术&核心游戏设计非常严厉 - 基本上,核心系统,游戏机制和设计都是非常抽象的,以便让他们能够使用各种各样的艺术设置。此外,其中一个限制是重新使用尽可能多的资产,级别和设计尽可能。
现在问我的问题:
我希望关卡设计师使用“模板”对象(具有所需的所有技术功能的对象,即附件的插槽,正确的比例,纹理等)创建关卡,然后用我收到的一组资源替换这些对象来自我的外包商。
由于我不想在获得一组新资产时手动替换所有对象,这就是我想要做的事情:
每个模板对象都有一个描述性标签,外包商提供的每个资产都需要与其中存储的相应模板对应物具有完全相同的标签名称(例如,作为自定义属性,通道或简单在它的名字)。
我现在想用脚本替换所有模板和相关资产。
这将针对每组资产进行。我还会保留我的引擎的几个部署,每套一个,但最初,他们都开始使用需要更换的模板(因为需要对每个设置进行一些修改,无论是视觉还是游戏设计观点,将所有资产保留在一个主干/项目中对我没有任何意义。)
为了使这更容易,我会使用某种类型的“数据库”(可能是一个简单的字典,引擎脚本可以查询,并且在交付新资产时会由另一个脚本预先填写?)。
我的问题是:这可能吗?如果是的话,从程序员的角度来看,这有多难?我在这个领域只有有限的知识,所以我很想听听你的小伙伴。女士们想一想。
另外(非常重要) - 你知道一种更好的方法来实现资产的这种“可替换性”吗?或者只是有一种更简单的方法来实现我想做的事情?我感谢任何反馈!谢谢!
快速编辑:这不仅适用于3d Objects;纹理也需要更换,显然
答案 0 :(得分:3)
我认为您正在寻找Prefabs。
基本上预制件实现了一种prototype pattern。
您可以将GameObject
直接放入场景的层次结构中,而是将其设为prefab
,并将GameObject
的{{1}}放入场景中。
当场景中的prefab
链接到GameObject
,并且prefab
将被修改时,链接对象也将被修改。
如果您有多个相同prefab
的实例,则所有的数据也会更新。
此功能的唯一强大限制是,从现在开始,不支持嵌套预制件。
我希望关卡设计师使用“模板”对象创建关卡 (具有所需技术特征的对象,即 附件的插槽,正确的比例,纹理等),然后更换 这些对象包含我从外包商处收到的一组资产。
这是典型的用例。你有一个占位符进入场景(例如一个立方体),当艺术家提供它时,它将被一个模型所支配。 如果您将100个立方体实例化到场景中,当您需要替换它们时,您可以手动为所有对象执行此操作。
如果您已经创建了prefab
(我们称之为ModelPrefab)并且场景中的立方体是该预制件的实例,那么当您拥有新的3D模型时,您只需更新{{1}并且所有链接的实例也将更新。
我的问题是:这可能吗?如果是的话,这将是多么困难 从程序员的角度来看?
如果你可以在没有嵌套预制件的情况下工作,你必须什么都不做,它已经实现了。如果您需要实施prefab
,可能不会那么简单。
快速编辑:这不仅适用于3d Objects;纹理 也需要更换,显然
我使用模型制作了上面的示例,但您可以从实际上是组件集合的每个prefab
制作一个预制件(如果您感兴趣,请查看Component Based Object Management)。
修改
是的,可以通过脚本更新预制件所需的功能在UnityEditor命名空间中,因此可以通过编辑器扩展来使用它们。 您可以在PrefabUtility课程中找到所需的一切。