Unity开发中事件和委托的使用

    最新在研究游戏中主逻辑的写法,发现事件和委托是一个很好的方式,废话不多说,直接上代码:

  首先,需要一个事件管理器,包含游戏中所有事件(包括场景事件)的一个枚举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;
		}
	}
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值