
Unity3d
文章平均质量分 87
coffeecato
思从深而行从简
展开
-
Unity 反射从入门到跑偏(BoxProjection 到 Fake Interior)
前言:最近在学习反射相关的内容,从反射的原理到Cube Map的生成及使用,Reflection Probe的原理及使用,重点研究了Box Projection Reflection Probe与Fake Interior(假室内效果)的关系,及其背后的原理。运行环境:Unity 2020.3.18f1Render Pipeline: URP测试场景:Unity 3D Sample Scene(URP)环境映射 Environment Mapping环境映射可以分为静态的(Cube Map)与原创 2022-05-16 20:30:00 · 2314 阅读 · 0 评论 -
使用stencil test实现UI上的“迷雾”效果
0x00 需求在UI上实现一种类似战争迷雾的效果。0x01分析需求战争迷雾是来自于RTS游戏,[此处可以插入链接]并经由MOBA游戏发扬广大的一种在地图上增加一种不透明的迷雾,造成信息的不对称从而增加游戏的趣味性。那么第一个想法是寻找战争迷雾插件,导入,使用之。0x02实现方案对比从实现原理上分类,战争迷雾有两种实现方法:屏幕后处理, 遮罩擦除法屏幕后处理中,最成熟的当属Fog Of War,在Unity Asset Store中搜索,第一个跳出的就是这个插件,作者:Aseh原创 2021-10-26 09:59:34 · 1390 阅读 · 0 评论 -
【Unity Shader】实现粒子根据到摄像机的距离渐变
0x00需求特效同学需要一个能随着距离摄像机距离变化,而变化(颜色)的特效需求。0x01分析需求原创 2021-06-15 20:14:11 · 1995 阅读 · 2 评论 -
【Unity Shader】半透明特效在RenderTexture上的显示问题
0x00现象下图可见,模型的翅膀部分有黑色的矩形。游戏项目中,需要模型显示在UI上,这里采用了RenderTexture的方案,可以参考使用RenderTexture实现3D模型与UI的组合显示。RenderCamera Background(0,0,0,0)0x01寻找原因首先查看RenderTexture的绘制是否正常由于粒子特效常常会对alpha进...原创 2020-03-21 22:27:37 · 10072 阅读 · 8 评论 -
Unity项目在pc和ios设备上黑屏的原因探究
0x00由于项目上线了windows平台的项目(别问我为什么,咱也不敢说,咱也不敢问),由Unity5.4.6升级到Unity2018的过程中,遇到了各种各样的坑,本文为避坑指南1。本项目没有使用HDR和抗锯齿,由于查这几个问题查到吐血,前后用了3天的时间,本文充满了怨气,行文非常啰嗦,需要快速解决问题的,可以直接拉到最后看结论。0x01 法线贴图项目在unity2018出了新的androi...原创 2019-11-27 09:01:21 · 6172 阅读 · 2 评论 -
Unity使用替换shader渲染(Rendering with Replaced Shaders)
作用:在渲染时,通过SetReplacementShader控制实时生效的shader,可以在运行时修改部分or全部object的shader来实现特定的效果。函数说明:Camera.SetReplacementShaderpublic void SetReplacementShader(Shader shader, string replacementTag);Descrip...原创 2019-07-08 10:06:41 · 4048 阅读 · 2 评论 -
Unity Shadow 如何实现超远的光源阴影
目的:如何实现超远的光源的阴影,最好可以兼顾近景与远景的阴影。(本文仅作为日常工作的调研记录)测试场景(只有一个平行光作为主光源):Shadow Distance = 50时,近景可以看到角色和树下的阴影,远处的山上没有阴影。Shadows的配置如下:查阅了官方资料与其他资料后,提出了两种方案:方法1:可以将近景的阴影与远景的阴影分开处理,通过动态设置Sha...原创 2019-05-29 19:17:01 · 5899 阅读 · 0 评论 -
【Unity Shader】标准光照模型总结
逐顶点与逐像素光照逐顶点光照[per-vertex lighting] [vertex shader]在每个顶点上计算光照,然后会在渲染图元内部进行线性插值,最后输出成像素颜色,由于顶点数目往往远小于像素数目,因此逐顶点光照的计算量往往要小于逐像素光照。逐像素光照[per-pixel lighting][fragment shader]以每个像素为基础,得到它的法线(可以是对顶点法线插值得...原创 2019-05-26 21:46:37 · 6220 阅读 · 0 评论 -
UGUI drawcall 优化实录
写在前面去年参加uwa day 2017时,耳闻ui之于项目的影响,很多项目由于人少事多赶进度,而在开发中有很多粗放之处,ui就常常成为很多项目的性能短板。上个月项目上线,发现很多UI的性能堪忧,抽时间对于优化做了些优化。unity官方及其他很多渠道已经有很多关于ui优化的总结提纲,本文意在成为一本类似check list的手册,记录优化中碰到的实际问题。原理本文是基于UGUI的优化,先搞清楚几个...原创 2018-05-17 00:58:54 · 8654 阅读 · 3 评论 -
Unity3D Mesh小课堂(四)MeshRenderer的material和sharedMaterial
原文地址:Unity3D Mesh小课堂(四)MeshRenderer的material和sharedMaterialMeshRenderer(网格渲染器)从MeshFilter(网格过滤器)获得几何形状,并根据Mesh进行渲染,而渲染所需要的贴图信息就来自与Material。而MeshRenderer的Material类型的变量有两个:material和sharedMaterial。二者之间有什...转载 2018-05-07 08:23:26 · 3714 阅读 · 0 评论 -
Unity3d防止按键劫持导致无法响应点击事件
起因项目上线之后,接到一些玩家反馈,在登录界面点击没有响应,无法登陆的。小米,魅族等应用商店上的差评也大多集中于此:心里一万只草泥马在奔腾!!!排查问题首先,排查逻辑代码,找出是谁写的代码,大概会被拿去祭天吧!然而并没有,逻辑代码并没有问题。然后,搜索相关的信息,也没什么有用的信息,直到无意中在Unity论坛中看到这篇文章:https://forum.unity.com/threads/5-6-1...原创 2018-04-29 09:21:25 · 3421 阅读 · 2 评论 -
同一个Unity项目打开两个Unity Editor实例
coffeecato写在前面: 有时测试功能,需要多开unity3d进行,而unity3d无法同时打开同一个项目,找到了这个解决方案,亲测可用,方便简单,欢迎大家品尝! 在项目开发过程中,经常会遇到一个Unity项目需要打开两个Unity Editor实例的需求。而默认情况下一个项目只能打开一个Unity Editor。而最常见最暴力的方法就是一个项目copy两份,但这种做法对代码更新十转载 2018-04-24 15:42:49 · 10589 阅读 · 15 评论 -
利用Animation Curve实现列表的曲线滚动
0x00 需求的诞生 在上一个版本的开发过程中,美术同事提出了按照《悬空城》的活动列表的形式制作列表的滚动。由于UGUI先有的scroll View 并不支持这种形式,只能自己动手了。 左侧的活动列表滚动是沿着曲线滚动的。0x01 问题的分析 难点有两个: 1.如何构造出列表的曲线,其实曲线就是其中的每个元素所在的x坐标不同,从纵向的角度看构成了一条连续的曲线。 2.何时刷新列表原创 2018-01-25 21:12:45 · 3876 阅读 · 8 评论 -
理解Unity3D中的四种坐标体系
coffeecato写在前面:本文比较了unity3d中的四种坐标系,在使用unity3d开发的过程中,已经多次被坐标转换之类的问题卡住,这篇文章可以说是系统的对四种坐标系进行了总结,结合实际的使用经验收获良多。转载 2018-01-02 11:11:35 · 4283 阅读 · 1 评论 -
【Unity3D问题之EnhanceScollView选择角色3D循环滚动效果实现】
需求呈现3D效果(2D素材)选择角色效果滚动保证层级,缩放比例,间距正常跟随循环滚动这个界面需求一般也会有游戏会采用(貌似有挺多)如何实现实现技术关键点如何控制每个Item之间的间隔(位置),缩放比例,差值平滑如何实现item层级关系正确显示("离" 屏幕近的层级高)如何实现循环滚动下面一一讲述当前Demo采用的方法说到实现的核心,需要知道Unity3D中提供的一个叫转载 2017-11-21 13:54:14 · 2155 阅读 · 0 评论 -
Unity中Sprite和UI Image的区别
coffeecato写在前面: 本文确实不错,作者用以说明自动生成网格的示图非常具有代表性,从drawcall的生成过程分析性能开销的重点,引出了overdraw和达到GPU像素填充率限制的原因,从中也可以看出作者对这个主题的理解颇有深度。查看作者的个人自述,居然是个2012年毕业的小伙子,后生可畏啊!翻译本文对自己也是个考验。 英文水平捉急,如果错误请多多指正。原文:UNITY SPRITES翻译 2017-11-14 23:41:58 · 25192 阅读 · 2 评论 -
深入理解NGUI(Unity)显示特效的问题
原文地址:深入理解NGUI(Unity)显示特效的问题粒子特效显示差异引出问题游戏开发时常会需要在UI里显示一个特效,我们将特效在UI里显示出来后,发现效果不符合预期。该特效在普通3D场景下,效果如下:图1但在UI里效果偏差比较大:图2该特效是由多个粒子器组合而成。对于显示差异,我们对比了其中一个粒子器在渲染时的Mesh细节:图3如上图左边是正确效果,右边是UI中错误效果。原本怀疑粒子系统的运动坐转载 2017-11-10 15:03:51 · 3148 阅读 · 0 评论 -
Unity中的层级以及渲染顺序
0x00 写在前面 在使用unity3d开发游戏项目时,层级的问题往往伴随着UI的开发,而在引入了3D模型、粒子特效后,层级的问题就变得有些扑朔迷离了,甚至会牵扯到Unity的渲染顺序。本篇主要从UGUI的角度出发,浅析UGUI中影响层级的因素。后续会分析UI与3D对象,UI与粒子特效之间层级的关系。0x01 影响层级的因素 前提条件: - Camera-Clear Flags - Ca原创 2017-10-17 21:51:19 · 17353 阅读 · 0 评论 -
Lua爬坑手记
0x00 爬坑说明书 最近编写游戏的客户端逻辑,部分以Lua为主,介于使用的Lua的经验尚浅,也就边写边看《Lua程序设计》。书中有些知识点真的是过目即忘,发现Lua还是有一些坑,下面权当作是Lua的爬坑笔记。0x01 Lua的类型 最近一次在处理UGUI中ScrollView控件动态生成的对象时,利用动态生成的对象后缀来作为后续计算的索引。代码类似:function ConvertGameOb原创 2017-09-12 21:33:52 · 958 阅读 · 0 评论 -
Unity Shader入门基础
0x00 基本概念 “Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适原创 2017-09-03 23:12:07 · 700 阅读 · 0 评论 -
【Unity Shader实战】利用凹凸纹理和边缘光模拟全息投影的效果
0x00 序言 项目需要模型在展示时,可以拥有类似全息投影的效果,类似一些科幻电影或者是高科技的场景。本文分析了如何利用凹凸纹理和边缘光来近似模拟这种效果。 0x01 效果图 0x02 基本概念 本次的shader部分主要修改了surface shader,其中的一些基本概念:SurfaceOutput是预定义的输出结构:struct SurfaceOutput { half原创 2017-09-02 01:11:02 · 6244 阅读 · 0 评论 -
Unity Shader-渲染队列,ZTest,ZWrite,Early-Z
原文地址:Unity Shader-渲染队列,ZTest,ZWrite,Early-Z简介在渲染阶段,引擎所做的工作是把所有场景中的对象按照一定的策略(顺序)进行渲染。最早的是画家算法,顾名思义,就是像画家画画一样,先画后面的物体,如果前面还有物体,那么就用前面的物体把物体覆盖掉,不过这种方式由于排序是针对物体来排序的,而物体之间也可能有重叠,所以效果并不好。所以目前更加常用的方式是z-buffe转载 2017-08-31 23:43:35 · 3499 阅读 · 9 评论 -
【Unity Shader入门练习】调整屏幕的亮度、饱和度和对比度
0x00 序言 本文是《Unity Shader入门精要》读书笔记,最近接触到项目中用到了模糊处理,经过查阅资料,发觉模糊处理是屏幕后处理技术中的一种,就从屏幕后处理技术开始学习。[使用的Unity版本:5.6.1f1]0x01效果图 0x02 屏幕后处理的定义 屏幕后处理,通常指的是在渲染完整个场景得到屏幕图像后,再对这个图像一系列操作,实现各种屏幕特效。 想要实现屏幕后处理的基础在于得到原创 2017-07-31 23:36:15 · 3640 阅读 · 0 评论 -
【NGUI源码剖析】深入理解NGUI的drawcall
引言上篇【NGUI源码剖析】NGUI的drawcall简单认识了NGUI中的drawcall。借着近来工作更替的间隙,本文在之前的基础上做一点深入的分析: - UIPanel工作流程图 - 如何生成drawcall - widgets的生成及作用 - drawcall的合并 UIPanel的工作流程 无论是UIDrawCall还是UIWidget的流程,都离不开UIPane原创 2017-07-10 18:33:57 · 4761 阅读 · 0 评论 -
【Unity技巧】Unity中的优化技术
coffeecato写在前面:从CPU和GPU的角度介绍unity优化技术很全面的一篇文章,读过收获良多。转自:【Unity技巧】Unity中的优化技术写在前面这一篇是在Digital Tutors的一个系列教程的基础上总结扩展而得的~Digital Tutors是一个非常棒的教程网站,包含了多媒体领域很多方面的资料,非常酷!除此之外,还参考了Uni转载 2017-06-29 00:11:20 · 737 阅读 · 0 评论 -
Unity3d资源管理分析
转自:Unity3d资源管理分析基本信息美术资源应导出为AssetBundle文件。这种AssetBundle有两种存储方式:可以是未压缩的,也可以使用7z算法压缩,默认压缩。以我手头的一个蒙皮动画角色为例,压缩后文件大小由800K减少到260K。导出过程中各个成分占的文件比例会在Logs中打印出来,以供分析和优化。AssetBundle有下面两个主要的加载方法:Asset转载 2017-06-26 22:48:50 · 934 阅读 · 0 评论 -
使用RenderTexture实现3D模型与UI的组合显示
引言 游戏中常见的功能如角色创建选择,NPC对话等功能中,需要3D模型与UI的组合显示,该如何实现呢? 如何实现 首先想到添加一个3D camera将3D模型画出来,利用Camera中的Target Texture属性来缓存绘制的3D形象,再设置相应的位置,旋转等属性。实现环境 利用NGUI\Examples\Scenes\Example X - Character的场景来进行实验。原创 2017-06-16 21:13:19 · 9061 阅读 · 1 评论 -
【NGUI源码剖析】NGUI如何优化drawcall数量
引言 接上一篇文章对UIPanel的分析。定量的分析哪些因素会影响NGUI drawcall的增减。 SortWidgets FillAllDrawCalls的部分代码 if (mSortWidgets) SortWidgets(); // 对widgets进行排序 for (int i = 0; i < widgets.Count; ++i)原创 2017-06-05 23:20:54 · 2192 阅读 · 0 评论 -
【NGUI源码剖析】NGUI的drawcall
前言 在使用unity3d开发实际的项目中,性能优化一直是一项不得不考虑的重点,而其中UI的优化又是绕不过去的坎,很多看似简单的UI为何会占用大量的cpu开销?本文以NGUI这套UI的解决方案为例,从源码出发,分析影响性能的原因,看清问题的本质,对症下药。NGUI的drawcall 在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。这一过程是逐个物体进行的,对于每个物原创 2017-06-03 23:12:27 · 1957 阅读 · 2 评论 -
【NGUI】头顶血条(2D与3D的实现)
前言 游戏中的头顶血条是一种常见的小功能,一般游戏会要求做2D的头顶血条,这是因为这样能保证UI的大小不变,图片和文字不会产生变形引起的其他效果;反过来,3D的头顶血条会由于透视的原因会有近大远小的效果,看起来会更真实。 实现 资源的制作上,2D血条与3D血条都一样,需要注意的是,实现3D血条时需要将场景camera的CullingMask选中血条所在的图层即可,同时将UI camera的cu原创 2017-05-20 17:25:06 · 5278 阅读 · 0 评论 -
Unity 与 NGUI 坐标转换原理
本文转自:Unity 与 NGUI 坐标转换原理本文转自http://blog.youkuaiyun.com/huutu 转载请带上 http://www.thisisgame.com.cn在游戏中最常用到坐标转换的就是制作人物头顶的血条/名字 之类的显示,Unity提供了摄像机以下API供我们使用:1、将世界坐标转换到屏幕坐标[csharp] view转载 2017-05-20 17:21:47 · 1355 阅读 · 0 评论 -
【设计模式】从命令模式到录像(replay)系统
引言 这几天看到《游戏变成模式》中的到命令模式一章,这个模式说起来并不是很熟,想着大概也像观察者模式,单例之类的,被用了很多次却不自知吧,没想到还真的对我有所启发。 命令模式 命令模式,将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 如果一个命令对象可以做(do)一些事情,那么就应该可以很轻松地撤销(undo)它们。撤销这原创 2017-05-08 22:45:04 · 2816 阅读 · 0 评论 -
再议Unity3D中的Awake(),OnEnable()和Start()
引言 近来遇到了一个问题,排查到最后,发现问题的原因在于,对于Unity原生函数执行顺序的理解还不到位。之前转载过一篇介绍Unity原生函数执行顺序的文章Unity3D中脚本的执行顺序和编译顺序 单纯的讨论一个GameObject的Awake在Start函数执行是没什么实际意义的。当遇到动态加载对象,或者相互引用时,情况要复杂一些。 官方介绍 First Scene Load These原创 2017-04-23 23:51:02 · 23569 阅读 · 0 评论 -
Unity中GameObject.activeInHierarchy和GameObject.activeSelf的区别
引言 昨天在工作中调用GameObject.active时看到有这样的提示”GameObject.active is obsolete. Use GameObject.SetActive(), GameObject.activeSelf or GameObject.activeInHierarchy.”发现Unity推荐使用activeInHierarchy和activeSelf的方法来使用。原创 2017-04-15 17:12:28 · 10137 阅读 · 0 评论 -
【Unity Shader】NGUI中图标的灰化处理
NGUI图片灰化无法通过自带的功能实现。 UIButton的disable状态如下图: 如果想实现整体的灰化效果,需要改写NGUI自带的shader文件,修改后的效果如图: 修改NGUI原生的Unlit - Transparent Colored.shader文件Shader "Unlit/Transparent Colored"{ Properties {原创 2017-03-16 00:30:29 · 1873 阅读 · 0 评论 -
【NGUI】限制UIDargObject的拖拽区域(技能双摇杆的实现)
引言 最近在开发项目中的双摇杆功能,即利用摇杆释放指向性或者区域性的技能。之前介绍过利用NGUI开发的虚拟摇杆功能Unity3d中利用NGUI实现虚拟摇杆,本次在上文的基础上介绍一下如何限制滑块的移动区域。需求分析 在拖拽滑块的基础上,增加区域限制。拖拽到限制区域边缘时,滑块会有被拉回的动作。先看效果图 黑色区域为panel的区域,可以看到拖拽滑块基本被限制在panel区域内。如何实现原创 2017-03-10 00:43:49 · 1537 阅读 · 0 评论 -
【NGUI】实现半圆形进度条,技能CD效果
半圆形进度条 首先将资源图片打进atlas图集,在场景上创建一个新的sprite。资源是一张半圆形的进度条,如下图。如果要实现进度条的效果,只需实现纵向的遮挡即可。通过UISPRITE的相关属性即可实现。 下面学习一下UISprite的相关属性: Type: Smple:除了显示内容从图集里面获取外,其他都和Texture一样的绘制 Sliced:这个模式支持九宫格拉伸,让四个角落的原创 2017-02-24 00:34:21 · 2679 阅读 · 0 评论 -
【Unity3d基础】Unity换装系统(2)
引言上一篇介绍了替换mesh数据的换装方法。本次继续介绍换装系统,换装系统除了替换外观,通常还要考虑到性能的因素。本篇主要介绍通过CombineMeshes对skinnenMesh进行合并,达到对性能进行优化的目的。CombineMeshes该接口是将不同的mesh合并到同一个mesh中以达到优化性能的目的。其函数原型如下:public void CombineMeshes(C原创 2017-02-11 17:44:20 · 3334 阅读 · 0 评论 -
Unity3d编辑器中复制资源路径到剪贴板
今天分享一个在项目中为了便于配置添加到右键菜单的小功能。目的:方便配置资源路径操作方法:1.在Unity Editor内右键点击待操作的资源;2.再右键菜单内单击"Copy Asset Path to ClipBoard"3.再需要该资源路径的地方,右键鼠标——黏贴,或者Ctrl + V。源代码: // 复制资源路径到剪贴板 [Menu原创 2017-02-08 21:02:11 · 3163 阅读 · 0 评论 -
Unity3d中Material与ShareMaterial引用的区别
转自:Unity教程之-Unity3d中Material与ShareMaterial引用的区别我们在使用Unity引擎的时候,有时候需要去修改某个物体上的Material,在Unity的Renderer类里,提供了两个方法借口供我们使用。Renderer.material和Renderer.sharedMaterial那么这两货有什么区别呢!Renderer.material转载 2016-12-26 11:11:40 · 8279 阅读 · 0 评论