Unity3D 大型游戏 MOBA类手机游戏 状态机在游戏中的应用(18)
来源:互联网 发布:牡丹江管理局电视网络 编辑:程序博客网 时间:2024/05/21 11:29
本文固定链接
http://blog.csdn.net/u013108312/article/details/78824724
状态机在游戏中应用还是比较广泛的,在我以前博客中关于游戏框架中有介绍,感兴趣的朋友可以去看看。那个框架是企鹅公司里面的游戏框架,好了废话不多说,直接进入今天的主题,状态机的应用。
using UnityEngine;using System.Collections;namespace BlGame.GameState{ public interface IGameState { GameStateType GetStateType(); void SetStateTo(GameStateType gsType); void Enter(); GameStateType Update(float fDeltaTime); void FixedUpdate(float fixedDeltaTime); void Exit(); }}
using UnityEngine;using System.Collections;using System.Collections.Generic;namespace BlGame.GameState{ public enum GameStateType { GS_Continue, GS_Login, GS_User, GS_Lobby, GS_Room, GS_Hero, GS_Loading, GS_Play, GS_Over, } public class GameStateManager : Singleton<GameStateManager> { Dictionary<GameStateType, IGameState> gameStates; IGameState currentState; public GameStateManager() { gameStates = new Dictionary<GameStateType, IGameState>(); IGameState gameState; gameState = new LoginState(); gameStates.Add(gameState.GetStateType(), gameState); gameState = new UserState(); gameStates.Add(gameState.GetStateType(), gameState); gameState = new LobbyState(); gameStates.Add(gameState.GetStateType(), gameState); gameState = new RoomState(); gameStates.Add(gameState.GetStateType(), gameState); gameState = new HeroState(); gameStates.Add(gameState.GetStateType(), gameState); gameState = new LoadingState(); gameStates.Add(gameState.GetStateType(), gameState); gameState = new PlayState(); gameStates.Add(gameState.GetStateType(), gameState); gameState = new OverState(); gameStates.Add(gameState.GetStateType(), gameState); } public IGameState GetCurState() { return currentState; } public void ChangeGameStateTo(GameStateType stateType) { if (currentState != null && currentState.GetStateType() != GameStateType.GS_Loading && currentState.GetStateType() == stateType) return; if (gameStates.ContainsKey(stateType)) { if (currentState != null) { currentState.Exit(); } currentState = gameStates[stateType]; currentState.Enter(); } } public void EnterDefaultState() { ChangeGameStateTo(GameStateType.GS_Login); } public void FixedUpdate(float fixedDeltaTime) { if (currentState != null) { currentState.FixedUpdate(fixedDeltaTime); } } public void Update(float fDeltaTime) { GameStateType nextStateType = GameStateType.GS_Continue; if (currentState != null) { nextStateType = currentState.Update(fDeltaTime); } if (nextStateType > GameStateType.GS_Continue) { ChangeGameStateTo(nextStateType); } } public IGameState getState(GameStateType type) { if (!gameStates.ContainsKey(type)) { return null; } return gameStates[type]; } }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.GameData;using BlGame.Resource;using BlGame.Ctrl;using BlGame.View;namespace BlGame.GameState{ class HeroState : IGameState { GameStateType stateTo; GameObject mScenesRoot; GameObject mUIRoot; public HeroState() { } public GameStateType GetStateType() { return GameStateType.GS_Hero; } public void SetStateTo(GameStateType gs) { stateTo = gs; } public void Enter() { SetStateTo(GameStateType.GS_Continue); HeroCtrl.Instance.Enter(); ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET); AudioClip clip = clipUnit.Asset as AudioClip; AudioManager.Instance.PlayBgAudio(clip); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent); EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); } public void Exit() { EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent); EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); HeroCtrl.Instance.Exit(); } public void OnConnectServerFail() { EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Reconnect); } public void FixedUpdate(float fixedDeltaTime) { } public GameStateType Update(float fDeltaTime) { return stateTo; } public void OnEvent(CEvent evt) { switch (evt.GetEventId()) { case EGameEvent.eGameEvent_Loading: { GameStateType stateType = (GameStateType)evt.GetParam("NextState"); LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState; lState.SetNextState(stateType); lState.SetFrontScenes(View.EScenesType.EST_Login); SetStateTo(GameStateType.GS_Loading); } break; } } private void SdkLogOff() { GameMethod.LogOutToLogin(); SetStateTo(GameStateType.GS_Login); } }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.GameData;using System.Threading;using BlGame.Resource;using BlGame.View;using BlGame.Ctrl;using BlGame.Model;namespace BlGame.GameState{ class LoadingState : IGameState { GameStateType stateTo; GameObject mScenesRoot; GameObject mUIRoot; public GameStateType mNextState; public EScenesType mFrontScenes; public LoadingState() { mNextState = GameStateType.GS_Continue; } public GameStateType GetStateType() { return GameStateType.GS_Loading; } public void SetNextState(GameStateType next) { mNextState = next; } public void SetFrontScenes(EScenesType front) { mFrontScenes = front; } public void SetStateTo(GameStateType gs) { stateTo = gs; } private string GetLoadMapName() { MapInfo map = MapLoadConfig.Instance.GetMapInfo(GameUserModel.Instance.GameMapID); if (map == null) { Debug.LogError("GetLoadMapName map find fail !!!"); return ""; } return map.mLoadScene; } private void LoadFinish(GameStateType state) { //Timer t = new Timer(this.CallBack, state, 5000, 0); SetStateTo(state); }// public void CallBack(object obj)// {// GameStateType state = (GameStateType)obj;// SetStateTo(state);// } public void Enter() { if (mNextState == GameStateType.GS_Continue) return; SetStateTo(GameStateType.GS_Continue); //加载UI mUIRoot = GameMethod.LoadProgress(); LoadScene.Instance.GState = mNextState; LoadScene.Instance.OnLoadFinish += LoadFinish; //加载场景之前需要进行清除操作 BlGame.Effect.EffectManager.Instance.DestroyAllEffect(); //清除GameObjectPool数据 GameObjectPool.Instance.Clear(); //加载场景 if (mNextState == BlGame.GameState.GameStateType.GS_Play) { LoadScene.Instance.isCloseBySelf = false; string name = GetLoadMapName(); LoadScene.Instance.LoadAsignedSene("Scenes/"+name); WindowManager.Instance.ChangeScenseToPlay(mFrontScenes); } else { //返回Pvp_Login选人界面需要清除预加载信息 ReadPreLoadConfig.Instance.Clear(); LoadScene.Instance.isCloseBySelf = true; LoadScene.Instance.LoadAsignedSene("Scenes/Pvp_Login"); WindowManager.Instance.ChangeScenseToLogin(mFrontScenes); } //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip; //AudioManager.Instance.PlayBgAudio(clip); ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET); AudioClip clip = clipUnit.Asset as AudioClip; AudioManager.Instance.PlayBgAudio(clip); EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent); } public void Exit() { EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent); } public void FixedUpdate(float fixedDeltaTime) { } public GameStateType Update(float fDeltaTime) { return stateTo; } public void OnConnectServerFail() { EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Reconnect); } public void OnEvent(CEvent evt) { switch (evt.GetEventId()) { case EGameEvent.eGameEvent_IntoRoom: { LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState; lState.SetNextState(GameStateType.GS_Room); lState.SetFrontScenes(View.EScenesType.EST_Play); SetStateTo(GameStateType.GS_Loading); } break; } } }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.Resource;using BlGame.Ctrl;using System;using BlGame.View;namespace BlGame.GameState{ class LobbyState : IGameState { GameStateType stateTo; GameObject mScenesRoot; GameObject mUIRoot; public LobbyState() { } public GameStateType GetStateType() { return GameStateType.GS_Lobby; } public void SetStateTo(GameStateType gs) { stateTo = gs; } public void Enter() { SetStateTo(GameStateType.GS_Continue); LobbyCtrl.Instance.Enter(); //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip; //AudioManager.Instance.PlayBgAudio(clip); ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET); AudioClip clip = clipUnit.Asset as AudioClip; AudioManager.Instance.PlayBgAudio(clip); if (!AudioManager.Instance.LoopAudioSource.isPlaying) { AudioManager.Instance.LoopAudioSource.Play(); } EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoHero, OnEvent); EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); EventCenter.AddListener<UInt64,string>(EGameEvent.eGameEvent_InviteCreate, InviteAddFriend); EventCenter.AddListener<string>(EGameEvent.eGameEvent_InviteAddRoom, InviteAddRoom); EventCenter.AddListener(EGameEvent.eGameEvent_ReconnectToBatttle, ReconnectToBatttle); } private void SdkLogOff() { GameMethod.LogOutToLogin(); SetStateTo(GameStateType.GS_Login); } private void InviteAddRoom(string arg1) { InviteRoomCtrl.Instance.Enter(); } private void InviteAddFriend(UInt64 sGUID ,string temp) { if (InviteCtrl.Instance.AddDic(sGUID, temp) && InviteCtrl.Instance.InvatiDic.Count > 1) { InviteCtrl.Instance.ChangeInvite(sGUID, temp); }else InviteCtrl.Instance.Enter(sGUID,temp); } public void Exit() { LobbyCtrl.Instance.Exit(); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoHero, OnEvent); EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); EventCenter.RemoveListener<UInt64,string>(EGameEvent.eGameEvent_InviteCreate, InviteAddFriend); EventCenter.RemoveListener<string>(EGameEvent.eGameEvent_InviteAddRoom, InviteAddRoom); EventCenter.RemoveListener(EGameEvent.eGameEvent_ReconnectToBatttle, ReconnectToBatttle); } public void FixedUpdate(float fixedDeltaTime) { } public GameStateType Update(float fDeltaTime) { return stateTo; } public void OnEvent(CEvent evt) { switch (evt.GetEventId()) { case EGameEvent.eGameEvent_IntoRoom: SetStateTo(GameStateType.GS_Room); break; case EGameEvent.eGameEvent_IntoHero: GameStateManager.Instance.ChangeGameStateTo(GameStateType.GS_Hero); break; case EGameEvent.eGameEvent_Loading: GameStateType stateType = (GameStateType)evt.GetParam("NextState"); LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState; lState.SetNextState(stateType); lState.SetFrontScenes(View.EScenesType.EST_Login); SetStateTo(GameStateType.GS_Loading); break; } } public void ReconnectToBatttle() { EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_ReEnter); } }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.Resource;using BlGame.Ctrl;namespace BlGame.GameState{ class LoginState : IGameState { GameStateType stateTo; GameObject mScenesRoot; // GameObject mUIRoot; public LoginState() { } public GameStateType GetStateType() { return GameStateType.GS_Login; } public void SetStateTo(GameStateType gs) { stateTo = gs; } public void Enter() { SetStateTo(GameStateType.GS_Continue); //yaz修改 //mScenesRoot = GameObject.Instantiate(Resources.Load(GameConstDefine.GameLogin)) as GameObject; //mUIRoot = LoadUiResource.LoadRes(GameMethod.GetUiCamera.transform, GameConstDefine.LoadGameLoginUI); //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip; ResourceUnit sceneRootUnit = ResourcesManager.Instance.loadImmediate(GameConstDefine.GameLogin, ResourceType.PREFAB); mScenesRoot = GameObject.Instantiate(sceneRootUnit.Asset) as GameObject; //mUIRoot = LoadUiResource.LoadRes(GameMethod.GetUiCamera.transform, GameConstDefine.LoadGameLoginUI); LoginCtrl.Instance.Enter(); ResourceUnit audioClipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET); AudioClip clip = audioClipUnit.Asset as AudioClip; AudioManager.Instance.PlayBgAudio(clip); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_InputUserData, OnEvent); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent); EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); } private void SdkLogOff() { GameMethod.LogOutToLogin(); SetStateTo(GameStateType.GS_Login); } public void Exit() { EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_InputUserData, OnEvent); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent); EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); //LoadUiResource.DestroyLoad(mUIRoot); LoginCtrl.Instance.Exit(); GameObject.DestroyImmediate(mScenesRoot); } public void FixedUpdate(float fixedDeltaTime) { } public GameStateType Update(float fDeltaTime) { return stateTo; } public void OnEvent(CEvent evt) { UIPlayMovie.PlayMovie("cg.mp4", Color.black, 2/* FullScreenMovieControlMode.Hidden*/, 3/*FullScreenMovieScalingMode.Fill*/); switch (evt.GetEventId()) { case EGameEvent.eGameEvent_InputUserData: SetStateTo(GameStateType.GS_User); break; case EGameEvent.eGameEvent_IntoLobby: GameStateManager.Instance.ChangeGameStateTo(GameStateType.GS_Lobby); break; } } }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.Effect;using BlGame.Resource;using BlGame.Ctrl;using BlGame.View;using BlGame.GameEntity;using BlGame.Model;namespace BlGame.GameState{ class OverState : IGameState { GameStateType stateTo; GameObject mScenesRoot; GameObject mUIRoot; float mTime; bool mNeedUpdate; bool mNeedScore; public OverState() { } public GameStateType GetStateType() { return GameStateType.GS_Over; } public void SetStateTo(GameStateType gs) { stateTo = gs; } public void Enter() { SetStateTo(GameStateType.GS_Continue); mTime = 0; mNeedUpdate = true; mNeedScore = true; //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip; //AudioManager.Instance.PlayBgAudio(clip); ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.GetMapBgAudio((MAPTYPE)GameUserModel.Instance.GameMapID), ResourceType.ASSET); AudioClip clip = clipUnit.Asset as AudioClip; AudioManager.Instance.PlayBgAudio(clip); AdvancedGuideCtrl.Instance.Exit(); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent); EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); } public void Exit() { EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoRoom, OnEvent); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent); EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); //GameMethod.DisableAllUI(); GameMethod.RemoveUI("superwan(Clone)"); PlayerManager.Instance.LocalPlayer.CleanWhenGameOver(); JxBlGame.Instance.OpenConnectUI(); GameObjectPool.Instance.Clear(); } public void FixedUpdate(float fixedDeltaTime) { } public GameStateType Update(float fDeltaTime) { if (!mNeedUpdate) return stateTo; mTime += fDeltaTime; if (UIGuideModel.Instance.GuideType == GCToCS.AskCSCreateGuideBattle.guidetype.first) { if (mTime > 6) { CGLCtrl_GameLogic.Instance.EmsgToss_AskReEnterRoom(); mNeedUpdate = false; UIGuideCtrl.Instance.GuideBattleType(GCToCS.AskCSCreateGuideBattle.guidetype.other); } } else { if (mTime > 18) { ScoreCtrl.Instance.Exit(); CGLCtrl_GameLogic.Instance.EmsgToss_AskReEnterRoom(); mNeedUpdate = false; } else if (mNeedScore && mTime > 6) { ScoreCtrl.Instance.Enter(); mNeedScore = false; } } return stateTo; } public void OnEvent(CEvent evt) { switch (evt.GetEventId()) { case EGameEvent.eGameEvent_Loading: { GameStateType stateType = (GameStateType)evt.GetParam("NextState"); LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState; lState.SetNextState(stateType); lState.SetFrontScenes(View.EScenesType.EST_Play); SetStateTo(GameStateType.GS_Loading); } break; case EGameEvent.eGameEvent_IntoRoom: { LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState; lState.SetNextState(GameStateType.GS_Room); lState.SetFrontScenes(View.EScenesType.EST_Play); SetStateTo(GameStateType.GS_Loading); } break; case EGameEvent.eGameEvent_IntoLobby: { LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState; lState.SetNextState(GameStateType.GS_Lobby); lState.SetFrontScenes(View.EScenesType.EST_Play); SetStateTo(GameStateType.GS_Loading); } break; } } private void OnConnectServerFail() { EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Disconnect); } }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.GameData;using BlGame.GameEntity;using BlGame.GuideDate;using BlGame.Resource;using BlGame.Model;using BlGame.Ctrl;using BlGame.View;using System;using System.Linq;namespace BlGame.GameState{ class PlayState : IGameState { GameStateType stateTo; GameObject mScenesRoot; GameObject mUIRoot; //地图相机类型 public int mCameraType = 1; public int ShopID = 0; public PlayState() { } public GameStateType GetStateType() { return GameStateType.GS_Play; } public void SetStateTo(GameStateType gs) { stateTo = gs; } public void Enter() { SetStateTo(GameStateType.GS_Continue); IGuideMidMatchTip.Instance.RegisterListerner(); switch (PlayerManager.Instance.LocalAccount.ObType) { case ObPlayerOrPlayer.PlayerType: GamePlayCtrl.Instance.Enter(); break; case ObPlayerOrPlayer.PlayerObType: mUIRoot = LoadUiResource.LoadRes(GameMethod.GetUiCamera.transform, GameConstDefine.LoadGameViewer); break; } JxBlGame.Instance.PlayStart(); CGLCtrl_GameLogic.Instance.AskLoadComplete(); ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.GetMapBgAudio((MAPTYPE)GameUserModel.Instance.GameMapID), ResourceType.ASSET); AudioClip clip = clipUnit.Asset as AudioClip; AudioManager.Instance.PlayBgAudio(clip); //正常流程 EventCenter.AddListener<UInt64>(EGameEvent.eGameEvent_GameOver, OnGameOver); //新手引导流程 EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent); EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); EventCenter.AddListener(EGameEvent.eGameEvent_ReconnectToBatttle, OnReconnectToBatttle); //获取地图信息 GetMapType(); } public void GetMapType() { if (UIGuideModel.Instance.GuideType == GCToCS.AskCSCreateGuideBattle.guidetype.first) { UIGuideCtrl.Instance.Enter(); GamePlayGuideModel.Instance.NowTaskId = 90004; EventCenter.Broadcast(EGameEvent.eGameEvent_PlayTaskModelFinish); } else if (UIGuideModel.Instance.GuideType == GCToCS.AskCSCreateGuideBattle.guidetype.second) { AdvancedGuideCtrl.Instance.Enter(); UIGuideCtrl.Instance.GuideBattleType(GCToCS.AskCSCreateGuideBattle.guidetype.other); } //获取当前游戏地图数据 string levelName = Application.loadedLevelName; MapInfo mapInfo = MapLoadConfig.Instance.GetMapInfo(levelName); if (mapInfo == null) Debug.LogError("can not find levelName in MapLoadCfg.xml!"); mCameraType = mapInfo.mCameraType; GamePlayCtrl.Instance.SetShopID(mapInfo.mShopID); } public void Exit() { EventCenter.RemoveListener<UInt64>(EGameEvent.eGameEvent_GameOver, OnGameOver); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent); EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); EventCenter.RemoveListener(EGameEvent.eGameEvent_ReconnectToBatttle, OnReconnectToBatttle); LoadUiResource.DestroyLoad(mUIRoot); GamePlayCtrl.Instance.Exit(); } public void FixedUpdate(float fixedDeltaTime) { } public GameStateType Update(float fDeltaTime) { return stateTo; } private void OnGameOver(UInt64 BaseGuid) { PlayFinishVedio(BaseGuid); GameStateManager.Instance.ChangeGameStateTo(GameStateType.GS_Over); } public void OnEvent(CEvent evt) { switch (evt.GetEventId()) { case EGameEvent.eGameEvent_Loading: { GameStateType stateType = (GameStateType)evt.GetParam("NextState"); LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState; lState.SetNextState(stateType); lState.SetFrontScenes(View.EScenesType.EST_Play); SetStateTo(GameStateType.GS_Loading); } break; } } private void OnConnectServerFail() { EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Reconnect); } private void SdkLogOff() { GameMethod.LogOutToLogin(); LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState; lState.SetNextState(GameStateType.GS_Login); lState.SetFrontScenes(View.EScenesType.EST_Play); SetStateTo(GameStateType.GS_Loading); } private void OnReconnectToBatttle() { CGLCtrl_GameLogic.Instance.EmsgToss_AskEnterBattle(GameUserModel.Instance.GameBattleID); } //播放特效 void PlayFinishVedio(UInt64 ObjID) { BlGame.AudioManager.Instance.StopHeroAudio(); GameTimeData.Instance.EndCountTime(); ProgressBarInterface.hideProgressBar(); //UIPlay.OpenUIPlay(false); //if (UIDeathInterface.Instance != null) //{ // GameObject.DestroyImmediate(UIDeathInterface.Instance.gameObject); //} DeathCtrl.Instance.Exit(); Iselfplayer player = PlayerManager.Instance.LocalPlayer; if (player != null) { player.RemoveRuinWarning(); } GameMethod.CreateWindow(GameConstDefine.GameOverBoxPath, Vector3.zero, GameMethod.GetUiCamera.transform); if (Camera.main != null && Camera.main.gameObject != null) { Camera.main.gameObject.AddComponent<BaseDaBomb>(); } GameMethod.GetMainCamera.target = null; GameMethod.GetMainCamera.enabled = false; //ToReview wincamp没用上 UInt64 sGUID; sGUID = ObjID; Ientity entity = EntityManager.Instance.GetEntity(sGUID); for (int i = EntityManager.AllEntitys.Count - 1; i >= 0; i--) { var item = EntityManager.AllEntitys.ElementAt(i); if (item.Value.RealEntity != null) { item.Value.RealEntity.PlayerFreeAnimation(); item.Value.RealEntity.SyncEntity = null; item.Value.RealEntity.enabled = false; } if (item.Value.entityType == EntityType.Player || item.Value.entityType == EntityType.Building) continue; EntityManager.AllEntitys.Remove(item.Key); } if (entity != null) { BaseDaBomb.Instance.SetBaseBomb(true, entity, GameUserModel.Instance.GameMapID); //ToReview int->uint } AltarData.Instance.DelAllAltar(); BattleingData.Instance.ClearAllGoods(); BattleingData.Instance.ClearAllBattleData(); } }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.GameData;using BlGame.Resource;using BlGame.Ctrl;using System;using BlGame.View;namespace BlGame.GameState{ class RoomState : IGameState { GameStateType stateTo; GameObject mScenesRoot; GameObject mUIRoot; public RoomState() { } public GameStateType GetStateType() { return GameStateType.GS_Room; } public void SetStateTo(GameStateType gs) { stateTo = gs; } public void Enter() { SetStateTo(GameStateType.GS_Continue); RoomCtrl.Instance.Enter(); //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip; //AudioManager.Instance.PlayBgAudio(clip); ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET); AudioClip clip = clipUnit.Asset as AudioClip; AudioManager.Instance.PlayBgAudio(clip); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_RoomBack, OnEvent); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoHero, OnEvent); EventCenter.AddListener<UInt64,string>(EGameEvent.eGameEvent_InviteCreate, InviteAddFriend); EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); } private void InviteAddFriend(UInt64 sGUID,string temp) { if (InviteCtrl.Instance.AddDic(sGUID, temp) && InviteCtrl.Instance.InvatiDic.Count > 1) { InviteCtrl.Instance.ChangeInvite(sGUID, temp); } else InviteCtrl.Instance.Enter(sGUID, temp); } public void Exit() { EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_RoomBack, OnEvent); EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoHero, OnEvent); EventCenter.RemoveListener<UInt64, string>(EGameEvent.eGameEvent_InviteCreate, InviteAddFriend); EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail); RoomCtrl.Instance.Exit(); } public void FixedUpdate(float fixedDeltaTime) { } public GameStateType Update(float fDeltaTime) { return stateTo; } public void OnEvent(CEvent evt) { switch (evt.GetEventId()) { case EGameEvent.eGameEvent_RoomBack: SetStateTo(GameStateType.GS_Lobby); break; case EGameEvent.eGameEvent_IntoHero: SetStateTo(GameStateType.GS_Hero); break; } } private void SdkLogOff() { GameMethod.LogOutToLogin(); SetStateTo(GameStateType.GS_Login); } private void OnConnectServerFail() { EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Disconnect); } }}
using UnityEngine;using System.Collections;using GameDefine;using BlGame.Resource;using BlGame.Ctrl;namespace BlGame.GameState{ class UserState : IGameState { GameStateType stateTo; GameObject mScenesRoot; public UserState() { } public GameStateType GetStateType() { return GameStateType.GS_User; } public void SetStateTo(GameStateType gs) { stateTo = gs; } public void Enter() { SetStateTo(GameStateType.GS_Continue); EventCenter.Broadcast(EGameEvent.eGameEvent_UserEnter); //AudioClip clip = Resources.Load(AudioDefine.PATH_UIBGSOUND) as AudioClip; //AudioManager.Instance.PlayBgAudio(clip); ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET); AudioClip clip = clipUnit.Asset as AudioClip; AudioManager.Instance.PlayBgAudio(clip); EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent); EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); } private void SdkLogOff() { GameMethod.LogOutToLogin(); SetStateTo(GameStateType.GS_Login); } public void Exit() { EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_IntoLobby, OnEvent); EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); EventCenter.Broadcast(EGameEvent.eGameEvent_UserExit); } public void FixedUpdate(float fixedDeltaTime) { } public GameStateType Update(float fDeltaTime) { return stateTo; } public void OnEvent(CEvent evt) { switch (evt.GetEventId()) { case EGameEvent.eGameEvent_IntoLobby: GameStateManager.Instance.ChangeGameStateTo(GameStateType.GS_Lobby); break; } } }}
本文固定链接
http://blog.csdn.net/u013108312/article/details/78824724
阅读全文
1 0
- Unity3D 大型游戏 MOBA类手机游戏 状态机在游戏中的应用(18)
- Unity3D 大型游戏 MOBA类手机游戏 部分重点 登陆过程(17)
- 状态机在RPG游戏中的应用举例
- Scrum在大型游戏团队中的应用
- Scrum在大型游戏团队中的应用
- Unity3d开发MOBA游戏类《王者荣耀》记录(一)
- Unity3d开发MOBA游戏类《王者荣耀》记录(一)
- 基于 Unity3D 的 MOBA 游戏架构
- HTML5在手机游戏中的应用
- 游戏中的状态机
- 游戏中的状态机
- 游戏中的状态机
- 游戏中的状态机
- MOBA游戏测试分享
- MOBA游戏同步
- Unity3D手机游戏开发
- Unity3D游戏开发游戏读/存档在Unity3D中的实现
- Unity3d之A*算法在游戏中的应用(一)
- 对一个人生日姓名进行操作(结构体)
- 页面背景-伪类选择器-相对定位-块和内联转换
- Android混合开发之WebViewJavascriptBridge实现JS与java安全交互
- 第一个用tikz画的图
- jvisualvm安装插件
- Unity3D 大型游戏 MOBA类手机游戏 状态机在游戏中的应用(18)
- Android端关于HTTPS的认证---->可用
- Struts2结合Bootstrap-Table分页的使用
- 深入理解c语言指针-第六章
- docker项目开发部署
- 二进制转十进制快速方法
- android 抓取crash信息流程简介
- 对一个人身高体重进行排序(结构体)
- 目录---FlappyBird游戏开发教程