1.概览

uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分)。因为用于Unity3D,所以它向开发者提供了一套基于Editor的可视化编辑工具,可以用来管理代码结构等。本文为uFrame1.6版本在项目中实践的记录,主要包括一些uFrame中的基本概念以及应用的流程。

2.新建uFrame工程

本小节主要内容包括:

  • 在uFrame新建工程
  • 在uFrame的可视化编辑器中打开工程仓库
  • 在uFrame的可视化编辑器中设置工程的命名空间,用来在生成模板代码时使用

2.1.在uFrame中新建工程

在Unity编辑器的Project部分新建一个文件夹,命名为MyProject。选中刚刚创建的文件夹右键选择:
[u]Frame->New Project。
如图:

此时,打开MyProject文件夹,我们创建的uFrame的工程仓库已经创建好了。

我们可以对这个文件进行重命名,以符合自己的习惯。
到此,我们就完成了在uFrame中创建一个新的工程的任务。

2.2.在uFrame的可视化编辑器中打开工程仓库

创建完uFrame的工程之后,我们就可以在uFrame提供的可视化编辑器(graph designer)中打开该工程了。
点击Editor的工具栏,选中Window->uFrame Designer:

在uFrame的编辑器中,我们可以选择我们刚刚创建的uFrame工程。

这样,我们就在uFrame的编辑器中打开了刚刚创建的uFrame工程了。

2.3.设置工程的命名空间

由于uFrame的这套可视化编辑器的目的是为了向开发人员提供便利的开发方式,其最后还是要生成一些模板代码的。因此,我们可以设置一些信息,以生成对应的模板代码。例如,我们可以在这里设置工程的命名空间,这样生成的代码都会在我们设置的命名空间内。
选中在2.1中生成的工程仓库文件,我们在它的inspector面板中可以设置这个工程的命名空间。

至此,整个工程的基本设置就已经完成了,下面我们继续进一步进行一些具体的操作。

3.创建子系统

本小节主要内容包括:

  • 介绍uFrame中图(Graph)的概念
  • 创建一个MVVM图(MVVM Graph)
  • 创建一个子系统图(Subsystem Graph)

3.1.uFrame中的图(graph)

在创建子系统之前,我们首先要了解一个概念,即uFrame中的图(Graph)。此处说的图是uFrame中的一个概念,uFrame工程中的每一个图都会以文件的形式存在于工程的文件夹中。每一个图都可以包含很多的结点(Node),而且图和图之间也可以共享同一个工程中的节点。
我们可以通过uFrame的可视化编辑器(designer)来创建一个图,在designer的左侧我们可以打开图的选择框:

选择框中列出的是可以创建的图的类型。
需要我们注意的是,此时创建的图会自动和此时选中的工程链接,且图文件会在被选中的工程的文件夹中创建。

3.2.创建MVVM图

此时,我们需要为我们的工程创建一个MVVM图,所以在上面的图的选择框中我们选择Create MVVMGraph。
我们可以看到创建完之后,这个图只包括一个节点(Node),该节点代表图本身,我们可以称它为图节点(Graph node)。

而且,一个图文件也在我们的工程文件夹中被创建了出来。

如果需要修改图的名字,我们可以直接在designer中修改图节点的名字,右键点击节点,选择Rename即可。

3.3.创建子系统图

下面就让我们在MVVM图之下添加一些子系统,来丰富这个工程的功能吧。
我们只需要在空白处点击右键,即可弹出一个选择菜单:

选择Add Sub System即可在FoxMain环境中添加一个子系统了。
注意:此处需要提醒各位注意,不同的环境下选择菜单的内容是不同的,可添加的元素也不同,例如在此处的MVVM Kernel图中我们可以创建SubSystem,而Element节点只能在SubSystem中创建,同样,View节点只能在Element节点中创建。所以想要创建目标节点时,一定要确定现在的环境(可以通过左上角看到当前所在的环境,例如现在是FoxMain)。

4.创建节点(Node)

本小节主要内容包括:

  • 解释什么是Element节点并创建Element节点
  • 解释什么是View节点并创建View节点

4.1.Element节点

在designer中,Element节点主要定义了ViewModel和Controller,Element中的数据主要有三部分组成:

  • 属性Property,主要是单个数据
  • 集合Collection,主要是数据集合
  • 命令Command,主要定义了一些命令,由Controller执行。

由于它们是常规的C#类型,并没有继承Unity3D中的Monobehaviour,因此它们不依赖Unity3D,所以它们是可移植的。
而在Unity3D中,我们通过创建和Unity3D相关的View来绑定ViewModel,从而表现ViewModel中的数据。
下面我们就在刚刚创建的UISys子系统中创建一个Element节点,并命名为Login。

右键点击designer的空白处,可以弹出一个选择菜单,其中包括很多Add选项,例如Command、Element等等。选择Add Element,一个名为Login的Element节点便被创建出来了。

注意:观察designer的左上角,可以看到我们此时处在UISys中,即我们现在在UISys图(graph)中。之所以要在此提示各位注意这一点,是由于节点可以以子系统的图节点为目标添加,也可以以别的节点为目标添加,如果我们双击Login节点,就变成了以Login节点为目标添加。

4.2.View节点

