随笔分类 - Unity3D
摘要:最近碰到Unity编辑器偶尔抽风,明明代码都正常的,编译却有个空报错,导致策划/美术有时候需要重启Unity,有时候需要关掉unity+删除Library/AssemblyScript目录再开unity才正常(程序可以任意代码加个注释触发Unity编译之后也正常)。于是搞了个编辑器上重新编译脚本的功
阅读全文
摘要:在 Unity 中,使用 AssetBundle 加载图集(Atlas)并获取其中的所有 Sprite 图片,通常需要以下步骤: 1. 打包图集到 AssetBundle 首先,确保你的图集(Atlas)已经被打包到 AssetBundle 中。图集通常是一个包含多个 Sprite 的纹理(Text
阅读全文
摘要:探讨 Unity 实时多人游戏的现状,不同游戏类型中的不同网络架构。 网络架构模式 游戏开发者使用各种网络架构模式来确保多人游戏中玩家之间可靠且快速的互动。每种模式都有其自身的优缺点,选择合适的模式取决于您正在使用的特定游戏类型和互动场景。 在本节中,我们将讨论以下模式:锁步、回滚、快照插值和延迟补
阅读全文
摘要:要在 Android 设备上使用 Visual Studio 调试 Unity 项目并设置断点,你可以按照以下步骤进行配置。通过这个调试方式,你可以实时调试 Unity 应用,查看变量的状态,进行断点调试,从而更好地发现和解决问题。 前提条件 已安装 Unity 和 Visual Studio:你需
阅读全文
摘要:`adb` 直接安装 `.aab` 文件是不支持的,因为 `.aab`(Android App Bundle)是针对 Google Play 分发的格式,并不能像 `.apk` 那样直接安装到设备上。`.aab` 文件本质上是一个容器,Google Play 使用它来生成设备特定的 `.apk` 文
阅读全文
摘要:如图,生成Voronoi图形,代码如下。 using UnityEngine; using Unity.Mathematics; using Unity.Jobs; using Unity.Collections; using Unity.Profiling; [ExecuteInEditMode]
阅读全文
摘要:Unity2022.3.20之后,可以使用异步克隆,正如前面一篇文章《Unity 2022.3.20f1新功能,异步实例化预制体Object.InstantiateAsync》说明的那样,常规的使用携程方式异步克隆,但如今await / async写法如此简单方便,肯定就不想放IEnumerator
阅读全文
摘要:如何试用 TransformAccessArray | 添加/移除 Transform 到 TransformAccessArray中执行 以下是寻找最近目标的示例。 using System.Collections.Generic; using UnityEngine; using UnityEn
阅读全文
摘要:JobSystem测试性能较低原因: 每帧重新构建整个 TransformAccessArray 每帧重建整个 NativeArray 数据 但我们通常都是动态添加删除Transform,无法做到静态。下面是解决问题的一些思路跟示例。 仅使用 TransformAccessArray.Allocat
阅读全文
摘要:在游戏开发中,经常需要批量设置图片的格式为Sprite类型,手动设置太麻烦,下面的编辑器脚本实现选中文件夹右键/Texture/SetAllImagesToSpriteType实现批量设置图片格式,具体格式参数可自行定义 using System; using System.IO; using Un
阅读全文
摘要:1、编写一个死循环方法,然后运行调试vs using UnityEngine; public class DeadLoop : MonoBehaviour { // Start is called before the first frame update void Start() { DeadLo
阅读全文
摘要:本节将详细介绍在收集性能分析数据之前不应使用的优化。可能的原因是这些优化在实现时非常耗费精力,在提高性能的同时可能会损害代码整洁性或可维护性,或者解决的可能仅仅是特定的范围内才存在的问题。 多维数组与交错数组 如该 StackOverflow 文章所述,遍历交错数组通常比遍历多维数组更高效,因为多维
阅读全文
摘要:Unity中Batching大致可以分为StaticBatching,DynamicBatching,SRPBatching与GPUInstancing四大类,但在使用时我们经常会遇到合批失败的情况,这里汇总了四大类的合批使用限制与合批失败的关键错误信息. Static Batching的限制 额外
阅读全文
摘要:使用Profiler 按照以下步骤开始使用 Unity Profiler: 在进行分析时,必须使用开发版本。File > Build Settings > Development Build。 勾选Autoconnect Profile(可选)。 注意:Autoconnect Profile会增加初
阅读全文
摘要:Unity中有两种分析内存的方法: Memory Profiler :内置的分析器,提供内存使用的基本信息。 Memory Profiler package:将package添加到项目中,更详细地分析内存使用情况。可以存储和比较快照查找内存泄漏,查看内存布局以查找内存碎片问题。 确定物理RAM限制
阅读全文
摘要:设置每帧时间预算 帧率(fps)并不是衡量游戏稳定体验的理想指标。考虑以下情况:在运行时的前0.75s内渲染了59帧。然后接下来的1帧需要0.25s才能渲染完毕。虽然是60fps,但实际上会让玩家感觉卡顿。 这是需要设置帧时间预算的重要原因之一。这为您提供了一个目标,在对游戏进行分析和优化时可以朝着
阅读全文
摘要:性能分析工作流对于游戏开发是“必备”的,从基本的三方面开始: 在修改之前分析:建立基准线 在开发过程中分析:确保修改不会影响性能 在修改后分析:证明修改产生了预期效果 分析工具是开发者的实用工具之一,可以帮助开发者定位代码中的内存问题和性能瓶颈,也能帮助了解Unity引擎底层的运行。 Unity提供
阅读全文
摘要:字符串和文本 字符串和文本的处理不当是 Unity 项目中性能问题的常见原因。在 C# 中,所有字符串均不可变。对字符串的任何操作均会导致分配一个完整的新字符串。这种操作的代价相对比较高,而且在大型字符串上、大型数据集上或紧凑循环中执行时,接连不断的重复的字符串可能发展成性能问题。 此外,由于 N
阅读全文
摘要:与 CPU 渲染相比,GPU 实例化可带来巨大的性能提升。如果希望粒子系统渲染__网格__粒子(而不是使用渲染__公告牌__粒子的默认渲染模式),则可使用实例化功能。 为了能够对粒子系统使用 GPU 实例化,请执行以下操作: 将粒子系统的渲染器模式设置为 Mesh 对支持 GPU 实例化的渲染器材质
阅读全文
摘要:了解托管堆 许多 Unity 开发者面临的另一个常见问题是托管堆的意外扩展。在 Unity 中,托管堆的扩展比收缩容易得多。此外,Unity 的垃圾收集策略往往会使内存碎片化,因此可能阻止大型堆的收缩。 托管堆的工作原理及其扩展原因 “托管堆”是由项目脚本运行时(Mono 或 IL2CPP)的内存管
阅读全文
浙公网安备 33010602011771号