自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 响应式编程入门教程第四节:响应式集合与数据绑定

本文介绍了响应式编程中响应式集合(Reactive Collection)的概念及其在Unity开发中的应用。重点讲解了UniRx库提供的ReactiveCollection<T>,它能将集合的变化(如添加、删除、修改等)转化为可观察的事件流,使UI能自动响应数据变化。文章通过背包系统和任务列表的实例,展示了如何利用ObserveAdd()、ObserveRemove()等方法精确监听集合变化,并结合Item Template模式实现UI的动态绑定。相比传统手动更新UI的方式,响应式集合提供了更

2025-07-16 08:49:59 1111

原创 响应式编程入门教程第三节:ReactiveCommand 与 UI 交互

本教程介绍了响应式编程在Unity中的应用,重点讲解了ReactiveCommand的核心概念和使用场景。相比传统命令模式,ReactiveCommand通过数据流管理命令执行状态,能自动处理UI交互逻辑。它包含两个核心功能:执行预设逻辑和通过IObservable<bool>流控制命令可用性。文章演示了如何创建ReactiveCommand并将其与UI按钮绑定,实现数据驱动的UI交互,还提到异步操作的处理。这种方法简化了复杂的UI状态管理,使代码更易维护和测试。

2025-07-15 09:58:45 898

原创 Unity物理系统由浅入深第六节:高级主题与前沿探索

本文总结了Unity物理系统的进阶应用与前沿探索方向。首先介绍了软体物理(如布料、橡胶的粒子-弹簧模型和有限元方法)和流体模拟(基于粒子或网格的技术)。其次探讨了GPU物理加速和可编程ECS物理系统,利用并行计算提升大规模物理模拟性能。最后指出物理系统与渲染效果的结合应用,如程序化破坏和物理驱动动画。整体梳理了从基础组件到底层原理,再到软体、流体等高级主题的完整学习路径,为开发者进一步探索物理模拟领域提供了方向。

2025-07-14 14:08:06 937

原创 Unity物理系统由浅入深第五节:手写物理系统入门与实践

本文介绍了Unity物理系统的基础架构与实现原理,通过4节系列教程由浅入深讲解:从物理系统基础、高级特性与优化,到引擎底层原理和约束求解。核心内容包括:物理世界管理、刚体属性、碰撞检测与响应机制。重点演示了如何构建极简2D物理系统,实现圆形刚体、重力、边界碰撞等功能。教程采用伪代码形式,简化了复杂运算,仅保留核心物理原理,帮助开发者理解物理引擎的工作机制。该系统包含物理世界、刚体、碰撞体和求解器等关键组件,通过圆形碰撞检测和响应算法,展示了基本物理模拟的实现过程。

2025-07-14 10:11:40 634

原创 Unity物理系统由浅入深第四节:物理约束求解与稳定性

物理引擎通过约束求解器处理物体间的复杂交互,将其转化为线性互补问题(LCP)进行求解。常见的约束包括接触约束、关节约束等,主要通过顺序脉冲法等迭代算法计算冲量来满足约束条件。迭代次数影响模拟精度与性能,需在Unity中合理设置。数值稳定性问题如穿透、抖动由时间步长过大、迭代不足或参数不当导致,可通过调整物理参数、简化碰撞体等解决。物理睡眠状态优化性能,减少静止物体的计算量。理解这些原理有助于针对性优化物理模拟效果。

2025-07-13 14:37:09 817

原创 Unity物理系统由浅入深第三节:物理引擎底层原理剖析

Unity物理引擎底层采用NVIDIA PhysX,其工作原理分为碰撞检测与约束求解两大核心流程。碰撞检测先通过宽相检测(AABB树/SAP算法)快速筛选可能碰撞的物体对,再通过窄相检测(GJK/EPA算法)精确计算接触点信息。约束求解器则处理碰撞产生的相互作用,使用改进的欧拉积分方法计算物体运动状态。理解这些底层机制有助于开发者优化性能并实现更真实的物理效果,如合理设置Fixed Timestep、选择碰撞体类型等。(149字)

2025-07-13 10:16:28 777

原创 Unity物理系统由浅入深第二节:物理系统高级特性与优化

摘要:本文介绍了Unity物理系统的高级特性,包括物理层、关节、布料系统和车辆物理等。通过物理层可以精细控制碰撞行为,优化性能;各种关节(如铰链关节、弹簧关节)可用于创建复杂物理连接;布料系统模拟柔软材质;Wheel Collider提供专业车辆物理模拟。此外,还探讨了物理调试工具和性能优化策略,如减少Rigidbody数量、简化碰撞体形状和调整Fixed Timestep,以平衡物理效果与游戏性能。

