Unity3D技术分享
文章平均质量分 86
Unity3D技术分享
Don里个冬
一个游戏前端开发小小佬。
展开
-
浅谈Unity内存管理
众所周知,物理内存就是插在计算机主板内存槽上的实际物理内存。虚拟内存其实就是计算机系统内存管理的一种技术。虚拟内存使得应用程序认为它拥有一个连续完整的地址空间,而实际上,虚拟内存通常是被分隔成多个物理内存碎片,在需要时进行数据交换...原创 2024-02-27 12:20:35 · 1357 阅读 · 0 评论 -
Unity老项目Android 13支持
Google官方要求新、老app在一定时间要求内需要面向Android 12、Android 13构建,不然不给app过审。我们之前是面向Android API 30构建的,现在需要支持面向Android API 33构建。在支持Android 13的时候遇到了很多问题,在此做下记录,提供参考。原创 2024-02-19 18:31:32 · 1095 阅读 · 0 评论 -
Unity设备分级策略
之前自己做的设备分级策略,在此做一个简单的记录和思路分享。希望能给大家带来帮助。根据拟定的评分标准...原创 2024-02-17 20:04:22 · 1417 阅读 · 0 评论 -
Unity 2D Spine 外发光实现思路
对于3D骨骼,要做外发光可以之间通过向法线方向延申来实现。但是对于2D骨骼,各顶点的法线没有向3D骨骼那样拥有垂直于面的特性,那我们如何做2D骨骼的外发光效果呢?原创 2024-02-16 19:49:59 · 2356 阅读 · 0 评论 -
Lua和C#交互开销探究
Lua和C#交互开销探究前言最近又看了一下ToLua相关的东西,终于稍微看明白了一点点,在此作下笔记。过程Lua每个用到的C# object都会分配一个ID与之对应,ObjectTranslator类起到关键作用。ObjectTranslator译为对象翻译者,为什么作者会起这个名,原因就在于ObjectTranslator会把object与ID的匹配关系存起来。每次Lua需要调用C#的时候,最终都会转换成通过ID在ObjectTranslator中找对应object,然后调用object的对原创 2021-11-11 21:18:51 · 1322 阅读 · 0 评论 -
Unity图集、Image和SpriteRenderer
Unity图集、Image和SpriteRenderer前言最近好久没有写技术笔记了,今天继续回归日常学习的状态。图集Tight PackingUnity提供的SpriteAtlas有一个Tight Packing选项。这个选项勾选之后,图片就会按照它的Sprite Mesh来进行图集排布。可以大大提升图集的使用率,尤其是对于那些斜视角游戏。但是使用Tight Packing会面临一个问题,就是默认情况下,Image使用的Mesh是Rect Mesh,也就是说在裁剪图集的时候,回把一些我们不想原创 2021-10-26 00:04:11 · 2895 阅读 · 0 评论 -
《Shader入门精要》笔记——渲染流水线
《Shader入门精要》笔记——渲染流水线前言作者在序章部分提到,程序员的三大浪漫——编译原理、操作系统、图形学。感觉总结得还挺有意思的,不过也确实说明了图形学的地位所在。工作了一年,才开始学习这本书。之前零零碎碎也了解了不少渲染的知识,也看完了闫令琪老师的图形学课,感觉多多少少对图形渲染也有些基础的认知。但是偏偏却因为不会写Shader而无法上手。希望自己能够坚持把这本书看完,既是对渲染知识的一个回顾和深化,又是对Shader的一个入门和上手。然后这一章笔记,我加入了一些自己对于渲染管线的理原创 2021-08-02 22:56:47 · 208 阅读 · 0 评论 -
Unity音频基础知识
Unity音频基础知识前言之前一直没有细研究过Unity的音频策略和优化机制,在此学习完过后作下笔记。基础知识所谓音频采样率,即每秒采样多少次,人们常说的音频音质就是采样率。采样率越高,音质越好,大小越大。一般来说,CD的采样率/音质是44100HZ。所谓音频采样精度,即每次采样的结果用多少位存储。最常见的是用16位,即2个字节来存储。所谓音频采样时间,即音频的播放时间。所谓音频声道,即采样的位置数量,从几个位置进行采样就是几声道。所谓音频解码,即压缩音频的解压缩。音频必须解码之后才能进原创 2021-07-25 13:52:27 · 3403 阅读 · 1 评论 -
Unity静态合批
Unity静态合批前言之前写这篇笔记的时候,对静态合批也是半知半解。最近也就稍微细的了解了一下所谓的静态合批究竟是个啥,在此作下笔记。静态合批就属于那种听上去很常用很实用,但是实际上并没有很多手游使用的优化方式(端游上常用)。批量渲染批量渲染又叫做合批,是一种通过减少DC来提升逻辑线和渲染线整体效率的方法。但这是建立在GPU相对空闲,而CPU把更多的时间都耗费在渲染命令的提交上时,才有意义。因为如果瓶颈在GPU,比如GPU性能偏差,或片段着色器过于复杂等,此时GPU本身就需要满负荷工作,那么没原创 2021-06-07 21:39:43 · 3066 阅读 · 1 评论 -
Unity UI优化总结
Unity UI优化总结前言最近又再一次回顾总结了一下Unity UI的优化,在此作下笔记,供学习参考。核心四大问题在Unity中UI优化的核心问题就是重绘和批处理之间的平衡。虽然说可以通过一些简单的技巧单方面地减少批次或者减少重绘,但进行过一波优化之后,最终还是要面临批次和重绘的平衡问题的。常见的四大UI优化问题:1、片段着色器利用率过高(或者说GPU fill-rate填充率过高),即每个片段处理的时间过长。(可能是片段着色器过于复杂,也可能是每个片段要处理的东西太多/采样数量过多)一原创 2021-06-03 23:55:54 · 1497 阅读 · 0 评论 -
Job System概述
Job System概述前言最近查漏补缺,稍微学习一下Job System的理念。在此作下记录。背景目前大部分游戏和应用都只使用单核,Job System出现的目的就在于允许游戏尽可能使用可使用的CPU核,从而并行加速运行游戏。更具体地说,使用多核可以在不优化thread-time(CPU指令用于计算的时间)的情况下减少wall-time(一个任务从开始到结束的时间)。优势使用Job System来减少wall-time最简单的方法就是使用ParallelFor jobs。一个Parall原创 2021-05-26 23:33:59 · 2190 阅读 · 0 评论 -
Unity Native崩溃堆栈解析
Unity Native崩溃堆栈解析前言最近在工作中查询线上崩溃的时候发现Bugly上有些崩溃日志无法还原,即使上传了对应的符号表也无济于事。为了还原崩溃日志,定位崩溃原因,学习了一下在此记录。崩溃日志接入Bugly之后,手机上崩溃前的崩溃日志会被上传到Bugly上。开发人员可以在Bugly的“崩溃分析”页面中查看崩溃日志。有些崩溃日志Bugly无法检测到能够还原的部分,也就是说即使上传了符号表,Bugly没法识别日志,也就无法自动通过上传的符号表还原日志。比如下图崩溃:这个时候,开发人原创 2021-05-07 21:25:13 · 5367 阅读 · 6 评论 -
Unity简单机制深究之一——谁调的Awake?
Unity简单机制深究之一——谁调的Awake?前言最近突然发现很多基础知识虽然知道、会用,但是一问自己为什么却答不上来。这就说明自己的基础知识挖掘地不够深,在此做个学习总结。Unity生命周期这个是Unity官方文档的生命周期图解:这里抛出几个问题。1、MonoBehavior的第一个生命周期是什么?2、Awake和Start是具体在什么时候调用的?3、什么情况下不会走Awake?什么情况下不会走Start?可以先在脑海中试想一下。OK。对于问题一,肯定都能不假思索地回原创 2021-05-06 21:50:33 · 924 阅读 · 5 评论 -
Unity刮刮乐效果实现及优化
Unity刮刮乐效果实现及优化前言由于之前没有做过刮刮乐,所以对这个东西很感兴趣。最近研究了一下之后发现,刮刮乐的实现方式也没有想象得那么神奇。(内心真实感受:就这?)为了保证该功能可以支持热更新,所以用的Lua实现的该功能。这里做一个小的总结。实现Unity中实现刮刮卡的方式有很多种,但实现的基本原理都是通过计算改变目标点及周围的像素颜色的alpha为0。监听事件可以通过类继承IDragHandler、IPointerDownHandler、IPointerUpHandler等接口来原创 2021-04-26 21:57:51 · 1607 阅读 · 1 评论 -
Unity图集相关问题
Unity图集Include In Build问题前言最近查找图集相关资料的时候看到了Unity论坛上的一篇帖子,其中Unity官方技术人员解释了“Include In Build”究竟有什么作用。Include In Build简而言之,如果勾选了,就意味着Sprite直接引用SpriteAtlas;如果不勾选,就意味着Sprite没有直接引用SpriteAtlas。也就是说,我们可以理解为“Include In Build”就是是否存储sprite和图集的引用关系。当勾选的时候,Unity原创 2021-03-29 22:54:11 · 1560 阅读 · 0 评论 -
AssetBundle图集引用丢失问题
AssetBundle图集引用丢失问题前言最近发现了一个之前从来没有注意到的问题,在此做一个简单的记录。有关AB包的具体细节知识自行补充,这里不再多说,实在不明白可以参考我之前的文章Unity——浅谈AB包和Unity资源管理和策略。我们直接上干货。图集引用丢失问题不知道是Unity的版本bug还是本来就是这种机制。反正目前,有一个这样的问题:一个打在A包中的资源引用到了某张图片,该图片没有打进任何包,但该图片的图集打进了B包中。本以为,Unity会记录该资源对该图集的引用关系,但实际上原创 2021-03-25 22:48:07 · 1609 阅读 · 2 评论 -
Unity GUID
Unity GUID前言最近在工作中遇到了项目中分批次打的AB包做热更新时出现丢图的问题,后来逐步定位到图集的guid发生变化了。在此正好总结一下Unity的guid相关的内容。概念guid是资源的唯一标识符,Unity用它来记录资源之间的引用关系。local id/file id是资源内部的id,Unity用它来记录资源内部的具体引用/层级关系。一般来说,guid和local id是成对使用的,Unity需要同时使用这两种id去查找一个资源。但由于每次需要以全部资源为检索源,数量非常多,查原创 2021-03-22 22:32:37 · 4038 阅读 · 1 评论 -
DOTween源码学习笔记
DOTween源码学习笔记前言最近抽时间学习了一下DOTween的源码,发现实现方式非常的巧妙。在此记录一下学习笔记。核心思想为什么DOTween看起来那么复杂呢?因为DOTween提供的功能特别多,包括变化队列Sequence、运动轨迹Path、链式编程等等。非常强大的插件。但本质上的核心变化思想就一点:每帧根据时间位置来算出对应ease上的实际变化状态(或者叫变化完成度,范围从0到1),根据这个变化状态设置变化对象的属性(包括位置、颜色、旋转、数值等)。比较曾经有人做过各种Twe原创 2021-03-15 21:27:45 · 1597 阅读 · 1 评论 -
Unity UI优化策略
Unity UI优化策略前言最近学习了Unity的图形渲染和UI的优化部分,感觉还是有挺多东西的。在此做一个简单的总结和记录。如果把计算机绘制想象成画画,想要加快画画速度,我们可以从几个方面来进行优化:1、先画背景,再画物体;先画物体,再画背景。(Overdraw)2、一次知道要画什么东西没,减少画笔换颜料的次数。(Batch / Draw Call)3、用一个颜料就尽量一次把要画的都画完,免得之后还得再换回来。(提交顺序)4、减少修改。(Rebuild)Batch和Draw Call原创 2021-03-02 22:47:27 · 3342 阅读 · 1 评论 -
Unity资源管理和策略
Unity资源管理常用路径Unity移动端开发中常常会用到四种路径。AssetDatabse在Editor环境下,Unity提供了一个AssetDatabase类,提供了各种各样的资源加载、管理等方法。热更新AB包加载资源加载原创 2021-02-02 01:51:21 · 1507 阅读 · 1 评论 -
Unity——浅谈AB包(AssetBundle)
浅谈AB包by 王桢豪Unity资源管理在Unity中,一般来说,资源加载方式主要分为Resources加载和AssetBundle加载。Unity有个特殊文件夹Resources,放在这个文件夹下的资源可以通过Resources.Load()来直接加载。即Resources加载资源方式。当获得AssetBundle之后,也可以调用AssetBundle对应的API来加载资源。什么是AB包AB包全名AssetBundle(资源包)。是一种Unity提供的用于存放资源的包。通过将资源分布在不原创 2021-01-10 21:25:58 · 20375 阅读 · 5 评论 -
Mac、移动端的抓包方式和注意事项——Charles
抓包软件Charles官网下载。下载完成之后,需要激活正式版。正式版激活方式:1、点击Help->Register。2、输入Registered Name: https://zhile.io,License Key: 48891cf209c6d32bf4。3、激活正式版。本机网络代理设置如果需要实现抓取数据包,就得先设置本机网络代理。1、点击Charles菜单中的Proxy->Proxy Settings,选择Proxies,在HTTP Proxy中填写代理端口号(默认888原创 2020-06-26 17:03:43 · 1336 阅读 · 0 评论 -
UGUI文图混合排列问题——Horizontal Layout Group和Content Size Fitter
前言最近在工作中遇到了UGUI文图混合排列的问题,查阅相应资料后发现原创 2020-05-17 22:13:00 · 1554 阅读 · 0 评论 -
浮点数精度问题——由Mathf.Floor()引发的思考
前言最近刚入职,在公司做功能的时候,遇到一个问题。就是在C#中:Mathf.Floor(9999.9995f) = 9999Mathf.Floor(9999.9996f) = 10000这就让我很迷惑。因为Mathf.Floor()方法的官方文档上面些的是取float的最近的小于等于它的整数,而10000比9999.9996大啊!于是查阅了相关资料后,发现原来这一切都是浮点数精度搞的鬼!什么是浮点数要解释为什么,就先要从底层原理说起。所谓浮点数,简而言之就是小数。IEEE754规定浮.原创 2020-05-13 01:12:43 · 1840 阅读 · 0 评论 -
Unity3D导入设置——Import Settings
前言对图片导入设置里面的各种选项做个笔记。以便以后查询。Texture Type项Default 默认Normal map 法线贴图Editor GUI and Legacy GUI UI贴图Sprite 精灵体Cursor 鼠标指针Cookies 遮罩贴图Lightmap 光照贴图(烘培贴图)Single Channel 单通道纹理Texture Shape项2D 普...原创 2020-04-30 16:48:02 · 6371 阅读 · 0 评论 -
Unity3D编辑器扩展2——自定义窗口EditorWindow
前言第二篇U3D的笔记了,希望能一直坚持写下去。什么是EditorWindowEditorWindow就是一种可视化窗口,可以贴在Unity界面的各个位置。比如,我们的场景窗口Scene、游戏窗口Game、资源商店窗口Asset Store、层级窗口Hierarchy等。Unity自带的窗口毕竟有限,所以如果我们想要自定义自己的工具窗口,就需要用到编辑器扩展。第一步首先用Unity...原创 2020-04-29 20:09:53 · 1539 阅读 · 0 评论 -
Unity3D编辑器扩展1——批量处理资源
前言最近一段时间正在学习Unity的编辑器扩展方面的内容,因此想把所学到的知识以一种方式记录下来。有可能有很多不足的地方,甚至有错误的地方,请大佬们多多提供帮助。什么是编辑器扩展先说说什么是编辑器扩展。通俗来说,编辑器扩展就是在原有的Unity编辑界面中添加各种各样的自定义功能,以达到自己想要的目的。比如,我想在Unity菜单栏下添加一个按钮来实现删除所有图片资源。这就需要用到编辑器扩...原创 2020-04-28 14:50:24 · 1278 阅读 · 0 评论