【Unity技巧】统一管理回调函数——观察者模式

这篇博客介绍了如何在Unity中应用一种类似于观察者模式的方法来统一管理回调函数,尽管与传统的观察者模式有所不同。文章从开场白引入,详细讲解了其实现方式,并通过具体例子帮助读者理解,最后以结束语收尾。
摘要由CSDN通过智能技术生成

这次的内容有点类似设计模式里的观察者模式。但是和常规意义上的观察者模式也不是完全一致,所以各位就不要咬文嚼字啦!咦?设计模式?!不懂!没关系,说不定你以前就用过。


开场白


我们来想象一个场景。在加载一个模型时,你需要从网上下载,但是你并不知道下载需要花费多少时间。你所知道的是,当下载完成后,就可以把模型放在特定位置上,开始游戏。那么,我们怎样才能判断下载完成呢?
一个简单的方法是,在每一帧的时候都判断下载是否完成,完成后就可以继续后面的工作。因此,我们可以这样做,我们告诉一个管理器,嗨,你帮我盯着点,看下载完了没有,完了就叫我一声,好让我执行XXX函数。我们今天要做的,就是构造这样一个管理器。


实现

注意,下面的代码依赖于之前所讲到的单例模式

我们不防把上面这样一件工作成为一个计数器——Timer(这个名字可能不太恰当),把需要被通知者成为观察者——Oberver,而像下载管理器这样的对象成为一个主题——Subject。

首先,我们来定义观察者和主题对象 TimerObserverOrSubject.cs如下:
using UnityEngine;
using System.Collections;

public class TimerObserverOrSubject : MonoBehaviour {
	
	virtual protected void OnDestroy ()
    {
        if(Singleton.IsCreatedInstance("TimerController"))
        {
            (Singleton.getInstance("TimerController") as TimerController).ClearTimer(this);
        }
    }
}


TimerObserverOrSubject.cs的内容非常简单,它的工作就是在该脚本被析构时,及时地从计数器管理器里面删除涉及这个对象的所有Timer。

计数器管理器的脚本—— TimerController.cs如下:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
 
public class TimerController : MonoBehaviour {
	
	public delegate void OnCallBack(object arg);
	public delegate bool OnIsCanDo(object arg);
	
	public class Timer {
		public TimerObserverOrSubject m_Observer;
		public OnCallBack m_Callback = null;
		public object m_Arg = null;
		
		public TimerObserverOrSubject m_Subject;
		public OnIsCanDo m_
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值