最新在研究游戏中主逻辑的写法,发现事件和委托是一个很好的方式,废话不多说,直接上代码:
首先,需要一个事件管理器,包含游戏中所有事件(包括场景事件)的一个枚举GameState,一个公有的委托GameEvent(GameState GS)和一个事件管理器的类using UnityEngine;
using System.Collections;
public enum GameState
{
// 游戏主事件//
GameStart,
DestroyGameStart,
CreatEnemy,
DestroyCreatEnemy,
GameOver,
DestroyGameOver,
// 场景事件//
EnemyTypeA,
EnemyTypeB,
EnemyTypeC
}
// 委托//
public delegate void GameEvent(GameState GS);
public class GameEventControl{
//一个管理Event事件//
public static event GameEvent WhenGameEvent;
// 这个方法是事件发送器,调用的时候发送各种事件 //
public static void SeedEventMessage(GameState GS){
if(WhenGameEvent != null)
{
Debug.Log ("I Send " + GS.ToString ());
WhenGameEvent(GS);
}
}
// 注册事件的方法//
public static void RegistGameEvent(GameEvent WhenEvent)
{
Debug.Log ("Regist Event WhenGameEvent");
WhenGameEvent += WhenEvent;
}
//取消订购时间方法//
public static void UnregistGameEvent(GameEvent WhenEvent)
{
Debug.Log ("Unregist Event WhenGameEvent");
WhenGameEvent -= WhenEvent;
}
}
然后是游戏的主逻辑写法,首先把游戏的中的各种资源制作成一个个单独的Prefabs,这样可以通过订购上面的消息来实例化这些预制:
<pre name="code" class="csharp">using UnityEngine;
using System.Collections;
public class GameControl : MonoBehaviour{
public GameObject StartPrefab;//游戏开始物体预制//
public GameObject EnemyPrefab;//敌人产生时预制//
public GameObject OverPrefab;// 游戏结束预制//
void Awake()
{
// 注册GameEvent中的委托事件//
GameEventControl.RegistGameEvent(WhenEvent);
}
void OnDisable()
{
//取消注册委托中的事件//
GameEventControl.UnregistGameEvent (WhenEvent);
}
// 接收到消息时执行这里//
void WhenEvent(GameState GS)
{
switch (GS) {
case GameState.GameStart:
if(StartPrefab != null) Instantiate (StartPrefab);
break;
case GameState.CreatEnemy:
if(EnemyPrefab != null) Instantiate (EnemyPrefab);
break;
case GameState.GameOver:
if(OverPrefab != null) Instantiate (OverPrefab);
break;
}
}
}