自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Unity优化总结(持续更新)

工欲善其事,必先利其器。优先利用性能分析工具快速找出性能瓶颈,从瓶颈入手分析性能问题产生原因,可以事半功倍。尽量减少占用的内存(资源体积)和CPU(计算量),首先着重减少总量才能更好的进行后续细节的优化。总量降低后,性能依旧有问题,那么可以考虑时间空间转换的手段。一般情况下,GPU比CPU富余,内存比CPU富余,磁盘比内存富余,分线程比主进程富余。所以一般都是GPU换CPU,内存换CPU,磁盘换内存,利用多线程分担主进程的压力。比如利用GPU Instance可以减少CPU的压力。利用对象池缓存

2020-08-19 19:33:17 2776 10

原创 Unity 关于仿崩坏3部分Bloom(部分泛光)效果实现原理(附源码)

之前写每个物体的材质球控制屏幕bloom效果,由于性能问题,换了另外一种实现方式部分泛光的功能,这个是之前写的,不过性能不行,如果简单的游戏还可以,如果大场景的话就不行了回到正题我这边就研究崩坏3编译过的源码,下面是分析崩坏bloom效果实现1.我看崩坏编译过的源码基本所有shader都会有一个_BloomFactor,这个用于控制泛光强度,用于存储输入屏幕那张图的alpha...

2019-03-02 14:33:39 13057 13

原创 Unity信号干扰shader(参照崩坏3源码翻译剧情对话效果)

最近做的项目是二次元,二次元的标杆就是崩坏3,效果真的好学习崩坏3里面shader最好的方法就是看源码可以AssetStudio来看资源,因为崩坏3资源是没有加密直接可以看 不过shader源码是已经编译好的,其实大概算法都在我已经研究角色身上的shader,这个有空写博客,用到顶点绘制的工具来填充颜色来处理阴影这次我参考崩坏里面的信号干扰的shader之前搞个一个类...

2019-01-24 17:06:15 4301 1

原创 Unity快速适配IOS/安卓刘海屏(又简单又快 适配了O版本和P版本)

刘海屏适配,其实就是知道刘海高度(横屏游戏),来对ui进行偏移所以刘海屏适配的关键是获取刘海高度获取刘海高度有两种方案1.大数据,收集各种型号对应的刘海数据,听说腾讯有些项目这么搞2.代码获取,热门机型获取刘海数据,小众机型不是android p可能无法适配这次我介绍的是代码获取刘海数据 NotchFit是一款Android端的刘海屏适配库,适配了O版本和P版本...

2019-01-03 18:47:49 13660 13

原创 Unity信号干扰Shader

崩坏3这种信号干扰效果用到噪音,其实就是把个噪音shader放到rendertexture对应的材质球就可以实现这个是完全把崩坏3的编译过的源码写出来的https://blog.csdn.net/SnoopyNa2Co3/article/details/86629436噪音里面最关键的代码frac(sin(dot(float2(x, y), float2(12.9898, 78.2...

2018-12-01 16:28:38 5724 19

原创 ugui ui相对位置的计算,以及如何把ui限制在屏幕内

