- 博客(103)
- 收藏
- 关注
原创 【Unity性能优化——Stats面板】
面板是一个实时显示当前游戏视图(Game View)性能数据的强大工具。它提供了关于渲染、音频等关键指标的概览,帮助我们快速定位性能问题的方向。更准确的Draw Call衡量指标。每次SetPass Call都可能意味着一次状态切换(如切换Shader、纹理),代价高昂。这是一个重要的参考指标,数量过高会严重影响GPU性能,尤其是在移动设备上。当前帧中有多少物体在投射阴影。阴影计算开销很大,需要控制数量和质量。可见的蒙皮网格数量。这部分信息量最大,是图形性能分析的重中之重。正在播放的动画数量。
2025-09-15 09:13:58
1320
原创 【性能优化需要关注的参数——Batches】
文章摘要: Batches(批处理/绘制调用批次)指Unity每帧向GPU发起的绘制调用次数,直接影响性能。优化核心是减少Batches,方法包括:静态批处理(合并静态物体)、动态批处理(自动合批小物体)、GPU实例化(批量渲染相同物体)和SRP Batcher(优化数据提交)。关键原则是共享材质/纹理,使用图集化、LOD和遮挡剔除等技术。通过Profiler诊断合批失败原因(如材质不同),并采用分层优化策略:设计简化→选择合批技术→针对性调试,以降低CPU-GPU通信开销,提升渲染效率。
2025-09-13 10:58:47
962
原创 【Unity 性能优化之路——渲染流程(1)】
本文通过电影拍摄的类比,深入浅出地讲解了Unity渲染流程及优化方法。渲染优化需要平衡CPU、GPU、内存和I/O四大性能支柱,关键在于减少Batches(绘制指令包)和SetPass Calls(渲染状态切换)。核心优化策略包括:使用相同材质、纹理图集、批处理技术、模型优化、LOD和遮挡剔除等。实践时需先建立性能基线,用Profiler定位瓶颈,再针对性优化并验证效果。最终目标是让CPU高效调度,GPU专注渲染,减少状态切换,提升整体性能。
2025-09-13 10:58:08
687
原创 【Unity 性能优化之路——概述(0)】
本文全面介绍了Unity性能优化的系统方法,强调性能优化是CPU、GPU和内存三方面的协同优化。文章提出"木桶理论"观点,指出游戏性能取决于最薄弱的环节。详细列举了CPU优化(脚本、物理、UI、动画)、GPU优化(渲染、填充率、着色器)和内存优化(资源管理、生命周期、GC)的具体策略。最后强调性能优化应基于Profiler数据分析,确立合理目标,通过持续迭代来平衡各模块性能。全文提供了完整的优化检查流程和实用建议,帮助开发者建立系统性的性能优化思维。
2025-09-13 09:15:49
893
原创 【Unity UGUI 自动布局组(12)】
Unity自动布局系统简介 Unity的自动布局系统(Auto Layout)通过布局元素(Layout Element)和布局控制器(Layout Controller)协同工作,简化UI元素的排列管理。主要组件包括水平/垂直/网格布局组、内容大小适配器等,广泛应用于菜单、背包、商店等游戏界面。系统根据最小/首选/弹性尺寸参数智能计算元素布局,支持动态内容调整和分辨率适配,显著提升开发效率。合理使用布局优先级和参数设置可解决空间分配冲突,但需注意复杂嵌套布局可能带来的性能开销。
2025-09-13 09:13:27
826
原创 【unity无限滚动列表_手动计算布局+对象池】
本文详细介绍Unity高性能无限滚动列表的实现方案。针对传统方案在万级数据量时的性能瓶颈,提出基于对象池复用和动态计算的优化方案。核心包括:通过数学公式精准计算单元格位置,仅实例化可视区域内的项,滚动时动态复用并更新数据。实现关键点有容器尺寸计算、单元格定位算法和滚动复用机制。优化后性能显著提升,内存占用恒定,万级数据滚动可达60FPS。该方案适用于背包、排行榜等需要展示大量数据的场景。
2025-09-12 09:15:59
2099
原创 【Unity UGUI 交互组件——InputFild(TMP版本)(11)】
Unity InputField组件是UGUI系统中用于文本输入的核心交互控件,主要由四个关键部分组成:InputField根节点(处理输入逻辑和验证)、Text Area(控制可视区域)、Placeholder(显示提示文本)和Text(渲染用户输入内容)。其Inspector面板提供丰富的参数配置,包括文本类型限制(如数字、邮箱、密码等)、行类型控制(单行/多行)、键盘类型适配(移动端优化)以及字符验证规则,可灵活适应登录框、聊天系统、表单等多样化的输入场景。通过合理配置这些参数,开发者能快速实现符合项
2025-09-12 09:12:15
1444
原创 【Unity UGUI 交互组件——Dropdown(TMP版本)(10)】
本文介绍了Unity UGUI中Dropdown组件的实现方法。Dropdown由根节点、Label文本、Arrow箭头和Template模板四部分组成,其中Template在运行时动态生成下拉列表。文章详细解析了每个组件的功能参数,包括Dropdown的交互设置、选项配置、事件监听等核心功能,以及Label、Arrow和Template的层级结构与实现原理。同时提供了脚本控制动态选项、样式特效优化等实用技巧,并强调了性能注意事项,如利用对象池处理大量选项等。该组件适用于游戏中的背包分类、语言设置等场景,通
2025-09-11 11:22:08
1778
原创 【Unity UGUI 交互组件——ScrollView(9)】
本文介绍了Unity中的ScrollView组件及其核心成员ScrollRect、Viewport和Content。ScrollView由ScrollRect、Mask、Content和Scrollbar组成,用于在有限窗口内显示超长内容。ScrollRect负责滚动逻辑,Viewport作为可视窗口,Content存放实际内容。文章详细讲解了ScrollRect的参数配置、应用场景(如聊天框、地图等)以及代码控制方法,强调ScrollView是官方提供的"内容容器"解决方案,适用于各类
2025-09-11 11:20:05
769
原创 【Unity UGUI 交互组件——Scrollbar(8)】
本文介绍了Unity UGUI中的Scrollbar组件,主要应用于视图滚动场景(如聊天框、地图查看器等)。Scrollbar由根对象、Sliding Area和Handle三部分组成,通过Direction、Value、Size等参数控制滚动方向和范围。与Slider不同,Scrollbar的Handle大小可变,值为0-1表示滚动位置。文章还提供了脚本控制示例和常见用法,如垂直文字滚动、水平地图滚动等。Scrollbar通常与ScrollRect配合使用,是视图滚动的核心组件。
2025-09-10 09:04:25
1044
原创 【Unity UGUI 交互组件——Slider(7)】
本文介绍了游戏开发中滑动条(Slider)的核心构成与应用场景。滑动条由Slider根节点、背景、填充区域、填充条、滑块区域和滑块6个部件组成,可通过删减部件实现纯进度条或纯输入条效果。文章详细解析了Slider组件的关键属性配置,包括方向控制、数值范围、整数模式、事件回调等,并列举了血条、音量调节、难度选择等典型应用案例。此外,还介绍了不同过渡模式(颜色渐变、图片切换、动画)的实现方式,为游戏UI开发提供了实用的技术参考。
2025-09-10 09:03:26
1370
原创 【Unity UGUI 交互组件——Button(5)】
Unity UGUI Button组件是一套完整的交互解决方案,整合了视觉表现、状态反馈和输入响应。它提供四种过渡模式:None(无效果)、Color Tint(颜色变换)、Sprite Swap(图片切换)和Animation(动画效果)。Color Tint是最常用的默认模式,通过颜色变化实现状态反馈;Sprite Swap适合需要更换图标的场景;Animation则用于需要动态效果的交互。Button组件还支持导航设置、点击事件绑定等功能,是构建游戏UI的基础模块,开发者可根据不同交互需求选择合适的过
2025-09-09 14:47:35
1052
原创 【Unity UGUI 交互组件——Toggle&ToggleGroup(6)】
**Unity UGUI Toggle组件提供了多种视觉过渡模式(None、Color Tint、SpriteSwap、Animation),用于实现二元状态切换交互。None模式关闭所有视觉反馈仅保留逻辑功能;Color Tint通过颜色变化表示状态,适合简单UI;SpriteSwap直接替换不同状态的精灵图,适用于需要明显视觉差异的场景;Animation模式则通过动画控制器实现复杂过渡效果。开发者可根据性能需求和视觉要求选择合适模式,通过调整Interactable、Is On、Group等参数控制T
2025-09-09 14:47:10
1173
原创 【Unity UGUI 可视组件——Mask&RectMask2D(4)】
本文对比了Unity中的Mask和RectMask2D两种遮罩组件。Mask支持任意形状遮罩但性能中等,需依赖图形;RectMask2D仅支持矩形裁剪但性能更高,支持边缘柔化且无需图形。典型应用场景包括:滚动列表(RectMask2D)、头像裁剪(两者皆可)和特殊形状遮罩(Mask)。性能优化建议:移动端优先使用RectMask2D,帧率敏感场景慎用Mask。核心选择原则:矩形裁剪用RectMask2D,异形镂空用Mask。
2025-09-05 10:12:59
326
原创 【Unity UGUI 可视组件——Text(TMP)(2)】
摘要: 本文介绍了Unity中TextMeshPro(TMP)文本组件的核心功能与设置方法。TMP自2018.3版本起成为Unity官方推荐的文本解决方案,替代传统Text组件。文章详细解析了TMP的四大设置模块:基础设置(支持RTL语言和富文本样式库)、字体设置(包含字体资源、材质预设和8种字体样式)、字体尺寸与颜色控制(支持自动缩放和顶点着色),以及特色功能Color Gradient(提供4种渐变模式和多色配置)。重点说明了如何创建字体资源、材质预设和渐变预设,并附代码示例演示动态修改渐变效果。通过系
2025-09-05 10:12:29
1611
原创 Unity UGUI 可视组件图片——Image&RowImage(3)
Unity uGUI中的Image和RawImage组件是构建2D UI的核心元素。Image适用于静态UI元素,支持九宫格拉伸、平铺填充等功能,并能与Sprite Atlas优化合批性能;RawImage则专为动态内容设计,可直接显示RenderTexture等实时纹理。两者都支持颜色调整、射线检测和遮罩功能,但Image更注重静态UI的呈现优化,而RawImage更适合视频、相机画面等动态内容展示。合理选用这两个组件能有效提升UI开发效率和运行性能。
2025-09-04 10:20:21
928
原创 【Unity C# 完整命名参考】
本文总结了Unity C#开发的完整命名规范,主要包含: 基本命名规则: 类/结构体使用帕斯卡命名法 接口以"I"前缀开头 方法采用动词+帕斯卡命名法 私有字段使用下划线前缀+驼峰命名法 Unity特有元素: 组件引用使用下划线前缀 预制件添加"Prefab"后缀 标签/层定义为全大写常量 特殊场景: 单例模式使用"Instance"属性 状态机添加"State"后缀 协程方法以"Coroutine"结尾 规
2025-09-04 10:19:28
1032
原创 【Unity UGUI Canvas(画布)(1)】
Unity UGUI Canvas组件三种渲染模式摘要 Unity UGUI系统中的Canvas组件支持三种渲染模式: 屏幕空间-覆盖(Screen Space-Overlay):UI直接绘制在屏幕最上层,性能最优,适合传统2D界面。特点包括自动适配屏幕、无场景交互、支持多Canvas分层。 屏幕空间-摄像机(Screen Space-Camera):UI渲染到指定摄像机的虚拟平面,可与3D场景产生遮挡关系,适合需要光影效果或简单3D交互的UI。 世界空间(World Space):Canvas完全作为3D
2025-09-03 14:36:34
1565
原创 【Unity UGUI介绍(0)】
Unity UGUI是Unity官方UI系统,2014年随Unity 4.6推出后逐渐成为主流UI解决方案。本文介绍了UGUI的核心架构(Canvas、RectTransform等组件)、渲染机制和开发技巧,包括性能优化、自适应布局和交互实现。虽然Unity正转向UIToolkit,但UGUI仍是当前游戏开发中不可或缺的工具,尤其适合VR/AR和2D游戏UI。学习UGUI不仅有助于维护现有项目,也为过渡到新技术打下基础。文章提供了从基础到高级的学习路线图,帮助开发者系统掌握这一重要UI框架。
2025-09-03 14:35:33
977
原创 【Unity UGUI 控件背后的 Selectable 射线】
UGUI控件的点击交互并不依赖Button组件,而是通过Selectable基类+EventSystem实现。Selectable自动开启射线检测并实现事件接口,派生控件只需重写对应方法即可响应交互。例如Dropdown通过背景Image接收点击,触发OnPointerClick显示菜单。Slider、Toggle等控件同样基于这套机制,无需额外挂载Button。只有需要过渡动画或可视化事件时才需使用Button组件。简言之,Selectable是UGUI的“隐形按钮”,EventSystem和Raycas
2025-08-31 09:48:18
988
原创 【unity 中的RectTransform组件中的RectTransform.sizeDelta理解】
摘要:RectTransform.sizeDelta是Unity UI系统中控制元素大小的关键属性,其行为取决于锚点设置。当锚点重合时,它直接定义元素宽高(像素);锚点分离时,它表示相对于锚点区域的尺寸偏移量。典型用途包括固定大小元素(如按钮)和动态布局调整(如边距)。理解锚点配置是正确使用sizeDelta的前提,需注意其单位为像素,与缩放属性localScale不同。合理运用锚点和sizeDelta可实现响应式UI设计。
2025-08-06 15:31:56
858
原创 【7.5 Unity AssetPostprocessor】
Unity AssetPostprocessor 扩展点详解 AssetPostprocessor 是 Unity 资源导入管道的核心扩展机制,提供 20+ 种预处理/后处理回调方法。开发者可通过继承该类,在资源导入前后插入自定义逻辑,实现自动化资源处理流程。主要特性包括: 全类型覆盖:支持纹理、模型、音频、动画、材质等全部资源类型 双阶段处理:提供 OnPreprocess* 预处理和 OnPostprocess* 后处理两类回调 参数丰富:各回调方法提供对应资源类型的专属参数对象 批量处理:通过 OnP
2025-08-02 17:43:25
1152
原创 【unity组件_Transform 】
Unity Transform组件核心功能解析 Transform是Unity中最基础且必备的组件,负责控制GameObject的位置、旋转、缩放和父子层级关系。作为所有游戏对象的强制组件,它定义了物体在3D空间中的状态。 核心特性: 提供Position/Rotation/Scale三大基础变换属性 支持世界坐标和局部坐标两种坐标系 通过父子关系建立对象层级系统(子对象继承父对象变换) 提供多种操作方式:场景视图工具、检视面板输入、脚本API控制 关键知识点: 父子关系的变换继承遵循特定数学公式 非均匀缩
2025-08-02 10:19:08
1577
原创 【编辑器开发与拓展常用类EditorGUILayout】
EditorGUILayout是Unity编辑器扩展的核心类,用于创建自动布局GUI界面。它提供了一系列静态方法来绘制编辑器风格的控件,自动处理布局和序列化集成。主要特点包括:自动计算控件位置、统一编辑器风格、与SerializedProperty无缝协作。使用时应遵循序列化工作流(Update-绘制-Apply),注意性能优化和合理组织控件组。与EditorGUI和GUILayout相比,EditorGUILayout更适合大多数编辑器扩展场景,提供简单易用的自动布局功能。常见问题包括控件重叠和序列化修改
2025-08-01 08:09:35
1209
原创 【第四章自定义编辑器窗口_Game窗口中的GUI_运行时检视窗口(12/12)】
摘要:本文介绍了实现运行时检视窗口的核心代码架构,定义了一个IComponentGUIInspector接口和ComponentGUIInspector抽象基类。该架构支持在检视窗口中绘制游戏组件属性,提供文本显示、开关控件、整型输入等多种UI控件的绘制方法。基类封装了常用UI控件的标准实现,包括带缩进和固定宽度的标签、文本显示、开关切换以及整数值输入等功能,为具体组件的可视化编辑提供了统一的基础框架。
2025-08-01 08:07:31
315
原创 【第四章自定义编辑器窗口_Game窗口中的GUI_运行时层级窗口(11/12)】
本文介绍了在Unity运行时创建自定义层级窗口的方法。该窗口可以显示场景中游戏对象的层级关系,类似于编辑器的Hierarchy视图。主要实现包括: 定义HierarchyGUIWindowItem类表示层级项,包含Transform引用、子项列表、展开状态和层级深度等信息,并提供递归绘制方法。 实现HierarchyGUIWindow窗口组件,包含展开/收起两种视图模式,支持对象选择和拖拽功能。 通过递归收集场景中所有根对象及其子对象构建完整层级结构,并在GUI中可视化显示。 使用GUILayout进行窗口
2025-07-31 11:11:31
274
原创 【第四章自定义编辑器窗口_Game窗口中的GUI_运行时控制台窗口(10/12)】
本文介绍了一个简易Unity控制台窗口的实现方案。该控制台能够捕获并显示运行时日志信息,支持在编辑器和非编辑器环境下运行。主要功能包括:1) 实时显示日志内容、警告和错误;2) 提供日志分类统计和筛选功能;3) 可调整窗口大小和位置;4) 支持日志搜索和时间显示。代码通过Application.logMessageReceived事件捕获日志,并使用IMGUI绘制界面。需要注意在编辑器模式下可能出现的布局错乱问题,建议添加运行环境检查以避免该问题。控制台还实现了日志缓存管理,当超过最大缓存数量时会自动清理最
2025-07-31 11:10:32
192
原创 【Unity AssetModificationProcessor介绍】
AssetModificationProcessor 是 Unity 编辑器的核心扩展接口,用于在资源生命周期的关键节点插入自定义逻辑。它提供四个主要回调方法:OnWillCreateAsset(创建资源时)、OnWillSaveAssets(保存前)、OnWillMoveAsset(移动/重命名前)和OnWillDeleteAsset(删除前)。通过实现这些方法,开发者可以自动添加脚本注释、强制命名规范、防止误删、优化资源等。典型应用包括为新建脚本自动添加头部注释模板,以及在移动包含脚本的文件夹时提供确认
2025-07-30 07:25:09
1561
原创 第四章自定义编辑器窗口_扩展默认的编辑器窗口_扩展Project窗口(9/12)
本文介绍了如何扩展Unity的Project窗口,实现资源依赖计数器功能。通过自定义CustomProjectWindow类,利用EditorApplication.projectWindowItemOnGUI事件,在资源项右侧显示其依赖资源数量。核心代码使用AssetDatabase.GetDependencies获取依赖关系,并通过GUI绘制计数标签。该扩展有助于评估资源复杂度、优化依赖关系、排查问题,但需注意可能对大型项目产生性能影响。文中还包含技术解析、功能示意图和实际应用建议,为开发者提供了实用的
2025-07-30 07:24:23
702
原创 【第四章自定义编辑器窗口_扩展默认的编辑器窗口_扩展Hierarchy窗口(8/11)】
本文介绍了如何扩展Unity编辑器默认的Hierarchy窗口,通过自定义代码在游戏对象右侧显示其组件图标。核心实现包括:1)使用InitializeOnLoad特性自动注册绘制事件;2)通过事件回调获取游戏对象实例及组件列表;3)为每个组件获取对应图标并计算显示位置;4)从右向左排列图标并添加悬停提示。该扩展可直观展示对象组件、检测脚本丢失问题,但需注意性能影响和版本兼容性(建议2018.3+)。代码实现了组件图标可视化、类型识别和顺序显示等功能。
2025-07-29 08:37:24
367
原创 对Event.current.type介绍
Event.current.type是Unity编辑器GUI系统中的关键属性,用于识别当前事件类型(如鼠标点击、键盘输入等)。它属于UnityEngine.EventType枚举,常见于OnGUI()等编辑器扩展方法中。主要用途包括:检测鼠标/键盘操作(MouseDown、KeyDown)、处理拖拽事件(DragUpdated、DragPerform)、控制界面重绘(Repaint)等。使用时需注意及时调用Event.current.Use()标记事件已处理,避免事件二次触发。该属性在创建交互式编辑器工具、
2025-07-29 08:17:11
624
原创 【第六章可视化辅助工具】
【摘要】Unity的Gizmos工具提供了一组可视化调试功能,用于在Scene视图中绘制几何图形、图标和边界等。常用函数包括DrawWireSphere(绘制线框球体)、DrawLine(绘制直线)、DrawCube(绘制实心立方体)等,这些函数通过指定位置、尺寸等参数来标记游戏对象或区域。使用时可通过Gizmos.color控制颜色,并在OnDrawGizmos()或OnDrawGizmosSelected()回调中调用。示例展示了如何用Gizmos辅助调试相机避障功能,通过绘制相机位置变化来直观展示避障
2025-07-28 08:53:51
1477
原创 【Unity 中自定义组件视图显示 与 Unity 自带组件视图显示对比】
Unity中自定义组件视图和自带组件视图的主要区别在于灵活性和实现方式。自定义视图通过继承Editor类并重写OnInspectorGUI(),可完全控制UI布局与交互,支持按钮、滑动条等复杂控件,适用于需要工具按钮或可视化编辑的场景,但需额外编码。而自带视图自动显示序列化字段,适用于简单数据展示,灵活性差但无需额外代码。自定义视图扩展性强但需处理多选对象逻辑,而自带视图默认支持多对象编辑。
2025-07-28 08:51:43
224
原创 unity开发中Hash、Queue、LinkedList简单介绍
摘要: Unity开发中,HashSet、Queue和LinkedList三种数据结构能高效解决特定问题: HashSet 实现O(1)极速存在性检查(如成就系统),支持自动去重和集合运算; Queue 确保先进先出的事件顺序(如AI指令队列),适合时序敏感场景; LinkedList 在动态增删(如技能连招链)时性能远超List,支持双向遍历。性能测试显示,LinkedList在中部插入/删除比List快18000倍,HashSet查找比List快42000倍。根据需求组合使用可优化游戏系统性能,如Has
2025-07-27 16:22:39
748
原创 【在Unity游戏开发中Dictionary、List介绍】
在Unity游戏开发中,Dictionary和List是最核心的两种数据结构,它们各自有优势和应用场景。
2025-07-27 16:16:17
667
原创 Unity GenericMenu 类详解
适用场景:创建基本功能菜单项参数说明::可包含文本和图标:控制左侧勾选状态:无参数回调方法2. AddItem - 带参数菜单项适用场景:动态生成的菜单项优势:可传递上下文数据典型用途:对象列表操作3. AddDisabledItem - 禁用菜单项适用场景:条件未满足的功能项视觉提示:灰色显示,不可交互最佳实践:配合条件判断使用4. AddSeparator - 菜单分隔符路径规则::根菜单分隔符:指定子菜单分隔符作用:视觉分组,提高可读性
2025-07-26 19:42:47
425
原创 【Unity Gizmos 介绍】
文章摘要: Unity Gizmos 是强大的可视化调试工具,通过在场景视图中绘制几何图形、路径和逻辑边界,帮助开发者直观呈现代码逻辑。核心方法包括每帧绘制的OnDrawGizmos()和选中时触发的OnDrawGizmosSelected(),支持颜色、矩阵等全局状态设置,并提供立方体、球体、网格等基础绘制API。Gizmos 适用于碰撞范围、路径调试等场景,与交互式工具Handles形成互补,后者常用于编辑器扩展开发。优化建议包括数据缓存、矩阵复用和条件编译。典型应用涵盖路径系统可视化、贝塞尔曲线绘制及
2025-07-25 08:59:55
833
原创 Unity中EditorPrefs与PlayerPrefs对比分析
摘要: Unity中的EditorPrefs和PlayerPrefs分别用于编辑器配置与游戏运行时数据持久化。EditorPrefs存储编辑器工具参数(如窗口布局),仅支持编辑器模式,数据保存在系统注册表或plist文件中;PlayerPrefs存储玩家设置(如音量、进度),支持多平台运行,但数据为明文存储(Base64编码)。两者均需注意:EditorPrefs的DeleteAll()可能误删编辑器配置,PlayerPrefs崩溃时需手动Save()防止数据丢失。敏感数据建议加密后存储,根据场景选择工具—
2025-07-25 08:51:16
744
原创 第四章自定义编辑器窗口_创建and打开and自定义窗口(1~3/12)
本文介绍了Unity中自定义编辑器窗口的创建与使用方法,主要包含以下内容: 对比了四种窗口类型的特点: EditorWindow:持久化工具面板,支持完整UI PopupWindow:临时浮层控件,自动关闭 GenericMenu:动态右键/下拉菜单 ScriptableWizard:已弃用的向导流程 详细讲解了EditorWindow的创建步骤: 继承EditorWindow类 使用MenuItem提供窗口入口 通过GetWindow方法创建窗口实例 设置窗口大小限制 重点介绍了OnGUI等关键回调方法及
2025-07-24 08:19:07
869
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