2025-07-12 09:50:20 788

原创 Unity物理系统由浅入深第一节:Unity 物理系统基础与应用

Unity 物理系统基于 PhysX 引擎,包含三个核心组件:Rigidbody(赋予物体物理属性)、Collider(定义碰撞形状)和 Physic Material(设置摩擦力和弹性)。Rigidbody 控制物体的运动和质量,Collider 提供碰撞检测,而 Physic Material 定义物体间的交互特性。系统还提供碰撞和触发器回调(如 OnCollisionEnter 和 OnTriggerEnter)来响应物理事件。优化建议使用简单碰撞体,避免复杂 Mesh Collider 的性能开销。

2025-07-11 09:52:15 868

原创 Unity入门教程之异步篇第六节:对Job System的高级封装

对 Job System 进行二次封装,是提升 Unity 项目开发效率和代码质量的关键一步。通过减少样板代码和简化 API,让开发者能够更快地实现并行计算逻辑。提供更高层的语义化接口,使代码更易于理解和未来扩展。自动化的生命周期管理,并内置异常处理,降低内存泄漏和运行时错误的风险。结合UniTask,将 Job 的执行无缝集成到的异步编程模型中。

2025-07-11 09:51:22 657

原创 Unity入门教程之异步篇第五节:对UniTask的高级封装

摘要 本文探讨了为什么要对UniTask进行二次封装,并提供了具体的封装方法。原因包括:提高效率(减少重复代码、统一接口、隐藏底层细节)、增强可读性(语义化命名、降低心智负担)和提升健壮性(统一异常处理、自动取消管理、线程安全)。文章通过四个场景展示封装技巧: 统一延迟等待:合并时间与帧等待,简化调用。 安全文件IO:后台线程执行,自动切换回主线程,内置异常处理。 周期性任务:封装循环逻辑,支持取消和条件检查。 生命周期绑定:自动关联任务与MonoBehaviour,避免资源泄漏。 封装后的代码更简洁、可靠

2025-07-10 09:36:45 993

原创 ECS由浅入深第五节:调试、优化与未来展望?驾驭高性能开发

本文探讨了ECS开发的调试技巧、性能优化及未来展望。在调试方面,建议使用日志输出、自定义调试面板、断点调试、可视化工具和内存分析器来应对ECS特有的数据分散特性。针对性能瓶颈,文章分析了频繁组件增删、不当查询、同步点过多、GC压力和NativeContainer管理等问题,并提供了解决方案。未来,ECS模式将持续发展,随着Unity DOTS的成熟、工具链完善和多核CPU普及,ECS将成为高性能游戏开发的重要范式。

2025-07-10 09:06:13 834

原创 ECS由浅入深第四节:ECS 与 Unity 传统开发模式的结合?混合架构的艺术

Unity ECS混合架构实践指南 在Unity项目中,混合使用ECS与GameObject是一种实用策略,能兼顾性能与传统工作流。ECS作为核心逻辑层处理大量数据计算,GameObject则负责UI、动画、粒子等表现层功能。 关键应用场景: 需要集成Unity原生功能(如UGUI、Mecanim动画) 使用第三方插件或物理引擎 保持美术工作流程 快速原型开发 数据同步方案: ECS→GameObject:通过MonoBehaviour脚本查询ECS数据更新Transform GameObject→ECS:

2025-07-09 11:18:52 1314

原创 ECS由浅入深第三节:进阶?System 的行为与复杂交互模式

摘要:本文深入探讨了ECS架构中System的运行机制。System通过生命周期管理处理组件数据,驱动游戏逻辑。状态通过Component表示,行为由System修改组件实现。事件处理采用"数据驱动"模式,如添加一次性事件组件并由专门System处理。这种纯数据驱动的设计使ECS具备高效并行化能力,适合复杂游戏行为的实现

2025-07-08 09:21:52 995

原创 ECS由浅入深第二节:通用实现模式与数据管理?构建你的第一个 ECS 框架

摘要:本文探讨了如何设计一个简化的通用ECS框架,重点分析了Component数据存储方式对性能的影响。文章指出自建ECS框架需要满足Entity管理、Component管理和System调度三大核心功能,并提出了基础类结构设计。在数据存储方面,对比了AOS(结构体数组)与SOA(数组结构体)两种模式,强调ECS采用SOA存储可提升CPU缓存命中率以实现高性能。最后给出了一个简化的EntityManager实现方案,使用字典结构管理Component数组和Entity索引关系,为开发者理解ECS底层机制提供

