c# – 在Unity3D中管理复杂的预制层次结构
我在几个地方问过这个问题,但还没有完全弄明白,所以也许这里的一些聪明人会知道如何处理这个问题.
在项目中维护预制件的深层嵌套层次结构的最佳方法是什么?比如,我们有一些GUI屏幕,由较小的通用组件组成.为简单起见,我们称之为前“视图”,后者称为“组件”.视图处理语义(例如库存视图,商店视图);组件是可配置的,但没有任何业务逻辑连接到它们(例如,一个按钮只关心它的OnTap回调/事件处理程序). 视图和组件都可以嵌套. GUI视图需要在多个场景中重用. Unity中这种方法的主要问题是,任何嵌套的层次结构一旦变成预制件,就会丢失对其子预制件的引用,就像在这个(完全组成但仍然有效)的示例中一样: – storeView 我想将所有这些小UI *组件保存在单独的预制件中,同时保留storeView预制件,以便我可以轻松地将其添加到不同的场景中.不幸的是,在我们创建storeView预制件时,很快就会丢失所有UI *预制件引用. >将行为附加到storeView并在运行时加载子预制件 >缺点:使设计人员的工作流程更加复杂,将复杂性放在脚本中,从开发角度来看也可能更容易出错 >将storeView保留为空预制件,并在需要它的每个场景中重新组装 >缺点:组件需要手动连接,仍然很容易意外地保存整个storeView并丢失预制参考 >将整个storeView保存为预制件 >缺点:严重缩放,使新功能或小型UX更改迭代更耗时(额外的QA,验收测试等……) >使用Prefab Evolution或类似产品 >缺点:我认为包装将被Nested Prefabs淘汰,这些都在路线图上?需要依赖第三方代码,可能不够灵活(这里的任何意见,伙计们?) >写一堆自定义编辑器脚本: >缺点:耗时,也 – 似乎应该由平台提供的东西,即使它主要涉及游戏 这是我个人的,理想主义的,不切实际的解决方案*: 使用组件化体系结构,默认情况下,子预引用引用存储在复杂的预制件中.在内部将它们视为UIView和移动(Cocoa)上的子视图,或React中的组件类或更好的功能组件 – React / Cycle / Elm /与FRP相关的任何东西(是的,我知道这些方法在很多方面都有所不同,但关键是可组合性,通过功能组合,装饰器等等来实现. >缺点:我认为我的困难来自于我缺乏Unity的经验,并且有一个更明显的,也许是惯用的解决方案(我很恳请:)) 为了说清楚,这不是一个关于Unity的咆哮,作为一个以前使用移动(本机)和网络工作的开发人员,我发现它解决了我解决了多少问题,以及这些解决方案有多荒谬简单. 解决方法
我可能会在单独的场景中维护复合视图.简单地将这些场景视为预制件,仅包含给定类的单个原型对象.
使用 public class UIStoreView { public static UIStoreView Instance() { SceneManager.LoadScene("UIStoreView",LoadSceneMode.Additive); return GameObject.Find("UIStoreView"); } } 通过一些命名对话,您可以实现像storeView = UIStoreView.Instance();这样简单的事情. 不是通用/可扩展的东西,但至少你有一些轻量级/可维护的东西,直到他们推出嵌套的预制件(如他们所说的timeline uncertain). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |