自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 响应式编程入门教程第一节:揭秘 UniRx 核心 - ReactiveProperty - 让你的数据动起来!

本文介绍了Unity开发中的响应式编程利器UniRx及其核心组件ReactiveProperty。ReactiveProperty是一种可观察属性,能够自动通知数据变化,解决了传统事件处理方式的代码臃肿问题。它具有数据绑定自动化、泛型支持、强大订阅机制等特性,特别适用于数据驱动UI、游戏状态管理等场景。文章通过示例展示了如何使用Subscribe方法监听属性变化,并强调使用AddTo()方法管理订阅生命周期以防止内存泄漏。ReactiveProperty作为UniRx响应式系统的基础,为开发者提供了更优雅、

2025-07-02 09:45:00 887

原创 Unity入门教程之异步篇第四节:Unity 高性能计算?Job System 与 Burst Compiler !

摘要: 本文深入探讨Unity的JobSystem与BurstCompiler如何高效解决传统C#多线程在Unity中的痛点(如GC开销、线程安全复杂性和性能瓶颈)。JobSystem通过数据导向设计实现零GC分配、自动并行化和安全系统,而BurstCompiler则将Job代码编译为高度优化的机器码,利用SIMD指令提升性能。文章详细解析了IJob、IJobParallelFor等核心接口的使用方法,并对比了适用场景与限制。结合Unity Profiler调试工具,开发者可安全地实现大规模粒子模拟、AI计

2025-07-01 09:30:00 723

原创 Unity入门教程之异步篇第三节:多线程初探?理解并发与线程安全

Unity中实现高效异步编程需要平衡协程、UniTask和多线程的合理使用。C#的Task.Run可将计算密集型任务分配到子线程执行,但需注意Unity API只能在主线程调用的限制。多线程编程需注意线程安全问题,可用lock、Interlocked原子操作或Concurrent线程安全集合来保护共享数据。最佳策略是尽量减少共享状态,使用数据隔离和不可变对象。后续将探讨更优化的Unity JobSystem和BurstCompiler解决方案。

2025-06-30 09:01:23 985 2

原创 Unity入门教程之异步篇第二节:协程 or UniTask?Unity 中异步流程到底怎么选

Unity游戏开发中,协程(Coroutine)和UniTask是两种主要的异步编程方案。协程基于IEnumerator/yield机制,适合时序性任务(如UI动画、资源加载),但对返回值支持差。UniTask作为第三方库,采用async/await语法,提供零GC、主线程安全等特性。本文对比两者差异:协程简单易用但功能有限,UniTask性能更优但学习成本较高。建议根据项目需求选择:简单流程用协程,复杂异步场景优先UniTask。两者也可搭配使用,各取所长。

2025-06-22 15:06:50 977

原创 Unity入门教程之异步篇第一节:协程基础扫盲--非 Mono 类如何也能启动协程?

协程(Coroutine)是 Unity 提供的一种在多帧间执行代码的机制,能让我们用同步的代码写出异步的效果。在 Unity 脚本中,协程通常表现为一个返回 IEnumerator的函数,内部使用来暂停执行。// 暂停1秒如果我们在 MonoBehaviour 脚本中通过启动它,那么它会先打印 "Hello",然后等待1秒,再打印 "World"。整个过程没有堵塞主线程,因为将函数挂起,等下一帧或指定时间后再继续执行。返回类型必须是 IEnumerator:协程函数定义为。

2025-06-20 23:13:48 886

原创 对象池由浅入深第三节:基于 ObjectPoolPro 扩展 Unity 对象池--泛型对象池、自动回收和场景隔离

本文介绍了Unity对象池的进阶应用,主要包括三部分内容:1. 实现泛型对象池,支持非GameObject类型对象的复用,减少逻辑对象频繁创建/销毁带来的GC压力;2. 编写AutoRecycle自动回收组件,通过挂载该组件实现对象在失活或指定时间后自动回收至对象池;3. 增加场景隔离机制,通过场景ID分类管理对象池,在场景切换时自动清理相关池资源,防止跨场景资源残留。这些优化提升了对象池的通用性、自动化程度和安全性,能有效降低内存分配和GC压力,提高游戏性能。文章包含完整代码实现和详细使用说明

