UFL4-2——事件中心传递参数
UFL4-2——事件中心传递参数 事件中心中传递参数指的是什么 希望在触发事件时传递数据,比如 怪物死亡时,将怪物信息传递出去 获取奖励时,将奖励信息传递出去 等等 传递数据的主要目的是,我们可以在各系统、模块、对象中获取到我们希望获取的有用信息 制作思路和具体实现 我们目前触发事件,是通过执行委托中存储的函数来执行各系统对应的逻辑,那么需要传递参数,我们很自然的联想到应该从委托入手 但是参数的类型可能有多种多样,我们可以采用万物之父 object...
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() { } 实现关键方法 触发(分发)事件...
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>>...
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对象的子物体 ...
UFL4——事件中心模块
UFL4——事件中心模块 前置知识点 C#中Dictionary相关知识点(C#四部曲之C#进阶中) C#中委托事件相关知识点(C#四部曲之C#进阶中) C#中泛型相关知识点(C#四部曲之C#进阶中) C#中里式替换原则(C#四部曲之C#核心中) 观察者设计模式 事件中心模块 事件中心的主要作用 解耦程序模块,降低程序耦合度,它可以降低游戏中不同模块的耦合度 不需要直接引用或依赖于彼此的具体实现 事件中心的基本原理 利用字典和委托相关的知识点,再结合观察者设计模式的基本原理 实现一个中心化的机制,使得多个系统、模块、对象之间可以进行松耦合的通信 举例抛出问题 在以前,没有事件中心的时候, 面对一个对象被修改时其它对象要做自动更新的问题: 例如一个怪物死亡,需要让其它对象例如玩家执行什么方法, 我们可能就会让怪物关联这些对象,然后在死亡的方法里调用这些对象 1234567891011121314151617181920212223using UnityEngine;public class Monster : MonoBehaviour{ ...
UFL3——缓存池(对象池)模块
UFL3——缓存池(对象池)模块 前置知识点 C#中垃圾回收机制(GC)相关知识(C#四部曲之C#核心中) C#中Dictionary、List、Stack、Queue相关知识点(C#四部曲之C#进阶中) Unity中GameObject相关知识(Unity四部曲之Unity入门中) Unity中 Resources...
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; } ...
UG4L25——其它功能
UG4L25——其它功能 颜色空间切换 注:该功能非免费,需要专业版 现在有不少项目选择了Linear颜色空间进行开发,而非传统的Gamma颜色空间,不同颜色空间对半透明混合的影响很大 关于颜色空间,详见:线性和伽马颜色空间 默认情况下,FairyGUI编辑器是使用Gamma颜色空间的,当使用到半透明混合时 就会出现编辑器内效果和引擎运行效果不一致的情况,如果出现这种情况,我们只需在编辑器中切换颜色空间即可 注意:设置后,之后新建的所有工程将采用该颜色空间 菜单栏 ——> 文件 ——> 切换颜色空间 偏好设置 菜单栏 ——> 编辑 ——> 首选项 该设置还有可以设置编辑器界面相关,更新检测,快捷键等等 其它功能 目前对于大家来说可能还用不到的一些功能 Lua中的使用 特色功能 编辑器插件开发 导入导出 等等 只要掌握我们目前讲解的知识,基本就可以应对所有需求了