2025-07-07 09:21:20 412

原创 ECS由浅入深第一节:核心理念与优势解析?打破传统,拥抱数据之道

本文讲述了Unity游戏开发中传统面向对象编程(OOP)模式在大规模项目中的性能瓶颈(如CPU缓存未命中、内存碎片化及并行困难),并系统阐述了实体-组件-系统(ECS)架构的核心理念:通过**实体**(纯标识符)、**组件**(纯数据结构)和**系统**(纯处理逻辑)三要素彻底解耦数据与行为。该模式以数据为导向,通过连续存储同类组件(SOA模式)显著优化CPU缓存利用率,天然支持多线程并行计算,同时赋予高度模块化设计能力。ECS尤其适用于万级实体模拟(如大规模战斗、物理运算),但小型项目或UI等场景仍...

2025-07-06 16:32:18 825

原创 动态编程入门第三节:表达式树 - 运行时构建代码,释放极致性能!

本文介绍了C#表达式树在Unity开发中的应用。表达式树将代码转换为可操作的数据结构,能在运行时构建和编译成高性能委托,相比反射调用更高效。文章通过组件初始化示例,展示了如何利用表达式树动态调用接口方法:首先获取方法信息,创建参数表达式,进行类型转换,构建方法调用表达式,最后编译为可缓存的高效委托。这种方法避免了反射的运行时开销,适用于需要频繁动态调用的场景,如UI管理系统。关键点包括表达式树的核心类、构建流程以及性能优化思路。

2025-07-06 11:08:10 963

原创 动态编程入门第二节:委托与事件 - Unity 开发者的高级回调与通信艺术

本文深入探讨了C#中的**委托(Delegate)和事件(Event)**机制及其在Unity开发中的高级应用。委托作为类型安全的函数指针,允许程序在运行时动态引用和调用方法,而事件则基于委托构建了安全的发布/订阅机制,实现松耦合的消息系统。 主要内容包括: 委托基础:从自定义委托到内置的Action和Func泛型委托,以及匿名方法与Lambda表达式等简化写法 事件机制:事件如何封装委托,提供安全的发布/订阅模式,并通过实际案例展示在Unity中的应用 Unity实践

2025-07-05 15:08:19 1097

原创 动态编程入门第一节:C# 反射 - Unity 开发者的超级工具箱

摘要:C#反射机制为Unity开发提供了运行时动态获取类型信息、调用方法和创建对象的能力。通过System.Reflection命名空间的核心API(Type、MethodInfo、FieldInfo等),开发者可以实现插件系统、通用数据解析器等功能。反射典型应用场景包括动态加载代码、编辑器扩展、运行时行为修改等。Unity的Inspector窗口正是利用反射来显示组件的公共字段和属性。虽然反射功能强大,但需要注意其性能开销,建议在需要动态性和灵活性的场景下合理使用。(150字)

2025-07-04 09:19:36 828

原创 响应式编程入门教程第二节:构建 ObservableProperty<T> — 封装 ReactiveProperty 的高级用法

本文介绍了在Unity游戏开发中如何基于UniRx的ReactiveProperty扩展实现ObservableProperty类,以解决数据变化时同时获取旧值和新值的需求。文章详细解析了ObservableProperty的设计思想与实现原理,展示了其通过内部封装ReactiveProperty、记录旧值、Skip(1)过滤初始通知等机制,为订阅者提供(oldValue,newValue)回调。通过玩家血量管理的实际案例,说明了该方案如何简化状态变化处理,使代码更清晰高效。最后总结了ObservableP

2025-07-03 09:45:00 1101

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

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

2025-07-02 09:45:00 1587 1

原创 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 825

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

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

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

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

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

2025-06-22 15:06:50 1052

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

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

2025-06-20 23:13:48 920

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

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

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

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

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

2025-06-20 22:41:40 955

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

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

2025-06-20 22:32:01 1165

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

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

2025-06-10 22:00:50 401

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

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

2025-06-10 21:07:30 293

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

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

2025-06-10 21:05:50 426 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 312

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

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

2025-06-10 00:24:33 889

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

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

2025-06-09 23:49:21 698

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

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

2025-06-09 23:04:51 198

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

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

2025-06-09 22:48:36 343

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

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

2025-06-09 22:20:02 161

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

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

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

空空如也

空空如也

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

TA关注的人

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