uFrame 1.6 官方文档随意翻译
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uFrame 1.6 官方文档随意翻译相关的知识,希望对你有一定的参考价值。
事件系统:
OnEvent使用例子
- 传送数据(同时也会new event(其实是一个类)) 好像要自己去定义事件在哪执行什么时候执行。对的,要在一个地方使用publish去执行这个事件的代码。Publish时也会new simpleclass.
简单来说OnEvent的意思是在某个event(但同时event是一个simpleclass,可以用来传送数据)上执行一些代码,然后可以通过Publish去发布执行。
2. Default Events 可以订阅,但要注意执行顺序
Commands
Commands分两种,一种是节点,一种是Element的Commands。这里主要讲第一种。
Commands是一个简单的可带有数据的类,你可以通过publish一个”command”去做一些事。例如,LoadSceneCommand允许你通过这个命令指定的属性去加载场景。
在一些方面,Commands和Events是一样的。他们不同点在于他们的目的。Events是对事件的触发处理通知,Commands是触发一些行为。
Subscribing to Commands
Commands和Event Aggregator一起工作的。你可以使用OnEvent方法订阅一个command(在Service和继承了uFrameComponent的类中有效)
Publishing Commands
使用Publish方法执行一个命令。
Default Commands
LoadSceneCommand
InstantiateViewCommand
Elements Commands
Element Commands允许你去改变ViewModel的状态。例子:如果一个玩家受到了伤害,受伤命令被执行并减少玩家生命值。通常ViewModel不能直接被修改,只有通过指定的命令去修改。这就是无论如何ViewModel数据被the View with Scene Properties or Services.直接改变。(大概意思是ViewModel数据只能在View场景属性初始化时和Service时能直接被修改,在View里只能被读和绑定,在Controller里只能改变ViewModel的状态?)
实际上执行的命令不是存储在ViewModel的内部而是存储在ViewModel的Controller的内部。当一个ViewModel的命令被调用时,这个命令会立即在Controller里执行,然后这个Controller会改变ViewModel的数据触发绑定的View。
备注:直接在Controller里改变ViewModel数据,所以会有两次OnPropertyChanged被执行。是这个原因么?
Services
直接注入Service到其他类中使用会增加耦合,更好的方式是通过事件来通讯。
Accessing ViewModel
默认uFrame保存viewmodels(你创建的每一个viewmodels)在一个管理类里。
为了使用这个管理类,你可以注入他们到控制器类(早已默认生成了一个相关联的ViewModel的管理类属性在里面)和服务类里。
[Inject] IViewModelManager<PlayerViewModel> AllPlayers { get;set; }
Accessing Controllers
[inject] PlayerController PlayerController;
System Loaders
System Loaders负责注册ViewModel和Controller到DI Container给uFrame Kernel加载处理。
每一个Subsystem节点都有一个Instance字段允许你从其他system注册ViewModel到DI Container里
默认的Subsystem早已注册所有Elements的Controllers和ViewModelManager
SystemLoaders
里面就是负责注册Elements的Controllers和ViewModelManager
Controller
Controller负责在ViewModel后面执行一些逻辑。对于许多ViewModels,Controller都是只有一个实例。对于Element指定的Commands都会在这里执行。Controller也是负责创建和初始化ViewModel的工作。
实质上,Controller是一个服务类,但是又和服务类有区别(Controller拥有ViewModel)。
常见问题:
** Is it possible to call Publish() from some random MonoBehaviour?
You can inherit your MonoBehaviour from a uFrameComponent to get references to event aggregator and also get callbacks for KernelLoadedEvent and loading events.
UFrame提供了状态机 json序列化
要是有需求,也可以自己创建服务类,系统加载类,场景加载类,只要这些类继承对应的基类就可以了。
uFrame执行顺序XMIND图:https://www.mindmeister.com/571885479?t=F6p1mvLEmJ#
以上是关于uFrame 1.6 官方文档随意翻译的主要内容,如果未能解决你的问题,请参考以下文章