1

我目前正在做一个练习,我想为此创建一个技术设计文档。

因此,我需要评估我虚构项目中出现的一系列问题的可能解决方案。

下面快速浏览一下这个练习:

游戏的美术和核心游戏设计被非常严格地分开——基本上,核心系统、游戏机制和设计被创造得非常抽象,以便让它们能够与各种各样的美术设置一起工作。此外,限制之一是尽可能多地重复使用资产、关卡和设计。

现在我的问题:

我希望关卡设计师使用“模板”对象(具有所需的所有技术特征的对象,即附件插槽、正确比例、纹理等)创建关卡,然后用我从外包商那里收到的一组资产替换这些对象.

因为我不想在获得一组新资产时手动替换所有对象,所以这就是我想要做的:

每个模板对象都有一个描述性标签,并且外包商交付的每个资产也需要具有与其存储在其中的相应模板对应物完全相同的标签名称(例如,作为自定义属性、通道或只是在其名称中) )。

我现在想使用脚本将所有模板替换为相关资产。

这将对每组资产进行。我还会保留我的引擎的多个部署,每组一个,但最初,它们都会从需要替换的模板开始(因为每个设置都需要进行一些修改,无论是视觉上还是游戏中从设计的角度来看,将所有资产保存在一个主干/项目中对我来说没有任何意义)。

为了使这更容易,我将使用某种“数据库”(可能是引擎脚本可以查询的简单字典,并且在交付新资产时会由另一个脚本预先填写?)。

我的问题是:这可能吗?如果是,从程序员的角度来看,这有多困难?我在这个领域的知识有限,所以我很想听听各位小伙子和女士们对此的看法。

另外(非常重要)-您知道实现资产“可替换性”的更好方法吗?或者只是有一种更简单的方法来实现我想做的事情?我很感激任何反馈!谢谢!

快速编辑:这不仅适用于 3d 对象;显然,纹理也需要更换

4

1 回答 1

3

我认为您正在寻找Prefabs

基本上预制件实现了一种原型模式。除了直接放入场景的层次结构 a 之外GameObject,您还可以将其设置为 aprefab并将其放入场景 aGameObject中,这是 that 的一个实例prefab

当 a GameObjectinto 场景链接到 a prefab,并且prefab将被修改时,链接的对象也将被修改。如果您有多个相同的实例,则prefab所有实例也将更新。

此功能的唯一强大限制是,从现在开始,不支持嵌套预制件。

我希望关卡设计师使用“模板”对象(具有所需的所有技术特征的对象,即附件插槽、正确比例、纹理等)创建关卡,然后用我从外包商那里收到的一组资产替换这些对象.

这是典型的用例。你在场景中有一个占位符(例如一个立方体),当艺术家提供它时,它将被模型替换。如果您将 100 个立方体实例化到场景中,当您需要替换它们时,您可以手动对所有对象进行替换。

相反,如果您创建了一个prefab(让我们称之为 ModelPrefab)并且场景中的立方体是该预制件的实例,当您拥有新的 3d 模型时,您可以简单地更新prefab所有链接的实例也将被更新。

我的问题是:这可能吗?如果是,从程序员的角度来看,这有多困难?

如果您可以在没有嵌套预制件的情况下工作,那么您什么都不用做,它已经实现了。如果你需要实现nested prefabs,它可能不是那么简单。

快速编辑:这不仅适用于 3d 对象;显然,纹理也需要更换

我使用模型制作了上面的示例,但是您可以从每个GameObject实际是组件集合的预制件中制作一个预制件(如果您有兴趣,请查看基于组件的对象管理)。


编辑

是的,可以通过脚本更新预制件,所需的功能位于 UnityEditor 命名空间中,因此它们可以通过编辑器扩展来使用。你可以在PrefabUtility类中找到所有你需要的东西。

于 2013-04-20T11:43:25.937 回答