自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 手把手教你搓——割草游戏碰撞检测框架

本文仅提供对象管理和碰撞检测策略和思路,不讨论其他性能优化方案如ECS。这些算法都没有绝对的优劣,都有各自的优缺点,实际应用中要根据情况选择合适的算法才能起到最大的优化效果。作为一个割草游戏,主要的玩法就是,主要的逻辑就是发射子弹攻击敌人。那么最关键的逻辑就是如何判断子弹能攻击到敌人,即碰撞检测...

2024-03-04 14:20:53 1159

原创 浅谈Unity内存管理

众所周知,物理内存就是插在计算机主板内存槽上的实际物理内存。虚拟内存其实就是计算机系统内存管理的一种技术。虚拟内存使得应用程序认为它拥有一个连续完整的地址空间,而实际上,虚拟内存通常是被分隔成多个物理内存碎片,在需要时进行数据交换...

2024-02-27 12:20:35 1043

原创 Unity老项目Android 13支持

Google官方要求新、老app在一定时间要求内需要面向Android 12、Android 13构建,不然不给app过审。我们之前是面向Android API 30构建的,现在需要支持面向Android API 33构建。在支持Android 13的时候遇到了很多问题,在此做下记录,提供参考。

2024-02-19 18:31:32 867

原创 Unity设备分级策略

之前自己做的设备分级策略,在此做一个简单的记录和思路分享。希望能给大家带来帮助。根据拟定的评分标准...

2024-02-17 20:04:22 1322

原创 Unity 2D Spine 外发光实现思路

对于3D骨骼,要做外发光可以之间通过向法线方向延申来实现。但是对于2D骨骼,各顶点的法线没有向3D骨骼那样拥有垂直于面的特性,那我们如何做2D骨骼的外发光效果呢?

2024-02-16 19:49:59 2065

原创 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 1202

原创 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 2779

原创 Lua闭包简述

