使用C#事件,在游戏中对场景的Collider触发做出反应

c#事件和Unity触发器

c#事件和Unity触发器

今天在跟着视频做游戏的时侯,遇到一个问题:
当玩家在场景移动的过程中会触发场景的触发器,触发时游戏中要进行一些操作,如播放对应的声音,灯光改变。视频中是把游戏管理类做成了单例,然后调用里面的方法。我觉这种方式有点不好,具体那里不好也说不上来,我就想可以用C#中的事件来做这个事情。

  1. 首先建立一个事件的发布器类,用于事件的发布还有定义
  2. 把这个定义为单例
  3. 在触发器脚本代码中调用事件的发布方法
  4. 在游戏控制类中注册事件。

以下是代码

事件的发布器用于事件的发布

using UnityEngine;

//事件的发布器
/// <summary>
/// 自定义时间处理
/// 1,时间的监听和分发
/// </summary>
public class CustomEventManager
{
	public delegate void DiscoveredHandler(Vector3 pos);
	public event DiscoveredHandler DiscoveredEvent;

	private static CustomEventManager _instance;
	static CustomEventManager() {
		_instance = new CustomEventManager();
	}

	public static CustomEventManager Instance{
		get{return _instance;}
	}

	public void OnEvent(Vector3 pos) {
		if (DiscoveredEvent != null) {
			DiscoveredEvent(pos);
		}
	}
}

事件的注册

public bool OnAlerm = false;

	private Vector3 _lastPlayerPos = Vector3.zero;
	private GameObject[] _sirens = new GameObject[6];

	private void Awake()
	{
		_sirens = GameObject.FindGameObjectsWithTag(Tags.siren);
		// 使用事件机制来进行玩家触发触发器事件的监听
		CustomEventManager.Instance.DiscoveredEvent += new CustomEventManager.DiscoveredHandler(DiscoverPlayer);
	}
	private void DiscoverPlayer(Vector3 pos) {
		OnAlerm = true;
		_lastPlayerPos = pos;
	}

事件的触发

***1,第一个脚本中的代码***  
private void OnTriggerStay(Collider other)
	{
		CustomEventManager.Instance.OnEvent(other.transform.position);
	}
***第二脚本中的代码***
public class MyCctvCamera : MonoBehaviour {
	//public delegate void DiscoveredHandler(Vector3 pos);
	//public event DiscoveredHandler DiscoveredEvent; 
	public void OnTriggerStay(Collider other)
	{
		if (other.tag == Tags.player) {
			//DiscoveredEvent(other.transform.position);
			CustomEventManager.Instance.OnEvent(other.transform.position);
		}
	}
}

一点拙见,不知道这样会不会好一点,以后理解的更深入了再来修改,有好的方法可以用,继续努力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值