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{ ...
UFL2——公共Mono模块
UFL2——公共Mono模块 前置知识点 委托,事件(C#四部曲C#进阶中) 生命周期函数 协同程序 公共Mono模块 公共Mono模块的主要作用 让不继承MonoBehaviour的脚本也能利用帧更新或定时更新处理逻辑 让不继承MonoBehaviour的脚本也能利用协同程序处理逻辑 可以统一执行管理MonoBehaviour脚本的帧更新或定时更新相关逻辑 公共Mono模块的基本原理 通过事件或委托 管理...
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中的使用 特色功能 编辑器插件开发 导入导出 等等 只要掌握我们目前讲解的知识,基本就可以应对所有需求了