usingUnityengine;usingSystem.Collections; Public InterfaceIstate {voidBeforenter (); voidbeforleave ();} Public Interfaceiscenestate:istate {} Public classGENFSM {istate _state; PublicGENFSM (istate state) { This. _state =State ; This. _state. Beforenter (); } Public voidchangestate (istate state) { This. _state. Beforleave (); This. _state =State ; This. _state. Beforenter (); }}namespaceScene { Public classLogin:iscenestate {//UI VMs Public voidBeforenter () {//UIVM. OnCommand (show UI) } Public voidBeforleave () {} Public voidOnlogin () {//sceneviewmodel.changestate (sceneviewmodel.game); } } Public classGame:iscenestate {//Package VMSHeroviewmodel Heroviewmodel; Public voidBeforenter () {Application.loadlevel (1); This. Heroviewmodel =NewHeroviewmodel (); } Public voidBeforleave () {} }} Public InterfaceHerocmd {voidUseskill (); voidAddblood (); voidSay ();} Public classHeroviewmodel:herocmd { PublicHeroviewmodel () {varPrefab = Gameobject.find ("Hero") asGameobject; Prefab. AddComponent ("Herobehaviour"); Herobehaviour Inst= Prefab. Getcomponent(); INST.VM= This; } Public voidOnCommand (stringcmd) {Debug.Log ("On command:"+cmd); } Public voidUseskill () {} Public voidAddblood () {} Public voidSay () {}} Public classHerobehaviour:monobehaviour { PublicHerocmd VMs; voidUpdate () {if(input.anykeydown) {//AnimationVMs. Useskill (); } }} Public classUiloginviewmodel {scene.login _l; PublicUiloginviewmodel (Scene.login L) { This. _l =L; varPrefab = Gameobject.find ("login_ui") asGameobject; Prefab. AddComponent ("Uiclickbehaviour"); } voidLogin () { This. _l.onlogin (); }} Public classSceneviewmodel {PrivateScene.login _statelogin; PrivateScene.login _stategame; GENFSM SCENEFSM; PublicSceneviewmodel () { This. _statelogin =NewScene.login (); This. SCENEFSM =NewGENFSM ( This. _statelogin); } //Command Public voidchangestate (iscenestate state) {SCENEFSM. Changestate (state); }}
Unity3d MVVM C #