![](https://img-blog.csdnimg.cn/9258437306764e1fa6fc89b8b6a191ef.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Unity
文章平均质量分 80
以Unity学习中遇到的各种问题、开发总结为主。
魔术师Dix
API Caller
展开
-
【Unity】位图字体制作工具:蒲公英
一般来讲,如果需要制作位图字体,一般是使用 BMFont 这种第三方工具:然而这个工具对于非程序员来说,操作起来较为繁琐困难。每次美术修改了字体之后,需要重新导出,而且还要在Untiy中做数据转换,最后才能在Untiy中看到字体。这里为了方便工作流,制作了一个一键导出的 Unity 内置位图字体生成工具:蒲公英。摸鱼小分队 / Unity位图生成工具:蒲公英 · GitCodeUnity位图生成工具:蒲公英 直接在Unity中生成位图字体,不需要再使用BMEditor。原创 2024-05-05 13:50:41 · 648 阅读 · 0 评论 -
【Unity】LODGroup 计算公式
Unity 在配置 LodGroup 时,其分级切换的计算方法是按照物体在相机视野中占据的比例计算的。在运行时,如果相机视野范围(Field of View)没有改变,那么这个值可以直接换算成物体距离相机的距离。这里就讨论下如何计算得到这个距离。原创 2023-09-26 15:59:46 · 786 阅读 · 0 评论 -
【Unity】编辑器下查找指定文件下的所有特定资源
需求上很简单,就是在编辑器下,找到某个制定文件下的所有特定资源(UnityEngine.Object)。原创 2023-08-15 11:06:08 · 2656 阅读 · 1 评论 -
【Unity】【ComputeShader】使用ComputeShader计算相机视野
前言: 设一个1024*1024的地块,需要实时计算有哪些地块在相机范围内。为了提高运行效率,这里用ComputeShader来计算。1、准备工作 先在Unity右键创建一个ComputeShader,然后再创建一个Canvas,放一张RawImage(用于接受调试用的图片)。 然后创建一个控制类,添加以下控制组件:public class ComputeTest : MonoBehaviour{ #region 外部赋值属性...原创 2021-09-11 16:37:12 · 910 阅读 · 0 评论 -
【Unity】UPM解决方案:苍耳
在进行Unity游戏开发的时候,一直有一个痛点,那便是相同功能的代码在不同项目之间如何共同使用?苍耳提供了一个解决方案。原创 2022-11-08 16:28:33 · 2095 阅读 · 2 评论 -
【学习积累】Queue 与 ConcurrentQueue性能测试
在 C# 中,关于队列(Queue)有两种,一种就是我们普通使用的队列,另一种是线程安全的队列ConcurrentQueue 。本文将对这两个队列进行一个简单的性能测试,同时讨论一种特殊情况:一个线程入队,一个线程出队时使用 Queue 的情况。原创 2023-04-14 22:08:54 · 1592 阅读 · 2 评论 -
【Unity】使用 System.Windows.Forms 的问题
因为最近开发需要用到使用 Windows 自带的窗口打开、文件选择等功能,然后兜兜转转需要使用System.Windows.Forms 这个库。这个库在 WinForm 里是很常见的,但是要在 Unity 里使用,并打包出来还是有些坑的。原创 2022-12-23 15:05:04 · 5816 阅读 · 3 评论 -
【Unity】UI ToolKit 学习记录
Unity推出的这个 UI ToolKit,据说是要用来替代UGUI。既然这么有野心,那肯定要搞来看一看。这次使用目标就是用这个 UI ToolKit 生成一堆类似HUD的头标,然后看看使用难易程度和性能如何。原创 2022-12-16 15:57:49 · 3529 阅读 · 1 评论 -
【Unity】Entities 1.0 学习(二):调试工具
在 Entites 1.0 ,Unity修改了之前的调试面板,以及在场景下构建 Ecs World 的流程,较之前的版本差别还是蛮大的。因此有必要记录一下新的调试工具,以及构建方法。原创 2022-12-07 17:07:18 · 2704 阅读 · 1 评论 -
【Unity】Entities 1.0 学习(一):Aspect
Unity在 2022年下半年(我印象是9月份左右)推出了 Entities 1.0 ,可以在 2022.2.0b8 以上的版本使用。当时我粗略地看了一下,但是没有深入学习。最近空闲时间稍多,就认真来学习一下 Entities 1.0有啥新的东西。这篇文章算一个起头,以及对Aspect的一些学习总结原创 2022-11-11 23:17:06 · 5144 阅读 · 0 评论 -
【Unity】关于升级到2021.3.12之后URP编译错误的问题
我也看了其他的几个报错,基本都是说的在URP内部包的错误。这种属于低级错误了,这种编译错误都不需要测试人员,编译器自己就能检查出来,纯纯的语法错误。我看了下降级后的工程,确实没有报错了,然后URP的版本也依然是12.1.7。我试过,这个方案确实能解决,他把URP干掉了当然就解决了……如果是在是要用新版本的Uinty,看来只有把2021.3.11的URP拷贝出来,然后在2021.3.12里面用。然后果然还是重现了上述问题,那就不是我本身工程的问题了,属于Unity自带的问题。然而这个确实不知道是个啥东西。原创 2022-10-31 12:38:10 · 4130 阅读 · 6 评论 -
【Unity】俯视角相机地面视野范围的计算
在SLG等游戏中,相机总是固定为俯视角(上帝视角)。为了更好地管理游戏数据,需要对地图进行分块,只处理视野内的部分。判定某个单位是否在视野内有很多方法了,但是要么不够精确,要么性能不够,要么无法与AOI配合。 一个可行的方案就是将相机在地面上的视野计算出一个AABB 2D 包围盒,然后基于此包围盒来计算 AOI、显隐等。这个方案效率够高,而且对俯视角适配较好。原创 2022-10-26 12:12:33 · 3868 阅读 · 5 评论 -
【Unity】关于DrawMeshInstanced does not support the shader 的问题
关于 Graphics.DrawMeshInstanced 报 Shader 不支持的错误,这里做个问题收集总结。原创 2022-10-26 11:11:58 · 2135 阅读 · 1 评论 -
【Unity】关于 Unity Package 的 Version 格式。
在自定义 Unity 的Package插件的时候,我们需要编写一个Json文件:package.json 。 其中有个 version 字段,表示其版本,其值是一个字符串。本文旨在简单解释这个version字段的格式和规则。原创 2022-10-17 10:18:52 · 1218 阅读 · 0 评论 -
【Unity】相机视锥体剔除算法
视锥体剔除是Unity常用的剔除方法,其原理就是通过判定目标包围盒与组成相机视锥体的6个平面进行同侧判定,只要在6个平面之间的包围盒即为可见。本文根据其原理,给出一个视锥体裁剪的剔除算法的实现,并兼容ECS。原创 2022-09-27 21:03:36 · 3659 阅读 · 8 评论 -
【Unity】二维坐标映射成ID
在平面上,格子坐标通常是个二维坐标(X,Y),但是二维坐标有很多不方便的地方,且如果作为键值,其取值效率不高。因此大部分情况下,需要将二维坐标转换成ID来使用(且能从ID转换回坐标)。 常用的方式就是X*N+Y,N为一个足够大的数。但是这种方式有问题,其只能支持全正数或者全负数,一旦有正有负,就会坐标转换失败。因此需要一种较为便捷的算法,能将二维坐标映射成ID,且能互相转换。......原创 2022-07-14 11:05:01 · 1019 阅读 · 1 评论 -
【Unity】关于GPU异步回读Android兼容性问题
有时我们需要使用Unity的GPU 异步回读的功能,也就是使用如下API:AsyncGPUReadback 。那么这个API是否能无脑使用呢?他的兼容性如何呢?原创 2022-06-16 19:58:59 · 1995 阅读 · 0 评论 -
【Unity】六边形地图格子基础
这里的六边形地图,指SLG游戏中的大世界地图,用六边形的网格进行平铺。例如文明,以及部分SLG手游。这里介绍六边形地图格子的基本概念,以及具体数学实现代码。原创 2022-06-02 15:51:42 · 7467 阅读 · 0 评论 -
【C#】一个简单的伪随机方法
伪随机是游戏中常用的功能,但是我看网上的实现都比较复杂,或者不够随机(比如用线性同余法)。所以就自己实现一个算了,用最简单的方式。需求类似于抽卡那种,例如10连抽必中1张(概率10%),然后这1张在这10次里面是随机出现的。如果第一张就抽中了,那后面9张都不会中;同理,如果前9张都每中,则最后一张必中。实现算法基本思路如下:先获取一个概率(P),然后得到当前概率下的...原创 2022-02-17 20:10:53 · 1670 阅读 · 0 评论 -
【Unity】Camera.WorldToViewportPoint 计算原理及实现
具体原理我是参考的这篇文章:https://gameinstitute.qq.com/community/detail/116994本地具体实现实现方法(不调用Camera的API)如下:1、获取相机的VP矩阵: 物体顶点坐标转换成屏幕坐标是用MVP矩阵,但是因为我们这边本来就使用的世界坐标进行转换,所以只需要VP矩阵即可。获取VP矩阵的方法如下: private Matrix4x4 Matix_V...原创 2021-09-06 15:15:28 · 3743 阅读 · 0 评论 -
【Unity】确保3D物体显示在最前的几种方法
前言:最近项目里有一个需求,要求某个单位(3D)一直显示在所有物体的最上层,哪怕他在其他物体后面。经过一番折腾解决了,这里提供几种思路。这里先起一个Demo,如下图:可以看到,黄色方块是在白色方块后面的。在Game视图中可以看到,黄色方块是被白色方块挡住了一部分。现在我们用一些操作把黄色方块提到最前。一、使用2个相机这种可以说是最简单的了:把主相机复制一份,然后剔除掉黄色方块的层。再在复制出来的相机里设置为Depth Only并且只照黄色方块的层:可以看到这个黄.原创 2021-04-01 17:54:59 · 7874 阅读 · 5 评论 -
【Unity】【UGUI】映射3D坐标到UI上(血条、人物状态)
把3D坐标映射到UI上,这种操作多用于类似血条、人物名之类的东西。这种其实是可以整个通用的方法来解决的:通过3D坐标直接修改UI控件的位置:原创 2020-12-27 14:47:51 · 1292 阅读 · 1 评论 -
【Unity】【Odin Inspector】关于AOT Generation
首先:Odin是一个绝对需要用的插件(稳赚不赔)但是Odin Inspector在手机上可能会有些问题……原创 2020-12-27 14:29:26 · 3665 阅读 · 5 评论 -
【Unity】判断 物体/坐标 是否在相机范围内
如何判定一个物体/坐标是否在视野范围内?本文提供三种解决方案。原创 2020-12-03 22:18:04 · 9884 阅读 · 4 评论 -
【Unity】:从【3ds Max】为人形骨骼 humanoid 添加动画
众所周知,Unity有的Fbx模型可以有一种人形动画,通过这种人形动画可以实现各种人形骨骼动画之间的复用。那么问题来了,如果我再3dsMax里做了一个动画,要怎样才可以用到我目前的动画中呢?原创 2020-09-04 14:41:21 · 4194 阅读 · 0 评论 -
【学习总结】Unity内存解析
前言之前看的一个Unity官方的视频:浅谈Unity内存管理(https://www.bilibili.com/video/BV1aJ411t7N6);觉得干货满满,但是一时又不能完全记下来,当时就想记个笔记。但是后面要么忘了,要么没时间,一直没有实现(主要还是懒)。这一次重新看一遍视频,再结合我自己的一些理解,一边学习一边总结。正文1、什么是内存内存分为物理内存、虚拟内存。关于物理内存:关于物理内存需要记住:CPU访问内存是一个满速过程。CPU在需要访问内存时,先是..原创 2020-08-25 23:11:40 · 1685 阅读 · 0 评论 -
【Steam】成就系统的制作及本地化
Steam的成就系统还是比较简单好做的,大部分API都已经弄好了。这里就把大概流程总结一下,方便以后查阅。1、SteamWork的设置在Steamworks网页的成就面板中,可以添加成就,默认是英文的。点击新成就可以添加一个成就:这个表格还是比较清晰的。值得注意的是,这个API名称就是你在程序里需要用到的名字,所以这个命名一定要规范。然后显示名称和描述就随便填了,看策划的配置。然后还有一个进度状态,一开始时没有进度的,只能选无。这个进度需要在统计选单里设置:...原创 2020-08-14 20:49:57 · 3906 阅读 · 0 评论 -
【Unity】FBX Exporter 的使用 (To 3ds Max 2018)
Unity版本:Unity 2019.4.4f13ds Max 版本:2018 (至少要 2017 以上的版本)1、导入FBX Exporter在Unity中,点击Window→Package Manager,然后找FBX Exporter;如果在左边的列表中找不到,则在Advanced中勾选 Show preview packages :选中FBX Exproter,然后点Instailling进行导入。之后选择Edit→Project Settings→Fbx Expo.原创 2020-07-25 18:53:15 · 19034 阅读 · 4 评论 -
【Unity】【UI Shader】关于用Shader实现字体的描边和阴影
前言描边和阴影,Unity本来是由自带的组件的(Outline和Shadow)。Unity自己的实现方式如下:Outline:把原文字/图片以往的网格复制4份,然后上下左右各偏移一点距离(相当于多绘制了4遍)。Shadow:把原文字/图片的网格复制1份,然后往某个方向偏移一点(相当于多绘制了1遍)。我觉得是挺蛋疼的,所以就突发奇想干脆用Shader来实现会不会好一点。正文:由于本人水平有限,所以大部分代码都是参考网上的。这里先上代码:// Upgrade NOTE: re.原创 2020-07-06 12:54:45 · 6831 阅读 · 1 评论 -
【Unity】【PC】【错误上报】Bug上报插件 Trello Bug Tracker 使用介绍 (二):错误抓取部分
前言上一章(https://blog.csdn.net/cyf649669121/article/details/105637064)说了关于Trello这个插件的使用和用户自定义上报的部分,不过还需要实现的一个就是错误抓取的功能。这个就和手机上用的Bugly就很像了,就是抓取Unity控制台输出的报错和异常,然后分类上报。不过这个插件没有自己实现,需要我们自己来实现他。设想...原创 2020-04-21 12:39:27 · 1208 阅读 · 1 评论 -
【Unity】【PC】【错误上报】Bug上报插件 Trello Bug Tracker 使用介绍 (一):用户上报部分
前言最近需要做一个在PC端的Bug上报功能,之前的Bugly是用在移动端的,其实不是很适合。所以需要一个在PC端的Bug上报,然后在网上找到一个还不错的插件:Trello Bug Trackerhttps://assetstore.unity.com/packages/tools/integration/trello-bug-tracker-pro-75613不过网上对这个的介...原创 2020-04-20 20:22:36 · 1815 阅读 · 3 评论 -
【Unity】简易游戏存档
前言游戏存档的功能和重要性不需要过多叙述,实现的方法也很多样。对于Unity来讲,最简单的就是用PlayerPrefs来搞。但是就因为简单,所以能实现的功能也比较少。目前PlayerPrefs存些Int、String显然是不够的。所以推荐一个C#自带的序列化来做存档,简单易用,功能全面,而且简单,会一点C#就能会。原理用FileStream 和BinaryFormat...原创 2020-04-19 01:30:32 · 2435 阅读 · 0 评论 -
Unity3D插件 Doozy UI 学习(三):UI Element
前言之前写过一些关于DoozyUI的开发介绍,比较基础。后面用DoozyUI开发了一段时间,现在已经有了更深入的一些了解。这篇主要讲一下UI Elemenet这个脚本的使用。正文1、关于UI Element:如下图所示,Doozy UI的UI Element主要有以下内容。UI Element顾名思义,就是一个UI的最小元素。是作为打开、关闭的单位。通俗来讲,就是我们...原创 2019-10-12 12:06:57 · 3333 阅读 · 0 评论 -
【Unity】关于 InputManager 以及改键功能的制作
前言改键,是PC游戏中非常常用的功能。而在Unity的开发中,我们大多直接使用Unity自带的InputManager,那么这个InputManager能改键吗?我在最近的项目开发中就遇到这个问题,结果发现,Unity自带的InputManager并不能实现代码赋值:也就是说不能改键。虽然我们经常看到Unity打PC包之后自带的启动器上有改键的功能,但是他并不能在游戏中实时修改,显然是不符...原创 2019-09-22 12:01:27 · 11448 阅读 · 1 评论 -
Unity3D UGUI 优化:Font.CacheFontForText
前言:最近在做项目优化的时候,有个东西非常耗时,就是Font.CacheFontForText。在真机上测出来的Profile简直吓人,几十、几百、上千毫秒都有可能。所以这是一个必须优化的点,也是一个很难的点。因为他的API等东西,都是写在原生的Unity中的,外部访问不到;而如果自己重新实现一套又太费时费力了。正文:1、现状分析:上图可以看到,由font.cache...原创 2018-11-11 10:11:29 · 4919 阅读 · 0 评论 -
Unity UGUI优化:解决EventSystem耗时过长的问题 第一部分
前言:最近项目一直在做优化,然后发现Unity的其中一个大坑,关于EventSystem的。当玩家在连续操作屏幕的时候,就会触发EventSystem.Update() -->....-->EventSystem.RaycastAll();这个RaycastAll非常耗时,每帧七八毫秒、甚至十几毫秒的情况都有。虽然是Unity 的底层,但是还是要想办法来优化一下。 正文...原创 2018-11-02 20:50:14 · 9810 阅读 · 4 评论 -
Unity UGUI优化:解决EventSystem耗时过长的问题 第二部分
前言:上一部分说到,优化了一下GraphicRaycaster.get_eventCamera()等方法的调用,使其有了明显的耗时下降。但实际上还是不够的:Graphic.get_canvasRenderer()、Graphic.get_depth()同样也有很大的耗时。通过观察发现,这部分的耗时都是在对gameObject进行判空导致的。显然这个对于项目来讲不是很划算。因为其Canv...原创 2018-11-06 14:18:23 · 4110 阅读 · 1 评论 -
Unity/ C#:优化字符串操作产生的GC【Using ZString】
前言:最近被要求改关于字符串操作中的GC,比如:数字转文本、字符串拼接等。一般来讲有的可以避免,但有的很难避免。比如Number To String的操作,总归是写在逻辑的硬需求里面的(等级、时间、飘血等)。如上图所示,这个是Int32.ToString的时候产生的GC,其他的数值转文本也差不多一个情况。即便调用其他的API,最终都会走到这边一步,一个String.InternalAl...原创 2018-10-26 14:58:15 · 11112 阅读 · 5 评论 -
Unity3D :关于UGUI的网格重建、动静分离
前言:无论是网上的攻略还是以前的经验来说,都说UGUI需要进行动静分离。也就是说同一个界面下的UI,可活动的元素放在一个Canvas下,不可活动的元素放在另一个Canvas下。虽然两个Canvas打断了合批,但是却减少了网格的重建时间,总体上是有优化的。究其原因,是因为在同一个Canvas下的某个元素发生变化时,同一Canvas下的所有元素都会进行网格重建(ReBatch)。而静态的元素在...原创 2018-10-18 12:10:06 · 15396 阅读 · 6 评论 -
Unity开发时遇到的各种需要注意的地方
前言:最近在做东西的时候突然想到,自己以前做过的项目有很多地方需要注意的,然而并没有记录下来,导致下次还会出现这样的问题。于是就有了这个想法,把之前各种各样奇奇怪怪的问题都记录下来,解决方案也写下了。一是加深记忆,二是万一又遇到了好歹也有个参考;正文:1、Transform.GetComponentsInChildren找不到组件!?这是因为Transform.G...原创 2018-09-28 16:26:22 · 6727 阅读 · 3 评论