UFL4-1——事件中心具体实现
UFL4-1——事件中心具体实现
具体实现
创建EventCenter 继承 不继承MonoBehaviour的单例模式基类
声明管理事件用容器
1234567891011121314using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.Events;/// <summary>/// 事件中心模块/// </summary>public class EventCenter : BaseManager<EventCenter>{ private Dictionary<string, UnityAction> eventDic = new Dictionary<string, UnityAction>(); private EventCenter() { }
实现关键方法
触发(分发)事件 方法
12345678910111213priv ...
UFL3-2——缓存池具体实现
UFL3-2——缓存池具体实现
缓存池具体实现
创建PoolManager继承 不继承MonoBehaviour的单例模式基类
1234567/// <summary>/// 缓存池模块 管理器/// </summary>public class PoolManager : BaseManager<PoolManager>{ private PoolManager() { }}
声明柜子(Dictionary)和抽屉(List、Stack、Queue等)容器
12345678910/// <summary>/// 缓存池模块 管理器/// </summary>public class PoolManager : BaseManager<PoolManager>{ //柜子容器当中有抽屉的体现 private Dictionary<string, Stack<GameObject>> poolDic = ...
UFL3-3——对象上限优化
UFL3-3——对象上限优化
对象上限优化
目前我们制作的缓存池模块,理论上来说,当动态创建的对象长时间不放回抽屉
每次从缓存池中动态获取对象时,会不停的新建对象,那么也就是对象的数量是没有上限的
场景上的某种对象可以存在n个
而对象上限优化指的就是,我们希望控制对象数量有上限,
对于不重要的资源我们没必要让其无限加量,而是将“使用最久”的资源直接抢来用
主要目的:
更加彻底的复用资源,对对象的数量上限加以限制
可以优化内存空间,甚至优化性能(减少数量上限,可以减小渲染压力)
制作思路和具体实现
在抽屉里声明一个容器usedList用来记录正在使用的资源,
并开放一个属性UsedCount用于获取正在使用的资源的数量,开放一个方法PushUsedList用于将资源放入到usedList内
12345678910111213141516171819202122232425262728293031public class PoolData{ //抽屉根对象,用来就行布局管理的对象 private GameObject poolObj; //用来存储 ...
UFL3-1——Hierarchy窗口布局优化
UFL3-1——Hierarchy窗口布局优化
窗口布局优化指的是什么
现在直接失活对象,当之后项目做大了,抽屉多了,对象多了
游戏中成百上千个对象,在开发测试时不方便从Hierarchy窗口中查看对象获取信息
可见,目前创建出来的对象都是直接排布在场景上而没有做优化,因此我们希望能优化一下Hierarchy窗口中的布局,将对象和抽屉的关系可视化
制作思路和具体实现
制作思路:
柜子管理自己的柜子根物体 Pool
抽屉管理自己的抽屉根物体
失活时建立父子关系,激活活时断开父子关系
要实现的效果如下
具体实现:
先实现将所有对象放入柜子根物体中
先声明在缓存池类中声明柜子根物体对象的变量 poolObj,与场景上的Pool对象关联起来
当调用 PushObj 而柜子根物体Pool对象不存在于场景的时候,创建这个Pool对象
然后,所有要压入池子内的对象都作为Pool对象的子物体
123456789101112131415161718192021222324252627282930313233343536373839404142434445464 ...
UFL4——事件中心模块
UFL4——事件中心模块
前置知识点
C#中Dictionary相关知识点(C#四部曲之C#进阶中)
C#中委托事件相关知识点(C#四部曲之C#进阶中)
C#中泛型相关知识点(C#四部曲之C#进阶中)
C#中里式替换原则(C#四部曲之C#核心中)
观察者设计模式
事件中心模块
事件中心的主要作用
解耦程序模块,降低程序耦合度,它可以降低游戏中不同模块的耦合度
不需要直接引用或依赖于彼此的具体实现
事件中心的基本原理
利用字典和委托相关的知识点,再结合观察者设计模式的基本原理
实现一个中心化的机制,使得多个系统、模块、对象之间可以进行松耦合的通信
举例抛出问题
在以前,没有事件中心的时候,
面对一个对象被修改时其它对象要做自动更新的问题:
例如一个怪物死亡,需要让其它对象例如玩家执行什么方法,
我们可能就会让怪物关联这些对象,然后在死亡的方法里调用这些对象
1234567891011121314151617181920212223using UnityEngine;public class Monster : MonoBehaviour{ vo ...
UFL3——缓存池(对象池)模块
UFL3——缓存池(对象池)模块
前置知识点
C#中垃圾回收机制(GC)相关知识(C#四部曲之C#核心中)
C#中Dictionary、List、Stack、Queue相关知识点(C#四部曲之C#进阶中)
Unity中GameObject相关知识(Unity四部曲之Unity入门中)
Unity中Resources相关知识点(Unity四部曲之Unity入门中)
缓存池(对象池)模块
缓存池(对象池)的主要作用
通过重复利用已经创建的对象,避免频繁的创建和销毁过程
从而减少系统的内存分配和垃圾回收带来的开销
缓存池(对象池)的基本原理
用一个“柜子”中的“各种抽屉”来装“东西”
用时去拿(没有就创造,存在就获取),不用就还(将“东西”分门别类的放入“抽屉”中)
缓存池(对象池)要解决的问题
对象的频繁创建
频繁的实例化对象会带来一定的性能开销
对象的频繁销毁
对象的频繁销毁会造成大量的内存垃圾,会造成GC(垃圾回收)的频繁触发
GC的触发,内存的释放,可能会带来卡顿感,影响玩家体验
缓存池(对象池)的主要作用
缓存池(对象池)的主要作用是优化 ...
UFL2——公共Mono模块
UFL2——公共Mono模块
前置知识点
委托,事件(C#四部曲C#进阶中)
生命周期函数
协同程序
公共Mono模块
公共Mono模块的主要作用
让不继承MonoBehaviour的脚本也能利用帧更新或定时更新处理逻辑
让不继承MonoBehaviour的脚本也能利用协同程序处理逻辑
可以统一执行管理MonoBehaviour脚本的帧更新或定时更新相关逻辑
公共Mono模块的基本原理
通过事件或委托 管理 不继承MonoBehaviour脚本的相关更新函数
提供协同程序开启或关闭的方法
公共Mono模块的主要作用
Unity游戏开发当中,继承MonoBehaviour的类,可以使用生命周期函数,可以开启协同程序。
我们可以利用生命周期函数中的Update、FixedUpdate、LateUpdate等函数,进行帧更新或定时更新,用来处理游戏逻辑。
可以利用协同程序分时分步的处理游戏逻辑,比如异步加载,复杂逻辑分步等
但是对于没有继承MonoBehaviour的脚本,我们无法使用这些内容来处理逻辑。
在不进行任何处理的情况下,我们无法在不继 ...
UFL1-4——“饿汉”单例模式与“懒汉”单例模式
UFL1-4——“饿汉”单例模式与“懒汉”单例模式
“饿汉”单例模式与“懒汉单例模式”
“懒汉”单例模式
我们在课程中学习的都是“懒汉”单例模式。主要特点是在属性或者方法中进行判空后再实例化。如下:
1234567891011121314public class BaseManager<T> where T : class, new(){ private static T instance; public static T Instance { get { if (instance == null) instance = new T(); return instance; } }}
这个懒字体现在:这种单例模式只会在第一次使用时才创建事例,而不是应用程序启动时就创建。
有一种“敌不动我不动”,“催一下动一下”的感觉
它的好处也在于此,因为只有当我们代码中需要用到某个单例模式对象 ...
UEDSL——实践项目
UEDSL——实践项目
UG4L25——其它功能
UG4L25——其它功能
颜色空间切换
注:该功能非免费,需要专业版
现在有不少项目选择了Linear颜色空间进行开发,而非传统的Gamma颜色空间,不同颜色空间对半透明混合的影响很大
关于颜色空间,详见:线性和伽马颜色空间
默认情况下,FairyGUI编辑器是使用Gamma颜色空间的,当使用到半透明混合时
就会出现编辑器内效果和引擎运行效果不一致的情况,如果出现这种情况,我们只需在编辑器中切换颜色空间即可
注意:设置后,之后新建的所有工程将采用该颜色空间
菜单栏 ——> 文件 ——> 切换颜色空间
偏好设置
菜单栏 ——> 编辑 ——> 首选项
该设置还有可以设置编辑器界面相关,更新检测,快捷键等等
其它功能
目前对于大家来说可能还用不到的一些功能
Lua中的使用
特色功能
编辑器插件开发
导入导出
等等
只要掌握我们目前讲解的知识,基本就可以应对所有需求了