Lua闭包简述前言最近工作上比较忙,没有太多时间来进行学习和总结,有点难受。由于最近接触这一块比较多,所以赶紧忙里偷闲总结一篇闭包相关的笔记。基本概念首先我们必须知道,闭包是什么?简而言之,闭包就是一个环境,一个能够访问外部声明的变量和方法的环境。举个简单的小例子:local a = 100local function f() a = 200 end上面的代码中,f方法访问了外部的变量a,f方法就是一个闭包或者说闭包函数。这里的变量a,也就是所谓的上值(upvalue

2021-08-26 22:54:32 963 1

原创 CLR简介

CLR简介什么是CLRCLR英文全称Common Language Runtime,即公共语言运行时。乍一看到这个概念确实不明白,什么是语言运行时?简单来说,就是一个程序运行所需要的环境,包括各种资源、各种操作等等。通常来说,不同语言、不同操作系统所需要的运行时环境都不一样。举个例子,Windows上的可执行程序都被包装成了.exe格式,而这种.exe格式文件提供了一个程序从加载到运行所需要的所有资源和环境。而CLR提供了:1、一个支持GC的虚拟机,该虚拟机有自己的一套指令集,即CIL(公共

2021-08-12 01:05:31 8311

原创 《Shader入门精要》笔记——渲染流水线

《Shader入门精要》笔记——渲染流水线前言作者在序章部分提到,程序员的三大浪漫——编译原理、操作系统、图形学。感觉总结得还挺有意思的,不过也确实说明了图形学的地位所在。工作了一年,才开始学习这本书。之前零零碎碎也了解了不少渲染的知识,也看完了闫令琪老师的图形学课,感觉多多少少对图形渲染也有些基础的认知。但是偏偏却因为不会写Shader而无法上手。希望自己能够坚持把这本书看完,既是对渲染知识的一个回顾和深化,又是对Shader的一个入门和上手。然后这一章笔记,我加入了一些自己对于渲染管线的理

2021-08-02 22:56:47 180

原创 简述MVC、MVP和MVVM

简述MVC、MVP和MVVM前言最近在看项目代码的时候,发现项目中用的MVC比较像MVP,在此对这几个相关设计框架做个简单笔记。MVCMVC,即Model-View-Controller。Model就是数据层,用于存储和管理数据;View就是显示层,提供纯显示上的接口;Controller就是控制层,提供逻辑控制接口,更新数据,更新显示。三者可以均可交互。MVC将用户输入统一放在控制层进行处理,方便进行管理,并且数据层和显示层分离,使得代码更加纯粹,耦合度降低。但是一般情况下,一个View对

2021-07-29 20:58:57 500

原创 Unity音频基础知识

Unity音频基础知识前言之前一直没有细研究过Unity的音频策略和优化机制,在此学习完过后作下笔记。基础知识所谓音频采样率,即每秒采样多少次,人们常说的音频音质就是采样率。采样率越高,音质越好,大小越大。一般来说,CD的采样率/音质是44100HZ。所谓音频采样精度,即每次采样的结果用多少位存储。最常见的是用16位,即2个字节来存储。所谓音频采样时间,即音频的播放时间。所谓音频声道,即采样的位置数量,从几个位置进行采样就是几声道。所谓音频解码,即压缩音频的解压缩。音频必须解码之后才能进

2021-07-25 13:52:27 3330 1

原创 Git命令总结

Git命令总结前言用了这么久的Git,一直都是使用的辅助工具来进行Git管理。所以在此简单记录一下Git命令行的使用极其注意事项。克隆git clone https://www.abcd.com/test # 克隆https://www.abcd.com/test的项目到当前目录检出/切换分支git checkout master # 切换到master分支git checkout -b master # 创建并切换到master分支拉取git pull origin mast

2021-07-19 21:54:26 89

原创 简述ProtoBuf

简述ProtoBuf前言最近在工作中用到了ProtoBuf,但是却不知道这是个什么玩意,在此做下笔记。由于ProtoBuf底层的内容确实很多,需要慢慢地去品,这里就只做一个简述,知道ProtoBuf干啥的,有啥好处。简述ProtoBuf是谷歌提供的一种结构数据序列化方法,多用于前后端通讯数据协议。其优势在于灵活、高效、扩展性好。ProtoBuf有单独的.proto文件,用于定义数据结构:message MyProtocol // 字段后面的=表示的是字段的编号{ required st

2021-07-14 22:08:35 285

原创 前向渲染和延迟渲染基本概念

前向渲染和延迟渲染基本概念前言这一篇是对之前欠的东西,延迟渲染这个东西具体有很多很多值得钻研的东西,这里只是对概念做一个简单的笔记。如果后续再需要深入了解的话,会再另作笔记。前向渲染前向渲染是大多数的引擎常用的标准渲染方式。每次遍历几何片元的时候,片段着色器中会先计算光照,之后将片段写入帧缓冲区。但是这样会有很多次的光照计算都是多余的。于是为了减少没必要的光照计算,出现了延迟渲染技术。延迟渲染延迟渲染是一种能有效减少光照计算的技术。在渲染管线中,剔除、Early-Z等技术都是为了减少不必

2021-07-13 21:40:17 2011

原创 Unity静态合批

Unity静态合批前言之前写这篇笔记的时候,对静态合批也是半知半解。最近也就稍微细的了解了一下所谓的静态合批究竟是个啥,在此作下笔记。静态合批就属于那种听上去很常用很实用,但是实际上并没有很多手游使用的优化方式(端游上常用)。批量渲染批量渲染又叫做合批,是一种通过减少DC来提升逻辑线和渲染线整体效率的方法。但这是建立在GPU相对空闲,而CPU把更多的时间都耗费在渲染命令的提交上时,才有意义。因为如果瓶颈在GPU,比如GPU性能偏差,或片段着色器过于复杂等,此时GPU本身就需要满负荷工作,那么没

2021-06-07 21:39:43 2995 1

原创 Unity UI优化总结

Unity UI优化总结前言最近又再一次回顾总结了一下Unity UI的优化,在此作下笔记,供学习参考。核心四大问题在Unity中UI优化的核心问题就是重绘和批处理之间的平衡。虽然说可以通过一些简单的技巧单方面地减少批次或者减少重绘,但进行过一波优化之后,最终还是要面临批次和重绘的平衡问题的。常见的四大UI优化问题:1、片段着色器利用率过高(或者说GPU fill-rate填充率过高),即每个片段处理的时间过长。(可能是片段着色器过于复杂,也可能是每个片段要处理的东西太多/采样数量过多)一

2021-06-03 23:55:54 1382

原创 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 2159

原创 Git分支原理

Git分支原理前言最近工作由SVN换成Git了,不由地想探寻一下这两种版本控制工具的差别到底在哪里,于是有了这篇笔记。Git保存方式Git和SVN的差别主要就在于对待数据的方式。SVN将存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异,因此称为是基于差异的版本控制,存储的是文件的变化或者差异。而Git把数据看作是对小型文件系统的一系列快照。每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。为了效率,如果文件没有修改,Git 不再重新存

2021-05-12 22:52:57 1054 1

原创 Unity Native崩溃堆栈解析

Unity Native崩溃堆栈解析前言最近在工作中查询线上崩溃的时候发现Bugly上有些崩溃日志无法还原,即使上传了对应的符号表也无济于事。为了还原崩溃日志,定位崩溃原因,学习了一下在此记录。崩溃日志接入Bugly之后,手机上崩溃前的崩溃日志会被上传到Bugly上。开发人员可以在Bugly的“崩溃分析”页面中查看崩溃日志。有些崩溃日志Bugly无法检测到能够还原的部分,也就是说即使上传了符号表,Bugly没法识别日志,也就无法自动通过上传的符号表还原日志。比如下图崩溃:这个时候,开发人

2021-05-07 21:25:13 5111 6

原创 Unity简单机制深究之一——谁调的Awake?

Unity简单机制深究之一——谁调的Awake?前言最近突然发现很多基础知识虽然知道、会用,但是一问自己为什么却答不上来。这就说明自己的基础知识挖掘地不够深,在此做个学习总结。Unity生命周期这个是Unity官方文档的生命周期图解:这里抛出几个问题。1、MonoBehavior的第一个生命周期是什么?2、Awake和Start是具体在什么时候调用的?3、什么情况下不会走Awake?什么情况下不会走Start?可以先在脑海中试想一下。OK。对于问题一,肯定都能不假思索地回

2021-05-06 21:50:33 861 5

原创 Unity刮刮乐效果实现及优化

Unity刮刮乐效果实现及优化前言由于之前没有做过刮刮乐,所以对这个东西很感兴趣。最近研究了一下之后发现,刮刮乐的实现方式也没有想象得那么神奇。(内心真实感受:就这?)为了保证该功能可以支持热更新,所以用的Lua实现的该功能。这里做一个小的总结。实现Unity中实现刮刮卡的方式有很多种,但实现的基本原理都是通过计算改变目标点及周围的像素颜色的alpha为0。监听事件可以通过类继承IDragHandler、IPointerDownHandler、IPointerUpHandler等接口来

2021-04-26 21:57:51 1520 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 1518

原创 AssetBundle图集引用丢失问题

AssetBundle图集引用丢失问题前言最近发现了一个之前从来没有注意到的问题,在此做一个简单的记录。有关AB包的具体细节知识自行补充,这里不再多说,实在不明白可以参考我之前的文章Unity——浅谈AB包和Unity资源管理和策略。我们直接上干货。图集引用丢失问题不知道是Unity的版本bug还是本来就是这种机制。反正目前,有一个这样的问题:一个打在A包中的资源引用到了某张图片,该图片没有打进任何包,但该图片的图集打进了B包中。本以为,Unity会记录该资源对该图集的引用关系,但实际上

2021-03-25 22:48:07 1526 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 3855 1

原创 DOTween源码学习笔记

DOTween源码学习笔记前言最近抽时间学习了一下DOTween的源码,发现实现方式非常的巧妙。在此记录一下学习笔记。核心思想为什么DOTween看起来那么复杂呢?因为DOTween提供的功能特别多,包括变化队列Sequence、运动轨迹Path、链式编程等等。非常强大的插件。但本质上的核心变化思想就一点:每帧根据时间位置来算出对应ease上的实际变化状态(或者叫变化完成度,范围从0到1),根据这个变化状态设置变化对象的属性(包括位置、颜色、旋转、数值等)。比较曾经有人做过各种Twe

2021-03-15 21:27:45 1497 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 3242 1

原创 Unity资源管理和策略

Unity资源管理常用路径Unity移动端开发中常常会用到四种路径。AssetDatabse在Editor环境下,Unity提供了一个AssetDatabase类,提供了各种各样的资源加载、管理等方法。热更新AB包加载资源加载

2021-02-02 01:51:21 1449 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 19354 5

原创 番茄工作法——总结笔记

前言:最近学习了弗朗西斯科·西里洛(Francesco Cirillo)的番茄工作法,受益匪浅,在此分享自己的所学到的知识和感悟。关键词:我认为番茄工作法的关键词很简单——迭代。为什么说是迭代呢?一个番茄钟就是一个小迭代,一天就是一个大迭代。迭代优秀的地方就在于灵活可变、不断改进。番茄工作法也是一个可以根据自身的特性不断改进、不断优化成最适合自己的一种时间管理方法。是什么:什么是番茄工作法?简单来说,就是列出当天所要做的事情,然后按照番茄钟时间来完成这些事情并记录。番茄钟是一个时间周期,也是一个

2020-08-17 21:15:27 921

原创 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 1256

原创 UGUI文图混合排列问题——Horizontal Layout Group和Content Size Fitter

前言最近在工作中遇到了UGUI文图混合排列的问题,查阅相应资料后发现

2020-05-17 22:13:00 1514

原创 浮点数精度问题——由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 1762

原创 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 6212

原创 Unity3D编辑器扩展2——自定义窗口EditorWindow

前言第二篇U3D的笔记了,希望能一直坚持写下去。什么是EditorWindowEditorWindow就是一种可视化窗口,可以贴在Unity界面的各个位置。比如,我们的场景窗口Scene、游戏窗口Game、资源商店窗口Asset Store、层级窗口Hierarchy等。Unity自带的窗口毕竟有限,所以如果我们想要自定义自己的工具窗口,就需要用到编辑器扩展。第一步首先用Unity...

2020-04-29 20:09:53 1474

原创 Unity3D编辑器扩展1——批量处理资源

前言最近一段时间正在学习Unity的编辑器扩展方面的内容,因此想把所学到的知识以一种方式记录下来。有可能有很多不足的地方,甚至有错误的地方,请大佬们多多提供帮助。什么是编辑器扩展先说说什么是编辑器扩展。通俗来说,编辑器扩展就是在原有的Unity编辑界面中添加各种各样的自定义功能,以达到自己想要的目的。比如,我想在Unity菜单栏下添加一个按钮来实现删除所有图片资源。这就需要用到编辑器扩...

2020-04-28 14:50:24 1219

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除