- 博客(181)
- 问答 (1)
- 收藏
- 关注
原创 29.音效管理模块原理和作用
游戏中很多地方都会使用音乐和音效,如果每个模块都单独处理音效,会产生大量重复代码,也不方便统一管理。因此需要一个独立的,统一管理游戏中的音乐和音效。
2026-09-10 10:12:23
34
原创 24.Editor 资源加载:主要作用和基本原理
正式发布的项目通常会使用管理大部分游戏资源,以减小包体并支持热更新。但是在开发阶段频繁打包 AssetBundle 会降低开发效率,因此可以直接从 Unity 工程中加载资源,等到最终测试或发布时再改用 AssetBundle。
2026-09-09 09:39:39
204
原创 23.Resources资源加载:引用计数优化
之前的资源管理器只知道资源是否已经加载,却不知道还有多少地方正在使用它。如果直接卸载,可能导致其他使用者受到影响;如果一直不卸载,又会让无用资源长期占用内存。
2026-09-09 09:38:23
75
原创 22.Resources资源加载:同步加载优化
Resources加载过的资源会保存在内存中。再次加载同一资源时,通常会直接使用已有资源,不会重复占用一份资源内存。但是每次调用异步加载仍然会进行查找并开启协程,重复调用会产生不必要的性能开销。
2026-09-09 09:30:01
93
原创 21.Resources资源加载:异步加载优化
Resources加载过的资源会保存在内存中。再次加载同一资源时,通常会直接使用已有资源,不会重复占用一份资源内存。但是每次调用异步加载仍然会进行查找并开启协程,重复调用会产生不必要的性能开销。
2026-09-09 09:28:44
162
原创 20.Resources资源加载:基本实现
将Resources的加载和卸载方法统一封装到ResMgrResMgr由于普通 C# 类不能直接开启协程,异步操作需要通过MonoMgr执行。
2026-09-08 09:38:14
344
原创 19.资源加载模块:主要作用和基本原理
Unity 项目中可能同时使用多种资源加载方式:实际开发中可能组合使用多种加载方式。如果加载代码分散在不同系统中,会出现两个主要问题:资源加载模块主要负责:先将不同加载方式分别模块化:然后通过上层资源加载模块进行整合:调用者根据项目需求选择具体加载方式,各加载模块只负责自己对应的资源。 仍然可以用于简单项目和快速原型,但大量使用可能增加构建体积、内存占用和启动时间。当前 Unity 的 可以通过地址异步加载本地或远程资源,并自动处理资源依赖。对于需要统一资源组织和异步加载的新项目,通常优先考虑 。本节
2026-09-08 09:37:32
155
原创 17.事件中心优化:泛型参数
使用object监听方法可以直接接收Enemy3这样不需要类型转换,传递值类型时也能避免object产生的装箱和拆箱。
2026-09-08 09:36:02
180
原创 16.事件中心优化:添加参数
原来的事件只能通知监听者“敌人死亡了”,不能告诉监听者死亡的是哪个敌人。添加参数后,Enemy和Player收到事件后,就能读取死亡敌人的名称、编号等信息。
2026-09-08 09:34:25
199
原创 14.事件中心:主要作用和原理
如果怪物直接引用这些系统,对象和模块之间会互相依赖。随着系统增多,引用关系会越来越复杂,耦合度也会越来越高,不利于开发和维护。
2026-09-07 10:20:59
104
原创 13.缓存池优化:对象上限配置
这种方式要求调用者每次获取对象时都知道并传入正确的上限。表示这一类对象最多允许同时创建多少个实例。因为它是公共字段,所以可以直接在 Unity Inspector 中修改。如果由调用者传入上限,同一种对象可能在不同位置得到不同配置。传入的是相对路径,不需要扩展名。将它重新添加到列表尾部,表示该对象开始了新一轮使用。这样可以保证对象数量达到上限后不再继续实例化。达到数量上限且没有空闲对象时,会取出。创建的预制体都必须添加该组件。,调用者只需要提供资源路径。在实例化对象后获取它的。Lesson13 通过。
2026-09-07 10:20:00
84
原创 12.缓存池优化:对象上限
原对象池在空闲池中没有对象时,会不断实例化新对象。如果已经取出的对象长时间不归还,每次调用GetObj()都可能创建新对象,导致同类对象的数量没有上限。
2026-09-07 10:18:35
91
原创 11.缓存池优化:窗口布局
对象池中的对象通常不会真正销毁,而是:obj.SetActive(false),然后继续保留在场景中。当对象数量变多以后,Hierarchy 中可能出现大量失活对象。
2026-09-07 10:17:35
220
原创 10.缓存池的实现
保存不同类型的对象。Dictionary:整个柜子string:抽屉名字 / 对象类型标识Stack<GameObject>:某一类对象的缓存容器。
2026-09-07 10:16:26
600
原创 9.缓存池的作用和原理
减少 Instantiate,减少 Destroy,重复使用已有对象从而降低:内存分配、GC压力、频繁创建销毁带来的性能消耗。
2026-09-07 10:15:30
169
原创 6.单例模式:懒汉式单例
例如第一次真正使用:GameManager.Instance时,会触发类型初始化。因此不需要自己再写:lock来保护:new GameManager();这里没有:if (instance == null)如果被多个线程同时调用,仍然可能产生线程安全问题。类型初始化由 CLR 根据类型实际使用情况进行。或者根据框架需求实现自己的懒加载逻辑。两种方式解决的是不同需求。静态字段的初始化由 CLR 管理。实例由静态字段初始化完成。
2026-09-07 10:10:56
292
原创 5.单例模式问题3:多线程问题
假设线程 A 和线程 B 同时第一次访问,两个线程都可能通过:instance == null的判断,从而分别创建对象。这就破坏了单例的唯一性。因此正常情况下都运行在 Unity 主线程。如果整个 MonoBehaviour 单例只从主线程访问,就不存在多个线程同时执行。不能只给:AddData()加锁,却让其他地方直接访问集合。作用:如果单例已经创建,直接返回。,也只有一个线程能够创建对象。保证同一时刻只有一个线程进入指定代码块。需要创建对象,之后只是返回已有实例。没有使用同一个锁,仍然不安全。
2026-09-02 14:12:20
171
原创 1.non-MonoBehaviour 单例模式泛型基类
<think>我们根据提供的内容生成摘要,≤150字。内容是关于单例模式的介绍,包括非MonoBehaviour单例、泛型基类、约束等。摘要需简洁概括核心要点。注意字数限制。</think>摘要:本文介绍Unity中非MonoBehaviour单例模式,通过泛型基类Singleton<T>(约束为class、new())实现全局唯一实例。Instance属性提供统一访问入口,避免重复创建导致数据不一致。管理器继承后可直接调用,但不可用Unity生命周期,需手动初始化,并注意避免过度使用。
2026-09-02 11:29:14
473
原创 Gitlab使用入门——使用于新手小白
本文介绍了GitLab的基本使用方法,包括账户创建、项目管理、项目分享和日常操作流程。用户可通过注册免费账号或连接企业服务器创建账户,并选择新建项目或上传现有项目。创建项目时需设置项目名称和可见性级别(Public/Internal/Private)。项目可通过邀请成员或设为公开方式分享,不同权限级别对应不同操作权限。日常使用包括克隆项目、创建分支、提交修改、推送代码等基本Git操作,以及网页端的文件上传、文件夹创建和在线编辑功能。
2026-01-12 10:22:30
3612
原创 Unity百游修炼24——C#和Unity实现2D完整小项目《捕鱼达人》(附有完整项目和素材)
本文详细介绍了2D游戏开发的全过程,包括版权声明、UI设计、水波纹特效、炮台系统、鱼群生成机制和子弹发射功能。重点讲解了鱼群随机生成算法、炮台鼠标跟随旋转、子弹发射销毁等核心功能的实现方法,提供了完整的C#代码示例。文章采用模块化设计思路,从场景搭建到具体功能实现,系统性地展示了2D游戏开发的完整流程和技术要点。
2025-10-24 19:22:08
2068
原创 Unity物理系统之射线检测详解
射线检测是Unity中常用的物体相交判断方法,可以通过指定起点和方向发射射线,检测与碰撞器的相交情况。射线对象Ray由起点和方向向量构成,可通过Physics类中的Raycast函数进行检测,包括基本碰撞判断、获取单个物体信息(RaycastHit)和多个物体信息(RaycastAll)。实际应用包括鼠标点击检测、物体拖拽等,使用时需注意距离参数和层级遮罩的设置。示例代码展示了如何实现鼠标点击创建弹孔特效以及拖动立方体的功能。
2025-10-22 13:45:07
662
原创 Unity物理系统之范围检测详解
本文介绍了Unity中的碰撞检测与范围检测技术。碰撞检测需要刚体和碰撞器组件,分为物理碰撞和触发检测两种方式。范围检测用于瞬时攻击判定,要求被检测对象具有碰撞器,提供盒状、球形和胶囊三种检测API,通过中心点、尺寸等参数确定检测范围,并支持层级筛选。文章还讲解了层级编号的二进制表示方法,最后通过一个练习题演示了三种范围检测的实现:按J键执行立方体前方检测,K键执行前方5米胶囊检测,L键执行10米半径球形检测,检测结果会输出范围内"Monster"层对象的名称。
2025-10-22 11:23:52
967
原创 Unity画线功能LineRenderer详解附有案例
Unity中LineRenderer组件详解 LineRenderer是Unity提供的画线组件,用于在场景中绘制线段,常用于攻击范围、武器红外线等场景。其参数包括编辑模式(添加/编辑点)、线段属性(循环、宽度、颜色、对齐方式等)、光照设置(阴影、探针)和坐标系选择。可通过代码动态创建线段,设置位置、材质和光照效果。示例练习包括绘制圆形轨迹和鼠标移动轨迹,通过设置顶点位置和数量实现。该组件支持丰富的自定义选项,适用于多种可视化需求。
2025-10-21 22:01:52
1651
原创 Unity百游修炼23——C#和Unity实现2D完整小项目《露娜历险记》(含完整项目流程)
本文详细介绍了《露娜幻想》游戏开发过程,包含场景搭建、角色控制、动画设计、UI系统等核心模块的实现。主要内容包括:1.使用Unity引擎搭建2D游戏场景,配置地图层级和角色碰撞体;2.实现WASD移动控制与Shift键跑步功能,开发8方向动画状态机;3.设计血瓶收集、攀爬跳跃等交互系统;4.创建虚拟摄像机跟随及UI血条显示;5.集成DOTween插件实现平滑跳跃动画。项目采用模块化设计,包含完整的代码示例和参数配置说明,所有素材均声明版权合规。最终成品可通过网盘获取完整源码。
2025-10-21 17:42:14
1662
原创 Unity场景异步切换详解
本文介绍了Unity场景加载的两种方式:同步加载和异步加载。同步加载通过SceneManager.LoadScene实现,但会导致主线程阻塞、画面卡顿且无法显示进度。异步加载通过SceneManager.LoadSceneAsync实现,分为事件回调和协程两种方式:1)事件回调方式简单直观,适合加载后处理逻辑;2)协程方式更强大,可实时更新进度条,支持分阶段加载(场景、资源、UI等),通过AsyncOperation.progress获取进度并结合业务逻辑自定义进度显示。关键点包括使用DontDestroy
2025-10-13 14:20:36
1431
原创 Unity中Resources资源动态加载知识点详解
本文总结了Unity中的特殊文件夹路径获取及资源加载方法。主要包含:1)工程路径、Resources、StreamingAssets等特殊文件夹的作用和获取方式;2)Resources资源同步加载的通用方法,包括预设体、音效、文本等不同类型资源的加载;3)异步加载的实现方式及注意事项;4)资源卸载的两种方法。重点介绍了Resources文件夹的特点和使用规则,包括资源加载、内存管理及性能优化等内容,为Unity开发中的资源管理提供了实用指导。
2025-10-13 13:51:05
1598
原创 MonoBehavior中协程详解
Unity支持多线程但新线程无法访问Unity对象,需注意关闭。协程是"假"多线程,通过分时执行避免主线程卡顿,常用于异步加载等场景。使用需继承MonoBehaviour,返回IEnumerator类型,通过yield return控制执行时机。协程与线程不同,它依附于主线程分步执行。可设置不同yield return条件(如下一帧、等待秒数等),并受对象激活状态影响。文中提供了协程实现计秒器和批量创建立方体(分帧处理防卡顿)的示例代码。
2025-10-10 10:11:37
565
原创 Unity中MonoBehavior类中的延迟函数Invoke详解(含案例)
Unity中的延迟函数通过Invoke和InvokeRepeating实现,可设置延迟时间或重复调用。使用时需传入函数名字符串,但无法直接传参。通过CancelInvoke可取消延迟执行,IsInvoking可检测延迟函数状态。需注意:对象失活不影响延迟函数执行,但对象销毁或脚本移除会导致延迟函数终止。
2025-10-09 20:45:41
479
原创 2025Unity中的核心数学工具(三)四元数(穿插Unity实战相关案例)
本文主要探讨了四元数在3D旋转中的应用及其与欧拉角的比较。文章首先分析了欧拉角的优缺点:直观易用但存在万向节死锁问题。接着详细介绍了四元数的构成原理,说明其通过轴-角对表示旋转,能有效避免万向节死锁。在Unity实现方面,讲解了Quaternion结构体的使用方法、四元数与欧拉角的相互转换,以及四元数插值运算和LookRotation功能。最后通过飞机子弹发射案例(单发、双发、扇形、环形)展示了四元数的实际应用,演示了四元数相乘实现旋转叠加的效果。全文系统性地阐述了四元数在3D图形编程中的优势和应用场景。
2025-10-09 19:37:56
915
空空如也
java中大小写字目相互转换
2023-03-08
c语言瑟瑟发抖,在线求解,详解
2022-09-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