2013-04-20 268 views
1

我目前正在进行一项练习,为此我想创建一份技术设计文档。使用Unity的标签标签批量替换对象?

因此,我需要评估可能的解决方案与我的虚构的项目来了一堆问题。

这里是在练习快速浏览:

游戏的艺术&核心游戏的设计都分手了非常严厉 - 基本上,核心系统,游戏机制和设计的创建是非常抽象的,为了让他们与各种各样的艺术设置一起工作。另外,其中一个限制就是重复使用尽可能多的资产,设计尽可能多的水平。

现在我的问题:

我想关卡设计师使用的“模板”对象(物体都被要求的技术特征,即插槽附件,正确的比例,纹理等)来创建水平和稍后用我从外包商处收到的一组资产替换这些对象。

因为我不想手动替换所有对象,每当我得到了一组新的资产,这就是我想做的事:

每个模板对象获得一个描述性标签,并通过外包商需要提供每个资产具有与其中存储的相应模板对象(例如作为自定义属性,通道或仅以其名称)完全相同的标签名称。

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

这将针对每组资产完成。我也会对我的引擎进行几次部署,每一个部署一次,但是最初,他们都会开始使用需要替换的模板(因为需要对每个设置进行一些修改,包括视觉和游戏设计视角,将所有资产保留在一个主干/项目中对我来说没有任何意义)。

为了更方便我会使用的某些种类的“数据库”(可能是一个简单的字典,发动机脚本可以查询,但可以通过在交付新资产的另一个脚本事先填写?)。

我的问题是:这可能吗?如果是的话,这对程序员来说有多难?我在这个领域只有有限的知识,所以我很乐意听到你们小伙子们想到的这件事。

而且(非常重要) - 你知道一个更好的方式来实现这一目标资产的“replacability”?或者简单地有一个更简单的方法来实现我想要做的事情?我很欣赏任何反馈!谢谢!

快速编辑:这不仅适用于3D对象;质地也需要更换,显然

回答

3

我认为你正在寻找Prefabs

基本上预制件实现了一种的prototype pattern。 而是投入场景的层次结构直接在GameObject的,你可以把它prefab并投入现场GameObject那就是prefab的一个实例。

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

此功能的唯一强有力的限制是,从现在起,不支持嵌套的预制件。

我想关卡设计师使用的“模板”对象 (对象,都被要求的技术特征,即 插槽附件,正确的比例,纹理等),后来更换 这些对象来创建水平以及我从外包商那里收到的资产。

这是tipical使用情况。你有一个占位符到场景中(例如一个立方体),当艺术家提供时,这个占位符将被模型所控制。 如果您将100个立方体实例化到场景中,当您需要替换它们时,您将手动为所有对象执行此操作。

相反,如果你已经创建了一个prefab(可以称之为ModelPrefab)和立方体到场景是那个情况预制,当你将有新的3D模型,你可以简单地更新prefab和所有链接的情况下将也更新了。

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

如果您可以在没有嵌套预制件的情况下工作,则您必须不做任何操作,它已经实施。如果您需要实施nested prefabs,它可能不那么直接。

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

我做了上述使用模式的例子,但你可以从每个GameObject,实际上是组件的集合进行预制(在Component Based Object Management看看,如果你是感兴趣)。


编辑

是的,这是可能的组合屋更新脚本throught所需要的功能都在UnityEditor命名空间,所以他们通过肥大的编辑器扩展使用。 你可以在PrefabUtility类中找到所需的全部。

+0

Mmyeeeea这是非常接近我想要什么,我需要知道这是否是可能的(当然,它可能是 - 更好的说:如果不是过于复杂),以通过脚本访问一个预制的部件,并将其更改为不同的对象? 基本上,如果我有对象A作为预制件,我可以访问该预制件并将预制对象的路径更改为对象B? 用手做替换可能会奏效,但我尽量避免人为错误。 – 2013-04-20 15:56:47

+0

此外,嵌套的预制件可能也需要 - 环境模型将是模块化的,并将使用窗户,门和其他装饰的“附件”系统。 我假设“不太直截了当”意味着可能会在引擎端需要一些更大的调整/修改? 另外,感谢您的链接,我会看看它! :) – 2013-04-20 16:02:07

+1

@Nils Diefenbach:是的,这是可能的。我编辑了答案。 – Heisenbug 2013-04-20 16:11:04