やまめも

【 ゲーム開発・日々のことについて 】

【C#】Delegate使用 Event 使用例 第三弾

EventManagerでイベントの起点を束ねる。
1. 全てのイベントを管理するEventManager
2. Eventの起点
3. どんなEventを呼ぶかを記述


1. 全てのイベントを管理するEventManager
EventManager.cs

using UnityEngine;
using System.Collections;

public class EventManager {

	public delegate void GameChangeScene(GameController.GAME_SCENE scene);
	public static event GameChangeScene onGameChangeSceneEvent;
	public static void GameChangeSceneMethod(GameController.GAME_SCENE scene) { 	if (onGameChangeSceneEvent != null) onGameChangeSceneEvent(scene); }
}

2. Eventの起点
ボスが殺された時にshareUIを呼ぶ。
EnemyManager.cs

	void HandleonBossKilledEvent (){
		EventManager.GameChangeSceneMethod (GameController.GAME_SCENE.GAME_SCENE_SHARE);
		_wave =0;
		_maxWave = 10;
		GameController._stage++;
		GameDataManager.SaveStage(GameController._stage);
		EventManager.ChangeStageMethod();
		DisableBossMode ();
		SpawnEnemies ();

	}

3. どんなEventを呼ぶかを記述
ShareUIを表示する
UIShare.cs

	void OnEnable(){
		EventManager.onGameChangeSceneEvent += HandleonGameChangeSceneEvent;
	}
	void OnDisable(){
		EventManager.onGameChangeSceneEvent -= HandleonGameChangeSceneEvent;
	}
	void HandleonGameChangeSceneEvent (GameController.GAME_SCENE scene)
	{
		switch (scene) {
		case GameController.GAME_SCENE.GAME_SCENE_SHARE:
		
			_container.SetActive(true);
			_anim.Play ("PaperNewsFlashEntrance", -1, 0f);
			AudioManager.Instance.PlaySound("sfxNewsFlash");
			break;
		default:
			_container.SetActive(false);
			break;
		}
	}