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); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。