2025-06-20 22:49:20 451 1

原创 对象池由浅入深第二节:基于 UnityEngine.Pool 封装工具类 ObjectPoolPro

本文介绍了Unity中对象池的原理与实现方法。首先分析了传统对象复用手法存在的问题,然后讲解了Unity官方提供的ObjectPool类的优势。在此基础上,文章详细展示了一个封装好的对象池管理工具类ObjectPoolPro的实现过程,包含注册Prefab、获取/回收对象、延迟回收、场景清理等核心功能。该工具类通过字典管理不同Prefab的对象池,使用协程实现延迟回收,并提供自动激活/隐藏对象、防误用检查等功能。最后通过子弹生成的示例演示用法。这种基于内置对象池的封装能简化开发流程,提高性能并确保代码健壮性

2025-06-20 22:41:40 908

原创 对象池由浅入深第一节:Unity对象池教程--原理与实践

文章首先解释了对象池的原理和适用场景(如子弹、特效等频繁生成的对象),然后手动实现了一个基于List的简单GameObject对象池类,包含初始化、对象获取和回收功能。接着以子弹系统为例演示实际应用,并介绍了Unity2021内置的ObjectPool<T>类,说明其自动管理、容量限制和安全检查等优势。最后预告下一篇将基于Unity API封装更健壮的对象池工具。对象池技术能显著提升游戏运行流畅度,是开发者需要掌握的重要优化手段。

2025-06-20 22:32:01 1125

原创 UI框架从0到1第十节:【自动化 UI 架构】一键创建结构、强绑定脚本、控件随查随用

本文介绍了UI框架开发中的两个关键功能改进:1. 一键创建标准Canvas+Panel结构的工具,通过编辑器脚本自动生成基础页面结构;2. UI控件自动注册机制,让View能够自动管理其子控件,并提供高效查询接口。文章详细讲解了如何实现这两个功能,包括编辑器菜单创建、强制绑定、控件注册到View的字典缓存,以及GetEventUI查询接口的设计。这些改进显著提升了UI开发效率,解决了手动创建结构和控件查找的性能问题,为开发者提供了更便捷的工作流程。

2025-06-10 22:00:50 385

原创 UI框架从0到1第七节:【全局访问 View】UIManager 登场,掌控所有界面入口

本文介绍了如何通过UIManager静态类实现对MVVM框架中ViewBase派生类的统一管理。主要解决了面板调用时的引用溯源问题,通过泛型方法GetPanelView<T>()实现类型安全的全局访问。关键设计包括:1)在ViewBase的Init方法中自动注册实例到UIManager;2)使用静态构造函数自动初始化框架;3)通过反射调用所有Base派生类的Init方法,确保框架自动运行。这种设计既保证了面板引用的唯一性和可溯源性,又实现了零手动调用的自动化管理,提升了框架的易用性和稳定性。

2025-06-10 21:07:30 280

原创 UI框架从0到1第九节:【脚本模板生成】怎么用代码生成代码?

本文介绍了如何开发一个Unity编辑器扩展工具,用于快速生成UI面板脚本模板。通过创建TemplatePanelView.txt和TemplatePanelLogic.txt两个模板文件,编写KiraEditorExtensionUI编辑器脚本实现一键生成功能。该工具允许用户输入类名和作者名,自动替换模板中的占位符,生成符合框架规范的PanelView和PanelLogic脚本,并创建对应的文件目录。工具还包含输入验证、类名查重等功能,大大提高了UI开发的效率。

2025-06-10 21:05:50 412 1

原创 UI框架从0到1第八节:【初始化优先级】三大层级定序,杜绝找不到父级的尴尬

