MVVM框架在unity开发中的使用
1、什么是MVVM
2、MVVM在unity开发中的应用
3、uMVVM的设计与实现
public class SetupView:UnityGuiView<SetupViewModel>{public InputField nameInputField;public Text nameMessageText;public InputField jobInputField;public Text jobMessageText;public InputField atkInputField;public Text atkMessageText;public Slider successRateSlider;public Text successRateMessageText;public Toggle joinToggle;public Button joinInButton;public Button waitButton;public SetupViewModel ViewModel { get { return (SetupViewModel)BindingContext; } }}
public class BindableProperty<T>{public delegate void ValueChangedHandler(T oldValue, T newValue);public ValueChangedHandler OnValueChanged;private T _value;public T Value{get{return _value;}set{if (!Equals(_value, value)){T old = _value;_value = value;ValueChanged(old, _value);}}}private void ValueChanged(T oldValue, T newValue){if (OnValueChanged != null){OnValueChanged(oldValue, newValue);}}public override string ToString(){return (Value != null ? Value.ToString() : "null");}}
public class SetupViewModel:ViewModelBase{public readonly BindableProperty<string> Name = new BindableProperty<string>();public readonly BindableProperty<string> Job=new BindableProperty<string>(); public readonly BindableProperty<int> ATK = new BindableProperty<int>();public readonly BindableProperty<float> SuccessRate=new BindableProperty<float>(); public readonly BindableProperty<State> State=new BindableProperty<State>(); }
public abstract class UnityGuiView<T>:MonoBehaviour,IView<T> where T:ViewModelBase{private bool _isInitialized;public bool destroyOnHide;protected readonly PropertyBinder<T> Binder=new PropertyBinder<T>();public readonly BindableProperty<T> ViewModelProperty = new BindableProperty<T>();public T BindingContext{get { return ViewModelProperty.Value; }set{if (!_isInitialized){OnInitialize();_isInitialized = true;}//触发OnValueChanged事件ViewModelProperty.Value = value;}}/// <summary>/// 初始化View,当BindingContext改变时执行/// </summary>protected virtual void OnInitialize(){//无所ViewModel的Value怎样变化,只对OnValueChanged事件监听(绑定)一次ViewModelProperty.OnValueChanged += OnBindingContextChanged;}/// <summary>/// 当gameObject将被销毁时,这个方法被调用/// </summary>public virtual void OnDestroy(){if (BindingContext.IsRevealed){Hide(true);}BindingContext.OnDestory();BindingContext = null;ViewModelProperty.OnValueChanged = null;}/// <summary>/// 绑定的上下文发生改变时的响应方法/// 利用反射+=/-=OnValuePropertyChanged/// </summary>public virtual void OnBindingContextChanged(T oldValue, T newValue){Binder.Unbind(oldValue);Binder.Bind(newValue);}}
public class Install:MonoBehaviour{// Use this for initializationpublic SetupView setupView;public TestView testView;void Start(){//绑定上下文setupView.BindingContext=new SetupViewModel();testView.BindingContext=new TestViewModel();}}
public class SetupView:UnityGuiView<SetupViewModel>{//......省略ui元素的定义protected override void OnInitialize(){base.OnInitialize();Binder.Add<string>("Name", OnNamePropertyValueChanged);Binder.Add<string>("Job",OnJobPropertyValueChanged);Binder.Add<int>("ATK",OnATKPropertyValueChanged);Binder.Add<float>("SuccessRate",OnSuccessRatePropertyValueChanged);Binder.Add<State>("State",OnStatePropertyValueChanged);}private void OnSuccessRatePropertyValueChanged(float oldValue, float newValue){successRateMessageText.text = newValue.ToString("F2");}private void OnATKPropertyValueChanged(int oldValue, int newValue){atkMessageText.text = newValue.ToString();}private void OnJobPropertyValueChanged(string oldValue, string newValue){jobMessageText.text = newValue.ToString();}private void OnNamePropertyValueChanged(string oldValue, string newValue){nameMessageText.text = newValue.ToString();}private void OnStatePropertyValueChanged(State oldValue, State newValue){//dosomething }
最后看一下其中一个model的定义:
public class Combatant{public int Id { get; set; }public string Name { get; set; }public string Job { get; set; }public float SuccessRate { get; set; }public State State { get; set; }}public enum State{JoinIn,Wait}
4、总结
转载于:https://www.cnblogs.com/IAMTOM/p/10303392.html
MVVM框架在unity开发中的使用相关推荐
- java web框架struts_Struts框架在Web开发中的应用
<Struts框架在Web开发中的应用>由会员分享,可在线阅读,更多相关<Struts框架在Web开发中的应用(29页珍藏版)>请在人人文库网上搜索. 1.Struts,框架在 ...
- Unity 开发中常见问题 Unity bug reporter
Unity开发过程中常常因为操作导致Unity奔溃,再次打开是会出现Unity bug reporter之后无论这么样你都再也打不开你的工程了.无论你重装多少次还是打不开你原来的那个工程. 这个时候其 ...
- 结合Unity开发中一些编程基础概念与原理性知识总结
目录: //里氏替换 //抽象类和接口 //虚函数(方法)和抽象方法.普通方法.重载.重写 //指针.引用.值类型.引用类型 //程序.进程.线程.死锁.协程 //内存的几个分区及其作用 //con ...
- 若依框架二次开发中的坑
1.是目录不是菜单 2.:key的级联按钮的强制刷新 3.动手做
- 领域驱动和MVVM应用于UWP开发的一些思考
领域驱动和MVVM应用于UWP开发的一些思考 0x00 起因 有段时间没写博客了,其实最近本来是根据梳理的MSDN上的资料(UWP开发目录整理)有条不紊的进行UWP学习的.学习中有了心得体会或遇到了问 ...
- java spring server_Java server框架之(1):spring中的IoC
为什么需要IoC? 一般的对象耦合是在编译时确定的,也就是说当我们写如下类: 1 public classStaticCoupling { 2 3 String s = new String(&quo ...
- C#重要知识点在游戏开发中的应用
今天是大年初二,在此祝各位程序员朋友身体健康,猪年大吉.闲来无事,把在Unity开发中所使用的C#知识点总结了一下,因为自己在带团队新人的时候,好多知识点它们并不是很清楚,编写代码还是局限于" ...
- mvvm模式和mvc的区别_Android 开发中的架构模式 -- MVC / MVP / MVVM
预备知识 了解 Android 基本开发 看完本文可以达到什么程度 了解如何分析一个架构模式 掌握 MVC,MVP,MVVM 架构定义和实现 更多面试内容,面试专题,flutter视频 全套,音视频从 ...
- 3 ie兼容 vue_前端开发:MVVM框架之Vue势必会取代JQuery吗?
最近接受一个新项目,前端是选用jquery还是用vue这个问题,团队里面就产生了分歧,我作为项目负责人,最终决定新项目采用Vue,原因如下: 1.本次项目界面和后台数据交互比较多,采用mvvm框架开发 ...
最新文章
- python修改第三方库重写_Python安装第三方库,切换镜像源
- 写了多年代码,你会 StackOverflow 吗
- tomcat(11)org.apache.catalina.core.StandardWrapper源码剖析
- java 防止sql xxs注入,Java-JSP网站 防SQL注入,防XSS等攻击有什么好的处理办法?...
- 8 PP配置-生产主数据-工作中心相关-定义工作中心负责人
- 反向输出一个四位数c语言程序,将一个四位数反向输出
- @程序员,你该如何做职业规划才能不被“废”?
- mysql可视化创建外键说明_关于使用可视化图形工具navicat for mysql来创建外键的步骤...
- 用python读取图像_如何用python获取图像
- 【Flutter】微信项目实战【03】我的界面搭建(下)
- 睿智的seq2seq模型4——往英文到法文的翻译里加上注意力机制
- 计算机装配方案之游戏发烧型,5000元Intel八代i5-8500配RX580电脑配置 畅玩各类中大型游戏...
- 惊帆健康监测模块,心率检测模块
- 大数据挖掘与分析——用八爪鱼爬虫采集百度搜索内容
- mysql中两根竖线什么意思_五线谱中两根竖线是什么意思?
- 3款大数据bi工具,让企业数据分析更简单
- 湖北浓郁炖黄油鸡汤(三黄鸡)详细做法
- 回味一下——仿2008QQ面板导航
- 递归函数与内置函数和函数式编程
- 树莓派oled IP显示