Unity基础框架学习--公共模块

什么是公共模块呢?

公共模块主要是其辅助作用。

首先,我们注意到在unity新建的脚本,都会默认继承自MonoBehaviour,这个里面是啥呢?我们选定他导航(F12)一下(有兴趣的同学可以继续查看他的父类的父类的父类的父类。。。)

而如果有某个类很特殊,他需要继承自我们另外构建的类,这时候又想在这个类里调用MonoBehaviour的API,比如下图:Invoke、StartCoroutine、StopCoroutine等函数,我们就可以借用公共模块来给我们打辅助。

Ex:前面我们的 资源模块 因为继承自 单例类,所以为了调用 StartCoroutine 函数,借用了公共模块类的辅助。
Unity基础框架学习--公共模块_第1张图片
公共类 调用示例

接下来我们开始构建:
首先我们需要一个继承自MonoBehaviour媒介类,来让我们可以间接的使用 unityEngine的官方api。

然后需要一个 管理类 来包装我们的 工具。

.

1、MonoController 媒介

新建c#脚本 MonoController

媒介的主体是利用委托实现的,委托就像c的函数指针(不细解释)。
媒介类需要完成 添加 和 删除 委托的 函数。

我们定义成员

public event UnityAction needEvent;

添加 和 删除 的功能函数:

public void AddEventListener(UnityAction event)
{
	needEvent += event;
}
public void RemoveEnventListener(UnityAction event)
{
	needEvent -= event;
}

2、Monomanager 管理类

主要是 借用 上面的 媒介来 包装。
新建c#脚本 MonoManager
成员变量:

private MonoController controller;

构造函数时,要加载这个组件:

public MonoManager()
{
	GameObject obj = new GameObject("MonoController");
	controller = obj.AddComponent<MonoController>();
}

包装 添加 和 删除 事件功能函数:

public void AddEventListener(UnityAction event)
{
	controller.AddEventListener(event);
}

public void RemoveEventListener(UnityAction event)
{
	controller.RemoveEventListener(event);
}

公共模块的 基础构建完毕

添加 功能

接下来 我们 以添加 协程(IEnumerator)模块 来展示公共模块的 辅助功能。
我们 导航(F12) MonoBehavioour,可以看到协程的API:
Unity基础框架学习--公共模块_第2张图片

我们在== MonoManager== 里面来重载的添加 这些 委托调用函数:

PS: 回顾这一段的时候,发现好像没有用到 委托,只是借用了一个媒介类 来联系 UnityEngine的API。。。

 #region 协程包装
        public Coroutine StartCoroutine(string methodName)
        {
            return controller.StartCoroutine(methodName);
        }
        public Coroutine StartCoroutine(string methodName, [DefaultValue("null")] object value)
        {
            return controller.StartCoroutine(methodName, value);
        }
        public Coroutine StartCoroutine(IEnumerator routine)
        {
            return controller.StartCoroutine(routine);
        }

        public void StopCoroutine(IEnumerator routine)
        {
            controller.StopCoroutine(routine);
        }
        public void StopCoroutine(Coroutine routine)
        {
            controller.StopCoroutine(routine);
        }
        public void StopCoroutine(string methodName)
        {
            controller.StopCoroutine(methodName);
        }
        #endregion

搭建完毕。

致谢

本文学于: B站视频链接
可能视频有少许不全…

写博客是为了将视频里的内容转化为可视化文本,省去看视频的麻烦。 同时将经验累积下来,方便日后观看。

感谢

你可能感兴趣的:(Unity基础框架学习,unity,c#,foundation框架)