unity3d mvvm c#
using UnityEngine;
using System.Collections; public interface IState {
void BeforEnter();
void BeforLeave();
} public interface ISceneState: IState { } public class GenFSM {
IState _state;
public GenFSM(IState state){
this._state = state;
this._state.BeforEnter();
} public void ChangeState(IState state){
this._state.BeforLeave();
this._state = state;
this._state.BeforEnter();
}
} namespace Scene {
public class Login: ISceneState {
// ui vm
public void BeforEnter(){
// uivm.Oncommand( show ui)
} public void BeforLeave(){ } public void OnLogin(){
//SceneViewModel.changeState(SceneViewModel.Game);
}
} public class Game: ISceneState {
// package vm HeroViewModel heroViewModel; public void BeforEnter(){
Application.LoadLevel();
this.heroViewModel = new HeroViewModel();
} public void BeforLeave(){ }
}
} public interface HeroCmd {
void UseSkill();
void AddBlood();
void Say();
} public class HeroViewModel: HeroCmd {
public HeroViewModel(){
var prefab = GameObject.Find ("hero") as GameObject;
prefab.AddComponent("HeroBehaviour");
HeroBehaviour inst = prefab.GetComponent<HeroBehaviour>();
inst.vm = this;
} public void OnCommand(string cmd){
Debug.Log("on command: " + cmd);
} public void UseSkill(){}
public void AddBlood(){}
public void Say(){}
} public class HeroBehaviour: MonoBehaviour { public HeroCmd vm; void Update(){
if(Input.anyKeyDown){
// animation
vm.UseSkill();
}
}
} public class UILoginViewModel {
Scene.Login _l;
public UILoginViewModel(Scene.Login L){
this._l = L;
var prefab = GameObject.Find ("login_ui") as GameObject;
prefab.AddComponent("UIClickBehaviour");
} void Login(){
this._l.OnLogin();
}
} public class SceneViewModel {
private Scene.Login _stateLogin;
private Scene.Login _stateGame; GenFSM scenefsm; public SceneViewModel(){
this._stateLogin = new Scene.Login();
this.scenefsm = new GenFSM(this._stateLogin);
} //command
public void ChangeState(ISceneState state){
scenefsm.ChangeState(state);
}
}
unity3d mvvm c#的更多相关文章
- 浅谈 MVVM 设计模式在 Unity3D 中的设计与实施
初识 MVVM 谈起 MVVM 设计模式,可能第一映像你会想到 WPF/Sliverlight,他们提供了的数据绑定(Data Binding),命令(Command)等功能,这让 MVVM 模式得到 ...
- Unity3D框架插件uFrame实践记录(一)
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- Unity3d UGUI 通用Confirm确认对话框实现(Inventory Pro学习总结)
背景 曾几何时,在Winform中,使用MessageBox对话框是如此happy,后来还有人封装了可以选择各种图标和带隐藏详情的MessageBox,现在Unity3d UGui就没有了这样的好事情 ...
- Vue.js 和 MVVM 小细节
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...
- Unity3d学习 预设体(prefab)的一些理解
之前一直在想如果要在Unity3d上创建很多个具有相同结构的对象,是如何做的,后来查了相关资料发现预设体可以解决这个问题! 预设体的概念: 组件的集合体 , 预制物体可以实例化成游戏对象. 创建预设体 ...
- Unity3d入门 - 关于unity工具的熟悉
上周由于工作内容较多,花在unity上学习的时间不多,但总归还是学习了一些东西,内容如下: .1 根据相关的教程在mac上安装了unity. .2 学习了unity的主要的工具分布和对应工具的相关的功 ...
- 领域驱动和MVVM应用于UWP开发的一些思考
领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...
- MVVM框架从WPF移植到UWP遇到的问题和解决方法
MVVM框架从WPF移植到UWP遇到的问题和解决方法 0x00 起因 这几天开始学习UWP了,之前有WPF经验,所以总体感觉还可以,看了一些基础概念和主题,写了几个测试程序,突然想起来了前一段时间在W ...
- MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息
MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...
随机推荐
- Cardboard虚拟现实开发初步(一)
Google Cardboard 虚拟现实眼镜开发初步(一) 虚拟现实技术简单介绍 不得不说这几年虚拟现实技术逐渐火热,伴随着虚拟现实设备的价格迅速平民化,越来越多的虚拟现实设备来到了我们眼前,也因此 ...
- 我的IT之路
在写这篇文章的时候内心是无比激动,因为这辈子是注定和IT打交道了. 都说大学时光是美好的,但却只有到了大四才知道时间是短暂的,也许和许多人一样,我的大学主要时光是在游戏中度过,1000多把的寒冰算是同 ...
- Python流程控制 if / for/ while
在Python中没有switch语句 If语句 if condition: do sth elif condition: Do sth else: Do sth while语句有一个可选的else从句 ...
- 【Unity 3D】学习笔记三十三:游戏元素——天空盒子
天空盒子 一般的3D游戏都会有着北京百年一遇的蓝天.让人惊叹不已.事实上天空这个效果没有什么神奇的仅仅需用到天空盒子这个组件即可.能够将天空设想成一个巨大的盒子,这个盒子将整个游戏视图和全部的游戏元素 ...
- hdu1081 最大子矩阵
最大子矩阵自然直在最大连续子序列的升级版 只是其原理都是用到了动态规划思想 仅仅是矩阵用到了枚举 +合并 把非常多列看成是一列的和 #include<stdio.h> ...
- JQ动态获取数据
转:JQUERY获取浏览器窗口的高度和宽度 June 27, 2012 <script type="text/javascript"> $(document).read ...
- MongoDB 基本操作具体解释
MongoDB 最大的特点是他支持的查询语言很强大,其语法有点类似于面向对象的查询语 言.差点儿能够实现类似关系数据库单表查询的绝大部分功能,并且还支持对数据建立索引. 最后因为 MongoDB 能够 ...
- 【BZOJ3963】[WF2011]MachineWorks cdq分治+斜率优化
[BZOJ3963][WF2011]MachineWorks Description 你是任意性复杂机器公司(Arbitrarily Complex Machines, ACM)的经理,公司使用更加先 ...
- vue 后台交互数据-编辑页面
思路~点击编辑按钮,需要获取当前列的id,然后根据id请求后台当前id的数据 1.~~ 2.接收id,并请求页面 获取数据
- 一起来学linux:例行性任务之at和crontab
对于我们日常生活来说,有很多例行需要进行的工作,比如每天早上起床一杯水,例如家人的生日,每天的起床时间等.这性例行的工作有可能被遗忘,但是如果我们用计算机来进行提醒的话,则方便很多.这里就要介绍到Li ...