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(1); 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); } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· 卧槽!C 语言宏定义原来可以玩出这些花样?高手必看!
· langchain0.3教程:从0到1打造一个智能聊天机器人