今天写关于ui位置的计算,举个例子:在我之前做的项目中背包的物品都可以点出一个属性面板,这个属性面板的左上角最齐图标的右下角,如图(红是物品图标,白是属性面板) 原理:计算出两个ui的包围盒就可以算出【白image】相对于【红image】的偏差多少坐标,然后用【红image】的position+偏差的坐标赋值给【白image】的世界坐标 如上图的方式,我这边举个例子(【红】的右下角对齐【白】的左

2015-12-29 21:57:29 9785 3

原创 unity 关于深度图优化(drawcall不翻倍)

深度图基础深度图里存放了[0,1]范围的非线性分布的深度值,这些深度值来自NDC坐标。在延迟渲染中,深度值默认已经渲染到G-buffer;深度图可以做什么效果https://www.jianshu.com/p/80a932d1f11e这里已经有详细说明深度图获取在C#中设置Camera.main.depthTextureMode = DepthTextureMode.Depth;在Shader中声明_CameraDepthTexture原理是Unity在背后利用Shade.

2021-03-02 15:28:36 1841 3

原创 关于Unity 部分模拟器和手机出现一闪一闪的花屏问题记录

花屏表现如下图由于某些场景不会,只有特定场景才会,才一个个场景物件排除法定位到带有blendShapes动画网格和skinned mesh renderer的update when offsreen不兼容勾掉update when offsreen就可以这里就记录一下问题...

2020-12-09 20:14:06 2043

原创 Unity 利用animator制作通用伞形攻击范围,3d血条等等

我先提出一个问题如何做一个通用0-180度的攻击扇形?animator的播放接口public void Play(string stateName, [Internal.DefaultValue("-1")] int layer, [Internal.DefaultValue("float.NegativeInfinity")] float normalizedTime);主要看normalizedTime,这个就是某个百分比乘以动画时间作为开始帧播放动画,取值(0-1),不过需要负数才是

2020-09-14 19:20:28 581

原创 关于Unity Loom线程和unity交互

我们都知道非主线程是不能调用unity相关组件但是有些特定情况需要线程里面调用unity例如:用线程加载配置下载资源,需要显示进度条不使用loom处理加一个缓存变量,然后主线程取数据处理进度条使用loom其实原理类似:没使用unity接口还是在线程执行,unity相关方法会被改成回调放到主线程调用下面代码模拟配置加载using UnityEngine;using System.Collections;using UnityEngine.UI;using Syst.

2020-09-12 11:02:58 545

原创 Unity 图片字体制作

一般美术为了达到某个效果,把一部分需要的字美化过虽然可以直接拿图片用,不过遇到那些不固定的字,用image拼起来就闲得很麻烦这时候需要把这些一张张图片字合成一个字体制作流程使用bmfont工具把一张张图片字合成一张大图和文字配置1.ascall码圈0的是鼠标缩放的位置,下面圈起来的48就是对于的ascall2.添加图片字Edit-》OpemImageManagerfile选取图片子id输入ascall码确认就可以3.设置格式设置尺寸,确保能把所有图片字

2020-08-19 19:27:33 689

原创 Unity场景网格合并

网格合并有两种方式以及区别效果都是把使用相同材质球的mesh进行合并静态就是预先处理会增加包体大小,看需求,如果减包体可以考虑使用动态合并1.勾选静态精选合并所有被勾选了“Static”的GameObject,其中的Mesh Filter中的mesh都会被合并到 "Combined Mesha (root: scene)" 中2.使用脚本动态合并 //找到需要合并的节点 GameObject staticObjects = GameObje..

2020-08-19 19:26:58 448

原创 Unity 关于镜面反射和投影阴影实现

话不多说先上图,有镜面反射,投影器方式实现阴影,下雨效果,工程放最后镜面反射镜面反射原理:通俗点说法就是就是在摄象机对称的正下方和主摄象机看同一个焦点,这个反射摄象机看到的东西就是镜面反射的东西,然后这个反射摄象机渲染一张图,扔给地面显示(需要忽略地面层渲染)具体详细说明可以看这个文章:反射原理下面是反射镜头渲染的图片镜面反射优化1.真实项目中不可能直接用摄象机渲染,多数都会采用替换shader方式渲染,主要是角色shader一般都是比较复杂,使用简单的shader替换渲

2020-08-10 19:50:05 1976

原创 关于timeline使用的总结以及遇到的问题

最近搞timeline剧情相关东西timeline很方便,就会傻瓜式,容易上手,就像会声会影一样,就那些时间轴,拖一下看效果那种最大亮点就是可以在非运行模式下预览非运行模式预览方便美术策划调效果,具体使用教程网上多的是可以参考这些文章https://blog.csdn.net/tanyu159/article/details/88607719https://zhuanlan.zhihu.com/p/29188275说一下我的功能需求,就是战斗中参合timeline剧情基本上用

2020-07-18 11:57:06 4948

原创 关于unity客户端防作弊(内存数据被修改)

开发游戏的时候,往往我们需要对一些存放在客户端的重要的内存变量进行加密保护,防止被玩家利用一些修改器,修改其数据从而达到"开挂"的效果。方法很多种我这里使用随机数和位运算异或1.随机数最终数值=原始数值*随机数(每个角色或者副本都是进战斗随机)2.位运算异或简单解析位运算异或位逻辑异或运算将两个运算对象按位进行异或运算。符号为^运算规则:1^1=0;1^0=1;0^0=0 (相同得0,相异得1)结论就是:A^B=C,C^B=AAnti-Cheat Toolkit...

2020-07-18 11:55:17 3200

原创 分享一下如何解决在unity开发过程中遇到的问题

我的工作比较杂,shader要搞,战斗要搞,经常要去解决疑难杂症之前很多东西我直接说出问题答案,我觉得授人鱼还不如授人渔问题分两种1.能在编辑器重现2.不能在编辑器重现,只会在真机出现(大多数不是代码逻辑问题,多数是设置问题)能在编辑器的问题学会百度谷歌英文关键字,或者去unity问答里面搜索,总会找到相关字眼看多了自然懂得什么意思,英文不太行就翻译,看多了自然知道别人说什么东西,虽然不一定会读之前rendertexture格式问题也是谷歌搜索出来很多很多都是可搜索.

2020-06-29 09:02:29 588

原创 Unity 特效扭曲效果(使用command buffer实现)

了解command bufferCommandBuffer携带一系列的渲染命令,可以指定在相机渲染的某个点执行本身命令(包括特殊渲染,保存当前rendertexture等)CommandBuffer可以使用的点看这里(官网文档)具体渲染流程和触发点如下特效扭曲的实现原理以及方案原理:就是抓取特效后面渲染的纹理进行扰动方案1:抓取特效后面渲染的纹理一般用grabpass,根据grabpass进行扰动方案2:利用command buffer在渲染天空盒之后保存一张屏幕纹理(.

2020-06-04 12:04:03 2844 2

原创 Unity 材质设置属性优化

一般我们修改材质球参数是直接拿对于材质球来设置参数,不过还有优化空间使用材质球属性块来代替直接修改材质球属性材质球属性块材质属性块被用于Graphics.DrawMesh和Renderer.SetPropertyBlock两个API,当我们想要绘制许多相同材质但不同属性的对象时可以使用它。例如你想改变每个绘制网格的颜色,但是它却不会改变渲染器的状态。我们来看看Renderer这个类,它包含了Material,SharedMaterial这两个属性;GetPropertyBlock,SetPr

2020-05-14 09:07:23 859

原创 unity 关于特效性能设置

一般游戏例如王者,战双等一下游戏都有粒子性能选项原理:一个特效里面分开很多部分,根据性能设置来显示部分特效如下图如果一个特效不做任何处理兼容低端机又要好看,不是为难制作特效得人吗低端机必须舍弃部分特效,不过不可能做两份特效,工作量都是翻倍最简单得还是配置那些子特效,中高等级用简单说一下实现方式每次播放特效得时候触发一下性能设置脚本特效挂脚本脚本里面有两个列表1.中粒子列表2.高粒子列表列表处理高设置:激活中高粒子中设置:激活中粒子低设置:.

2020-05-11 09:02:00 1171 1

原创 Unity 关于游戏从后台切回来导致部分手机点击错乱的问题

问题小米截屏分享,然后返回游戏点击错乱索尼手机息屏之后再回到游戏,点击错乱具体问题应该activity的点击区域出问题解决方案就是OnApplicationFocus之后调用一下设置分辨率1.备份原来分辨率2.用比例一样的而分辨率不一样的参数设置分辨率3.延时重置原来分辨率 void OnApplicationFocus(bool focusStatus...

2020-04-26 17:49:26 1147

原创 关于2020游戏版号审核经验

最近收到版号审核意见是由北京伯通电子出版社发过来的我总结一下相关问题要开放创建账号功能 要提供玩家命名功能 新手引导功能 游戏内容不能太少(demo级别的应该不行)关卡要3到4章内容,如果有剧情必须要连贯一段剧情敏感词库要完整,不然被测出来漏掉也不行 游戏中的装备武器不能是现实中违规武器(禁用的装备武器) 游戏中不能出现英文,不知道尺度在哪里,就管没有英文最好 游戏中血腥...

2020-02-19 17:00:11 1554

原创 Unity 使用ilruntime热更方案的经验和心得

使用ilruntime的建议如何做可以避免很多坑1.不跨区域继承2.热工工程不继承MonoBehaviour游戏里面绝大部分逻辑基本不用继承MonoBehaviour,如果需要MonoBehaviour的脚本可以放到主工程,例如角色要使用ik,碰撞器检测,资源加载之类的unity相关接口,完全可以当做一个组件放主工程,剩余的逻辑都放在热更工程里面,包括系统,协议,战斗可以参考作...

2020-01-16 16:55:52 3897 3

原创 Unity 处理mono内存(堆内存)泄露问题

先讲解一下mono特性一个很重要的信息:mono内存从系统里面申请的内存不会返回给系统mono内存不足的时候会预申请内存(内存大小不定有可能10m有可能5m)最近优化一个mono内存泄露问题引起mono一直撑大多数都是内存泄露,要不就是一下子申请很大块内存我这里主要说内存泄露,这个更难查现在正常项目很多脚本不继承MonoBehaviour,实例化出来的对象,要及时处理生命周...

2020-01-11 12:11:32 3915 1

原创 unity 记录大量实例化小预设和实例化一个大预设的区别

例如一个超大尺寸的棋盘60*60的棋盘(棋盘以一个方格拼起来)要生成大棋盘第一种方法:动态创建3600个格子第二种方法:把排版好的3600个格子预设实例化添加了不同的方法都添加Profiler数据打印(是用assetbundle资源来测试)第一种打印数据第二种打印数据同样的东西可以看到明显变化由于pc上表现不明显,对比数据来说,在手机优化空间很大看...

2019-12-23 19:49:34 600

原创 unity UGUI性能优化

DrawCall Drawcall优化必须先了解一下drawcall怎么生成,才好优化Drawcall问题其实可以说同一个图集的图形网格能否合并的问题(ps:字体其实也是个图集)举个例子图集:理解为不同颜色的油漆Drawcall:理解为刷油漆次数,每次只刷一种颜色油漆可以看看下图如何刷油漆,每次刷颜色都要刷满整个网格渲染步骤总结用同一个图集的一堆图形...

2019-12-05 15:24:38 745

原创 unity UI粒子实现(不是rendertexture渲染方式)

ui上面展示粒子一般来说有两种方案1.通过rendertexture渲染,可以完美处理层级问题,不过性能不好2.直接放到ui界面调整特效sort in layer,不过如果ui特效穿插多,层级不好管理现在来第三种方法(要2018.2以上版本,我使用2018.4)原理:直接让粒子的网格和贴图在ui基础组件里面渲染注意:这个控件放到粒子上变成一个ui图形控件,不要随意翻转角度,可能...

2019-11-25 19:46:22 2159 4

原创 Unity excel转protobuf工具

这次放出一个excel导protobuf工具先上个图使用方法导出proto以及对应cs文件和配置bytes文件1.设置好上图路径2.一键导出proto(等编译完)3.一键导出数据(数据导出在resources目录下,可以设Assetbundle不过要自己改导出路径)注意删掉要删掉配置表路径下的excel表,以及proto文件,bytes文件,还有unity工程Plu...

2019-10-17 19:20:45 1262

原创 Unity 实现物体上呼吸灯效果Shader

这次说的呼吸灯其实和之前写的流光有点类似,不过比流光更为简单呼吸灯效果其实就是一个周期变化,周期变化就想到一个cos和sin这两个函数原理:最终呼吸效果 = 当前颜色+ 周期变化的数值*呼吸灯颜色如果要部分位置要进行呼吸效果,就和之前流光一样加一个mask图来rgb其中一个通道来处理就行部分呼吸原理:最终呼吸效果 = 当前颜色+ 周期变化的数值*呼吸灯颜色*mask图某个通道原...

2019-08-20 20:08:28 5927

原创 unity Rendertexture不显示半透物体或者粒子特效的解决

我看过雨凇大神是怎么解决半透明在rendertexture问题,直接在渲染模型特效背景加个sprite2d背景,其实这种非常不通用而且使用限制很大。我使用方案参考NGUI写一个给shader可以支持半透明就可以因为以前用过NGUI的Unlit/Premultiplied Colored这个shader,然后换上这个shader,观察效果,模型无描边,粒子也能正常显示所以就有必要看看N...

2019-08-19 17:39:09 6666

原创 Unity 两点之间随机曲线动画

最近遇到一个功能就是导弹到目标点要有随机曲线表现,重点要到目标点那里实现思路用根据时间流逝用sin函数来处理来回曲线的功能(坐标偏移),加个衰减距离(计算坐标偏移大小)先上图,最下方有工程下载地址主要实现代码如下using UnityEngine;using Random = UnityEngine.Random;public enum RandomMoveCoo...

2019-08-14 18:08:25 2581 2

原创 Unity 半透物体(Transparent)写入摄像机深度图(解决半透物体景深不生效)

Transparent渲染队列 默认的camera深度纹理_CameraDepthTexture是不会将队列>2500的材质写进深度纹理的因为景深效果是使用深度图,如果Transparent不能写入深度问题,景深就会失效为了解决深度失效问题,最重要是解决Transparent写入深度纹理解决方案原来半透明效果不动情况下加多一个材质球,这个材质球的shader(Opaque)只...

2019-08-09 18:07:58 3499 2

原创 Unity游戏代码优化(持续更新)

虽然说美术资源优化会提高性能,不过好的代码可以提高很多性能这些大部分都出现在我的项目,一些不好的代码,功能是可以就是用了比较耗性能的实现方式1.在Update里面一直new例子:最近看到同事写的定时器,他是用字典存储,然后每次update都new list(keys)来遍历定时器和移除定时器因为foreach下不能移除字典数据,所以用这种new keys//错误写法publ...

2019-08-08 10:58:11 543

原创 Unity UI图片实现模糊功能

原理:其实就是获取图片,然后根据偏移获取不同像素,然后根据不同的透明度叠加得出一张模糊图我这里没有优化正常情况用一个pass就足够先上个图拖动材质球Blur Size参数就有如上图效果下面完整的shader,注意材质球要调渲染层3000就可以使用(PS:移动平台验证过可以使用)Shader "Effect/ImageBlur"{ Properties { _Ma...

2019-08-06 20:20:48 1798 2

原创 unity c#字符串转表达式(公式)并计算结果(支持移动平台)

现在记录一下我在git找到的字符串转公式直接结算结果其实在githud搜索Expression Parser就能找到相关的https://github.com/deniszykov/csharp-eval-unity3d把git的工程里面的GameDevWare.Dynamic.Expressions.dll放到unity的Plugins就可以开始使用下面是测试代码 ...

2019-07-03 19:30:22 1635

原创 关于Dotween被误杀(表现是没播放完卡住)的问题

最近查看同事一个飘字卡住问题,飘字的动画用dotween实现飘字卡住的唯一原因是被误杀唯一调试方法就是的OnKill回调添加打印和OnComplete回调添加打印,结果发现动画还没播放完这是被杀了,关键这个误杀不是飘字里面,而是其他模块调用了kill触发的例如:actionSequence= DOTween.Sequence();我用这个做飘字另外一个模块也声明...

2019-06-25 10:37:05 3333

原创 unity 把网格(mesh)绘制到UI上,可用于小地图

之前有个版本利用navmesh绘制小地图UGUI利用navmesh绘制小地图这次使用场景的网格来绘制小地图实现原理获取mesh的顶点和三角面数据 然后通过VertexHelper来进行绘图工程下载地址链接:https://pan.baidu.com/s/1jH857JCjAqjsB3RkxaW9jA提取码:x0kj代码逻辑都比较简单,直接上图先深紫色是场...

2019-05-30 16:53:20 3491

原创 unity UGUI内存优化

关于UI内存优化主要是图集优化方面1.尽可能少图集带进战斗里面,战斗中的图集尽量保持两张左右(战斗ui和头像)2.大图脱离图集使用rawimage(背景图,尺寸偏大的图片)3.图集尽可能在1024*1024范围内,尽可能使用九宫格 正常按照1920*1080切图,放到图集里面,整到1024*1024一般问题不大4.关于冗余图或者图集放的不规范可以使用工具来进行优化,图集工具...

2019-05-27 17:21:21 826 1

原创 unity UniWebView位置偏移问题

UniWebView的代码里面使用屏幕坐标来进行绘制假如我们有自定义分辨率的情况,下面以2436*1125为例我们这边限定高度是1080,所以自定义之后分辨率2338*1080由于UniWebView是用完整分辨率来绘制,如果在自定义算出来的屏幕坐标,是相对完整分辨率有偏差,导致UniWebView偏移了解决方法是根据自定义设置计算出偏移量来,以上面为例算出来的屏幕坐标*1125/...

2019-05-10 09:02:29 969

原创 unity 获取Grid Layout Group一行控件数量

一般UI适配控件的长度会变长或者变短Grid Layout Group我们直接选用Constraint 约束 —— Flexible灵活的( 按照父物体长宽自动横竖行 )例如一个道具面板一行有5个道具,如果在更长的分辨率下可能有6,7个行如果这些道具不用循环滚动列表是没什么大问题,如果用到循环列表要计算一排多少个来进行计算循环所以这个获取一排数量极为重要...

2019-05-09 14:45:08 2155 1

原创 unity 获取地方位置和天气(简单版本)

不说这么多,先上图,最后有工程下载地址上图可以看出来城市和对应的天气,没错我是在东莞工作的程序员1.地方我们可以用百度地图根据ip来获取http://api.map.baidu.com/location/ip?ak=bretF4dm6W5gqjQAXuvP0NXW6FeesRXb&coor=bd09ll地方获取比较简单,直接用www可以直接获取 void ...

2019-05-05 19:28:34 3877 11

空空如也

空空如也

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

TA关注的人

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