uFrame 1.6 官方文档随意翻译(二)

事件系统:

OnEvent使用例子

  1. 传送数据(同时也会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#

时间: 2024-08-03 22:53:58

uFrame 1.6 官方文档随意翻译(二)的相关文章

uFrame 1.6 官方文档随意翻译(一)

前言: 建议直接看官方英文文档,下面都是一些简单的翻译. The Kernel The Kernel是uFrame的本质,负责处理加载场景,系统和服务. Subsystems 作为一个容器,组成许多Nodes. Subsystems允许你分离项目中的逻辑部分和可复用部分. System Loaders System Loaders常用语初始化信息. Node Elements 主要负责ViewModel(Unity中uFrame框架附带了Controller)部分 For example, Pl

Erlang epmd官方文档中文翻译

本文含epmd简介及官方文档之翻译,文档地址 http://erlang.org/doc/man/epmd.html翻译时的版本 R19.1 中英文水平都不咋地,不通顺处海涵,就酱. 简介 Erlang分布式系统中节点是通过节点名字互相连接的,节点名字为[email protected]_ADDRESS格式. epmd是分布式erlang中比较重要的模块.集群中每台机器都有一个epmd进程,这些进程端口号都用同一个端口号(默认4396端口).所有节点启动的时候都会连接到本机对应的epmd进程,它

Jinja2学习笔记暨官方文档的翻译

http://blog.csdn.net/lgg201/article/details/4647471 呵呵, 刚刚看完Python模板引擎Jinja2的文档, 感觉很好, 觉得动态语言真是很好.  模板引擎竟然可以做的如此灵活....真是不错.... 下面直接把看文档过程的笔记发布出来, 呵呵, 基本上就是翻译, 加了不多的一点自己的解释......希望可以帮到大家 补充: 1. 在模板中设置自定义变量: {% set variable_name = value %} 比如设置{% set u

别开心太早,Python 官方文档的翻译差远了

近几天,很多公众号发布了 Python 官方文档的消息.然而,一个特别奇怪的现象就发生了,让人啼笑皆非. Python 文档的中文翻译工作一直是“默默无闻”,几个月前,我还吐槽过这件事<再聊聊Python中文社区的翻译>,当时我们的进度是 10.3%,远远落后于日本和法国,甚至落后于巴西! 这次所谓的中文版,当然是未完成翻译的残品.刚查了下,整体进度是 19.7%. 翻译进度不足20% 有的公众号在发布消息的时候,说明了这不是官宣.不是正式发布版,还指出了中文版的访问地址是隐藏入口.这都是忠于

Android 官方文档:(二)应用清单 —— 2.26 &amp;lt;uses-permission&amp;gt;标签

syntax: <uses-permission android:name="string"         android:maxSdkVersion="integer" /> contained in: <manifest> description: Requests a permission that the application must be granted inorder for it to operate correctly.

Android 官方文档:(二)应用清单 —— 2.2 &amp;lt;action&amp;gt;标签

syntax: <action android:name="string" /> contained in: <intent-filter> description: Adds an action to an intent filter.An <intent-filter> element must contain one or more <action> elements. If it doesn't contain any, noIn

Matlab最新的官方文档中文翻译

文章翻译的是Matlab最新的官方文档R2016b,可能后续如果我还有时间会继续翻译,希望能够帮到大家,翻译的不好请大家不要吐槽. Matlab官方文档地址:http://cn.mathworks.com/help/pdf_doc/matlab/getstart.pdf Desktop Basics  当您启动MATLAB时,桌面以其默认布局显示如下: 说明:请大家对照着英文原版看,我没有截图,因为实在太麻烦 桌面包括以下面板: ?当前文件夹 - 访问您的文件. ?命令窗口 - 在命令行中输入命

【Android官方文档】翻译Android官方文档-Activities(一)

Activity是可以给用户提供交互操作的程序组件,例如打电话,拍照,发送邮件,抑或者是显示地图.通常窗口会填满屏幕,但是也可以做到比屏幕小或者是悬浮在窗口顶部. App通常由多个Activities组成,它们之间支持相互跳转.一般情况下,每个Activity在应用中都是特别的,就好像 主Activity一样,主activity是应用第一个Activity,其他Activity可以通过其他操作启动.一个新的Activity的启动,那么旧Activity就会被停止,但是系统会保存这些activit

Cloudera Impala官方文档中文翻译-2(Using Impala to Query HBase Tables)

Using Impala to QueryHBase Tables(利用impala查询HBase Tables) 默认情况下,impalatable使用存储在HDFS中的数据文件,这种存储方式适用于批量数据加载和查询(bulk loads and query).相反,HBase可以对用于OLTP风格的负载的数据进行高效率查询,比如查找单个row或者一个range的values. 对于impala用户来说,HBase是key-value存储形式的数据库,value包含多个fields.Key在i