本文探讨了UI框架初始化顺序的重要性及解决方案。针对ViewBase、PanelBase和EventUIBase三类脚本之间的依赖关系,我们可以通过建立类型优先级调度系统(ViewBase:0→PanelBase:1→EventUIBase:2)来确保初始化顺序。UIManager改进后的Init()方法利用反射获取所有Base派生类实例,按优先级排序后依次调用其Init方法,从而保证父级组件先于子级初始化。该方案解决了组件间引用依赖问题,使UI框架进入生命周期可控状态。

2025-06-10 20:19:17 304

原创 UI框架从0到1第六节:【轻量 MVVM】用属性驱动 UI,彻底抛弃命令式调用

本节引入 ViewBase 类,与 PanelBase 搭配使用,实现类 MVVM 风格的数据驱动机制。通过封装属性变更逻辑(如 IsShow),当状态变化时自动派发事件,交由上层处理,从而实现“状态驱动行为”。控件不再直接与 PanelBase 通信,而是先传递给 ViewBase 中转,提高解耦性。这样一来,UI逻辑由“命令式控制”转为“响应式驱动”,使代码结构更清晰、扩展更灵活,践行了 MVVM 的核心理念。

2025-06-10 00:24:33 877

原创 UI框架从0到1第五节:【事件消息体】不仅知道你点了啥,还知道你改了啥

本节通过引入泛型事件上下文 ValueChangedContext<T>,实现了UI事件的类型安全与数据传递。所有控件统一继承自 EventUIBase,通过 Send 方法将事件名和上下文传递给 PanelBase。PanelBase 使用 Dispatch 方法判断事件类型并执行对应逻辑,支持无上下文和带上下文两种模式,显著提升了事件处理的灵活性与可维护性。为后续实现类 MVVM 风格的数据绑定打下了基础。下一节将进一步解释为何设计如此复杂,并演示其优势。

2025-06-09 23:49:21 693

原创 UI框架从0到1第四节:【页面逻辑拆分】让每一个面板都拥有自己的灵魂

本节教程解决了多页面UI事件处理的问题。通过将通用逻辑提取至 PanelBase 基类,再为每个具体页面继承并重写 ProcessEvent 方法,实现了灵活的多页面事件响应机制。但目前事件仍依赖于控件名称判断,存在类型不明、值访问不便、重名冲突等问题。下一节将针对这些缺陷进行优化,提升事件分发的类型安全性与数据可读性。

2025-06-09 23:04:51 189

原创 UI框架从0到1第三节:【一键挂载】用编辑器扩展解放双手,告别手动拖脚本

本节教程通过Unity编辑器扩展,实现了“一键挂载UI基础脚本”功能。核心思路是扫描场景中所有物体,自动为含有特定UI组件(如Button、Toggle等)的物体挂载对应的自定义脚本(如ButtonCustom)。为此引入了泛型与反射机制,简化开发流程并防止手动挂载出错。此功能显著提升了UI框架的可维护性与效率。下一节将继续扩展PanelBase,为多页面系统提供支持。

2025-06-09 22:48:36 329

原创 UI框架从0到1第二节:【全控件适配】把 Toggle、InputField 全都拉进事件系统

在上一节中,我们完成了按钮事件的自动转发——会自动向上查找并调用页面的,从而完成“业务逻辑接收”。但实际项目里我们当然不会只用到 Button,对吧?Toggle、Slider、InputField、Dropdown……它们都是交互控件,也需要转发事件。所以本节我们要解决一个关键问题:❓ 怎么让所有 UI 控件都能使用统一的事件系统,而不是每个都写一套重复逻辑?

2025-06-09 22:20:02 152

原创 UI框架从0到1第一节:【事件转发起步】让按钮自己“走上来”找逻辑处理

在 Unity UI 开发中,我们经常会遇到这样的烦恼:UI 搭建完毕后,每个按钮都要手动绑定点击事件;用 Inspector 拖脚本引用不仅繁琐,而且;如果 UI 面板一多,手动操作就变得极其低效。有没有办法写一套脚本框架,,而不是手动一一拖拽绑定?有的,兄弟,有的,而且代码非常简单。

2025-06-09 21:45:13 318 3

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除