在Unity3D开发中,View部分指的就是Unity3D为我们提供的视觉方面的操作对象,例如游戏内的物体、UI等等。
View是展示层,它通过绑定ViewModel来展示ViewModel中的数据。举一个例子各位可能会更容易理解这个意思:假设我们的游戏中有一个PlayerViewModel,针对这一个ViewModel我们在游戏中可以有多种表现方式,例如:我们可以有一个PlayerView对应游戏中的玩家模型,根据ViewModel中的数据展示各种动作、或者位移。也可以有一个PlayerInfoView对应游戏中的玩家数据UI,根据同一个ViewModel中的数据,展现例如玩家血量、经验值等等信息。
而绑定了同一个ViewModel的多个View的不同之处就在于,各个View只关注ViewModel上它们所需要的数据,各个View之间也应该尽可能的保持独立性。
那么下面我们就来创建一个View节点。
双击Login节点进入以Login为目标的环境,和创建Element节点的过程类似,右键点击空白处弹出选择菜单,这次菜单中包括Add View的选项,如下图:

(我们还可以看到左上角已经从之前的UISys变成了现在的Login)
这样,一个View节点便被创建出来了。

现在分别代表ViewModel和View的节点已经被创建出来了,接下来我们就要创建ViewModel上的数据了。

Unity3D框架插件uFrame实践记录(一)的更多相关文章

  1. Unity3D框架插件uFrame实践记录(二)

    5.创建属性和命令 本小节主要内容包括: 在Element节点上创建属性数据 在Element节点上创建命令数据 5.1.在Element节点上创建属性数据 在这里,我们首先为Login节点中的属性( ...

  2. 基于 Vue.js 之 iView UI 框架非工程化实践记要 使用 Newtonsoft.Json 操作 JSON 字符串 基于.net core实现项目自动编译、并生成nuget包 webpack + vue 在dev和production模式下的小小区别 这样入门asp.net core 之 静态文件 这样入门asp.net core,如何

    基于 Vue.js 之 iView UI 框架非工程化实践记要   像我们平日里做惯了 Java 或者 .NET 这种后端程序员,对于前端的认识还常常停留在 jQuery 时代,包括其插件在需要时就引 ...

  3. 基于MVC4+EasyUI的Web开发框架经验总结(1)-利用jQuery Tags Input 插件显示选择记录

    最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采用EasyUI的前端界面处理技术,走MVC的技术路线,在重 ...

  4. 开源调度框架Quartz最佳实践

    开源调度框架Quartz最佳实践 Quartz是一个Java调度框架,当前的最新版本为2.2.1. 以Quartz 2.2.1版为例,Quartz最佳实践(用于生产系统)总结如下: 1.跳过更新检查Q ...

  5. jQuery Tags Input 插件显示选择记录

    利用jQuery Tags Input 插件显示选择记录 最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开发框架保持一致,而在Web上,我主要采 ...

  6. ElasticSearch5.0+版本分词热更新实践记录

    前言 刚开始接触ElasticSearch的时候,版本才是2.3.4,短短的时间,现在都更新到5.0+版本了.分词和head插件好像用法也不一样了,本博客记录如何配置Elasticsearch的Hea ...

  7. (转)基于MVC4+EasyUI的Web开发框架经验总结(1)-利用jQuery Tags Input 插件显示选择记录

    http://www.cnblogs.com/wuhuacong/p/3667703.html 最近花了不少时间在重构和进一步提炼我的Web开发框架上,力求在用户体验和界面设计方面,和Winform开 ...

  8. 1、大型项目的接口自动化实践记录--robotframework环境搭建

    因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...

  9. unity3d 游戏插件 溶解特效插件 - Dissolve Shader

    unity3d 游戏插件 溶解特效插件 - Dissolve Shader   链接: https://pan.baidu.com/s/1hr7w39U 密码: 3ed2

随机推荐

  1. 【造轮子】打造一个简单的万能Excel读写工具

    大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式 ...

  2. 细说WebSocket - Node篇

    在上一篇提高到了 web 通信的各种方式,包括 轮询.长连接 以及各种 HTML5 中提到的手段.本文将详细描述 WebSocket协议 在 web通讯 中的实现. 一.WebSocket 协议 1. ...

  3. 分治法求解最近对问题(c++)

    #include"stdafx.h" #include<iostream> #include<cmath> #define TRUE 1 #define F ...

  4. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  5. ExtJS 4.2 业务开发(三)数据添加和修改

    接上面的船舶管理业务,这里介绍添加和修改操作. 目录 1. 添加操作 2. 修改操作 3. 在线演示 1. 添加操作 1.1 创建AddShipWindow.js 在业务中的view目录下创建一个Ad ...

  6. 小兔JS教程(四)-- 彻底攻略JS数组

    在开始本章之前,先给出上一节的答案,参考答案地址: http://www.xiaotublog.com/demo.html?path=homework/03/index2 1.JS数组的三大特性 在J ...

  7. [原]分享一下我和MongoDB与Redis那些事

    缘起:来自于我在近期一个项目上遇到的问题,在Segmentfault上发表了提问 知识背景: 对不是很熟悉MongoDB和Redis的同学做一下介绍. 1.MongoDB数组查询:MongoDB自带L ...

  8. AbpZero--1.如何开始

    1.加群 群号:104390185,下载这个文件并解压 用VS2015打开aspnet-zero-1.9.0.1 2.修改Web项目web.config连接字符串 <add name=" ...

  9. servlet 简介,待完善

    什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...

  10. 微信小程序开发日记——高仿知乎日报(上)

    本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...