
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 · 2222 阅读 · 0 评论 -
使用stencil test实现UI上的“迷雾”效果
0x00 需求在UI上实现一种类似战争迷雾的效果。0x01分析需求战争迷雾是来自于RTS游戏,[此处可以插入链接]并经由MOBA游戏发扬广大的一种在地图上增加一种不透明的迷雾,造成信息的不对称从而增加游戏的趣味性。那么第一个想法是寻找战争迷雾插件,导入,使用之。0x02实现方案对比从实现原理上分类,战争迷雾有两种实现方法:屏幕后处理, 遮罩擦除法屏幕后处理中,最成熟的当属Fog Of War,在Unity Asset Store中搜索,第一个跳出的就是这个插件,作者:Aseh原创 2021-10-26 09:59:34 · 1368 阅读 · 0 评论 -
【Unity Shader】实现粒子根据到摄像机的距离渐变
0x00需求特效同学需要一个能随着距离摄像机距离变化,而变化(颜色)的特效需求。0x01分析需求原创 2021-06-15 20:14:11 · 1963 阅读 · 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 · 9957 阅读 · 8 评论 -
Unity项目在pc和ios设备上黑屏的原因探究
0x00由于项目上线了windows平台的项目(别问我为什么,咱也不敢说,咱也不敢问),由Unity5.4.6升级到Unity2018的过程中,遇到了各种各样的坑,本文为避坑指南1。本项目没有使用HDR和抗锯齿,由于查这几个问题查到吐血,前后用了3天的时间,本文充满了怨气,行文非常啰嗦,需要快速解决问题的,可以直接拉到最后看结论。0x01 法线贴图项目在unity2018出了新的androi...原创 2019-11-27 09:01:21 · 6144 阅读 · 2 评论 -
【Unity3d基础】Unity中关于Device Filter的选择问题
引言目前工作的Unity版本是5.4.1f,发布Android版本.apk的时候,对包体的大小有些疑问,就上网查了下资料,发现Build Settings——Player Settings——Other Settings——Device Filter会对包体大小有影响。当前Unity的默认配置目前的版本下默认的选项为:FAT(ARMv7+x86),代表支持ARM架构和x原创 2016-12-05 16:05:43 · 5025 阅读 · 0 评论 -
【Unity Shader实战】利用凹凸纹理和边缘光模拟全息投影的效果
0x00 序言 项目需要模型在展示时,可以拥有类似全息投影的效果,类似一些科幻电影或者是高科技的场景。本文分析了如何利用凹凸纹理和边缘光来近似模拟这种效果。 0x01 效果图 0x02 基本概念 本次的shader部分主要修改了surface shader,其中的一些基本概念:SurfaceOutput是预定义的输出结构:struct SurfaceOutput { half原创 2017-09-02 01:11:02 · 6224 阅读 · 0 评论 -
Lua爬坑手记
0x00 爬坑说明书 最近编写游戏的客户端逻辑,部分以Lua为主,介于使用的Lua的经验尚浅,也就边写边看《Lua程序设计》。书中有些知识点真的是过目即忘,发现Lua还是有一些坑,下面权当作是Lua的爬坑笔记。0x01 Lua的类型 最近一次在处理UGUI中ScrollView控件动态生成的对象时,利用动态生成的对象后缀来作为后续计算的索引。代码类似:function ConvertGameOb原创 2017-09-12 21:33:52 · 948 阅读 · 0 评论 -
Unity中的层级以及渲染顺序
0x00 写在前面 在使用unity3d开发游戏项目时,层级的问题往往伴随着UI的开发,而在引入了3D模型、粒子特效后,层级的问题就变得有些扑朔迷离了,甚至会牵扯到Unity的渲染顺序。本篇主要从UGUI的角度出发,浅析UGUI中影响层级的因素。后续会分析UI与3D对象,UI与粒子特效之间层级的关系。0x01 影响层级的因素 前提条件: - Camera-Clear Flags - Ca原创 2017-10-17 21:51:19 · 17307 阅读 · 0 评论 -
Unity Shader-渲染队列,ZTest,ZWrite,Early-Z
原文地址:Unity Shader-渲染队列,ZTest,ZWrite,Early-Z简介在渲染阶段,引擎所做的工作是把所有场景中的对象按照一定的策略(顺序)进行渲染。最早的是画家算法,顾名思义,就是像画家画画一样,先画后面的物体,如果前面还有物体,那么就用前面的物体把物体覆盖掉,不过这种方式由于排序是针对物体来排序的,而物体之间也可能有重叠,所以效果并不好。所以目前更加常用的方式是z-buffe转载 2017-08-31 23:43:35 · 3488 阅读 · 9 评论 -
Unity Shader入门基础
0x00 基本概念 “Shader(着色器)实际上就是一小段程序,它负责将输入的Mesh(网格)以指定的方式和输入的贴图或者颜色等组合作用,然后输出。绘图单元可以依据这个输出来将图像绘制到屏幕上。输入的贴图或者颜色等,加上对应的Shader,以及对Shader的特定的参数设置,将这些内容(Shader及输入参数)打包存储在一起,得到的就是一个Material(材质)。之后,我们便可以将材质赋予合适原创 2017-09-03 23:12:07 · 691 阅读 · 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 · 1854 阅读 · 0 评论 -
【NGUI】限制UIDargObject的拖拽区域(技能双摇杆的实现)
引言 最近在开发项目中的双摇杆功能,即利用摇杆释放指向性或者区域性的技能。之前介绍过利用NGUI开发的虚拟摇杆功能Unity3d中利用NGUI实现虚拟摇杆,本次在上文的基础上介绍一下如何限制滑块的移动区域。需求分析 在拖拽滑块的基础上,增加区域限制。拖拽到限制区域边缘时,滑块会有被拉回的动作。先看效果图 黑色区域为panel的区域,可以看到拖拽滑块基本被限制在panel区域内。如何实现原创 2017-03-10 00:43:49 · 1525 阅读 · 0 评论 -
【Unity3d基础】Unity3d自动生成asset bundle name(2)
引言:上一篇文章介绍了,利用System.IO的接口,收集路径下所有文件夹的方式设置asset bundle name,这一次介绍另一种方法。原理:经同事提醒,发现Unity有原生的资源管理器AssetPostprocessor,官方描述:AssetPostprocessor lets you hook into the import pipeline and run scri原创 2016-12-17 19:08:24 · 3222 阅读 · 0 评论 -
【Unity3d基础】Unity3d 中如何旋转一张2D图片到指定角度
引言近日在开发项目中,遇到一个这样的需求:将炮弹旋转至开火方到受击方所成的角度上,简言之就是将一枚炮弹旋转到开或者到敌人的方向上。如何旋转2D贴图?查阅了很多资料,都是关于四元数,欧拉角的问题。有点杀鸡焉用牛刀的意味,于是自己摸索着利用已有的接口用一种简单的方法实现。(注意,我的需求存在于2D场景内)用到的接口Vector3.Angle原创 2016-07-06 23:26:51 · 18157 阅读 · 0 评论 -
【Unity3d基础】Unity换装系统(2)
引言上一篇介绍了替换mesh数据的换装方法。本次继续介绍换装系统,换装系统除了替换外观,通常还要考虑到性能的因素。本篇主要介绍通过CombineMeshes对skinnenMesh进行合并,达到对性能进行优化的目的。CombineMeshes该接口是将不同的mesh合并到同一个mesh中以达到优化性能的目的。其函数原型如下:public void CombineMeshes(C原创 2017-02-11 17:44:20 · 3300 阅读 · 0 评论 -
深入理解NGUI(Unity)显示特效的问题
原文地址:深入理解NGUI(Unity)显示特效的问题粒子特效显示差异引出问题游戏开发时常会需要在UI里显示一个特效,我们将特效在UI里显示出来后,发现效果不符合预期。该特效在普通3D场景下,效果如下:图1但在UI里效果偏差比较大:图2该特效是由多个粒子器组合而成。对于显示差异,我们对比了其中一个粒子器在渲染时的Mesh细节:图3如上图左边是正确效果,右边是UI中错误效果。原本怀疑粒子系统的运动坐转载 2017-11-10 15:03:51 · 3113 阅读 · 0 评论 -
【Unity Shader入门练习】调整屏幕的亮度、饱和度和对比度
0x00 序言 本文是《Unity Shader入门精要》读书笔记,最近接触到项目中用到了模糊处理,经过查阅资料,发觉模糊处理是屏幕后处理技术中的一种,就从屏幕后处理技术开始学习。[使用的Unity版本:5.6.1f1]0x01效果图 0x02 屏幕后处理的定义 屏幕后处理,通常指的是在渲染完整个场景得到屏幕图像后,再对这个图像一系列操作,实现各种屏幕特效。 想要实现屏幕后处理的基础在于得到原创 2017-07-31 23:36:15 · 3626 阅读 · 0 评论 -
【Unity3D问题之EnhanceScollView选择角色3D循环滚动效果实现】
需求呈现3D效果(2D素材)选择角色效果滚动保证层级,缩放比例,间距正常跟随循环滚动这个界面需求一般也会有游戏会采用(貌似有挺多)如何实现实现技术关键点如何控制每个Item之间的间隔(位置),缩放比例,差值平滑如何实现item层级关系正确显示("离" 屏幕近的层级高)如何实现循环滚动下面一一讲述当前Demo采用的方法说到实现的核心,需要知道Unity3D中提供的一个叫转载 2017-11-21 13:54:14 · 2144 阅读 · 0 评论 -
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 · 3993 阅读 · 2 评论 -
Unity Shadow 如何实现超远的光源阴影
目的:如何实现超远的光源的阴影,最好可以兼顾近景与远景的阴影。(本文仅作为日常工作的调研记录)测试场景(只有一个平行光作为主光源):Shadow Distance = 50时,近景可以看到角色和树下的阴影,远处的山上没有阴影。Shadows的配置如下:查阅了官方资料与其他资料后,提出了两种方案:方法1:可以将近景的阴影与远景的阴影分开处理,通过动态设置Sha...原创 2019-05-29 19:17:01 · 5869 阅读 · 0 评论 -
【Unity Shader】标准光照模型总结
逐顶点与逐像素光照逐顶点光照[per-vertex lighting] [vertex shader]在每个顶点上计算光照,然后会在渲染图元内部进行线性插值,最后输出成像素颜色,由于顶点数目往往远小于像素数目,因此逐顶点光照的计算量往往要小于逐像素光照。逐像素光照[per-pixel lighting][fragment shader]以每个像素为基础,得到它的法线(可以是对顶点法线插值得...原创 2019-05-26 21:46:37 · 6191 阅读 · 0 评论 -
Unity3d防止按键劫持导致无法响应点击事件
起因项目上线之后,接到一些玩家反馈,在登录界面点击没有响应,无法登陆的。小米,魅族等应用商店上的差评也大多集中于此:心里一万只草泥马在奔腾!!!排查问题首先,排查逻辑代码,找出是谁写的代码,大概会被拿去祭天吧!然而并没有,逻辑代码并没有问题。然后,搜索相关的信息,也没什么有用的信息,直到无意中在Unity论坛中看到这篇文章:https://forum.unity.com/threads/5-6-1...原创 2018-04-29 09:21:25 · 3386 阅读 · 2 评论 -
Unity3D Mesh小课堂(四)MeshRenderer的material和sharedMaterial
原文地址:Unity3D Mesh小课堂(四)MeshRenderer的material和sharedMaterialMeshRenderer(网格渲染器)从MeshFilter(网格过滤器)获得几何形状,并根据Mesh进行渲染,而渲染所需要的贴图信息就来自与Material。而MeshRenderer的Material类型的变量有两个:material和sharedMaterial。二者之间有什...转载 2018-05-07 08:23:26 · 3667 阅读 · 0 评论 -
UGUI drawcall 优化实录
写在前面去年参加uwa day 2017时,耳闻ui之于项目的影响,很多项目由于人少事多赶进度,而在开发中有很多粗放之处,ui就常常成为很多项目的性能短板。上个月项目上线,发现很多UI的性能堪忧,抽时间对于优化做了些优化。unity官方及其他很多渠道已经有很多关于ui优化的总结提纲,本文意在成为一本类似check list的手册,记录优化中碰到的实际问题。原理本文是基于UGUI的优化,先搞清楚几个...原创 2018-05-17 00:58:54 · 8619 阅读 · 3 评论 -
同一个Unity项目打开两个Unity Editor实例
coffeecato写在前面: 有时测试功能,需要多开unity3d进行,而unity3d无法同时打开同一个项目,找到了这个解决方案,亲测可用,方便简单,欢迎大家品尝! 在项目开发过程中,经常会遇到一个Unity项目需要打开两个Unity Editor实例的需求。而默认情况下一个项目只能打开一个Unity Editor。而最常见最暴力的方法就是一个项目copy两份,但这种做法对代码更新十转载 2018-04-24 15:42:49 · 10551 阅读 · 15 评论 -
利用Animation Curve实现列表的曲线滚动
0x00 需求的诞生 在上一个版本的开发过程中,美术同事提出了按照《悬空城》的活动列表的形式制作列表的滚动。由于UGUI先有的scroll View 并不支持这种形式,只能自己动手了。 左侧的活动列表滚动是沿着曲线滚动的。0x01 问题的分析 难点有两个: 1.如何构造出列表的曲线,其实曲线就是其中的每个元素所在的x坐标不同,从纵向的角度看构成了一条连续的曲线。 2.何时刷新列表原创 2018-01-25 21:12:45 · 3859 阅读 · 8 评论 -
理解Unity3D中的四种坐标体系
coffeecato写在前面:本文比较了unity3d中的四种坐标系,在使用unity3d开发的过程中,已经多次被坐标转换之类的问题卡住,这篇文章可以说是系统的对四种坐标系进行了总结,结合实际的使用经验收获良多。转载 2018-01-02 11:11:35 · 4262 阅读 · 1 评论 -
Unity中Sprite和UI Image的区别
coffeecato写在前面: 本文确实不错,作者用以说明自动生成网格的示图非常具有代表性,从drawcall的生成过程分析性能开销的重点,引出了overdraw和达到GPU像素填充率限制的原因,从中也可以看出作者对这个主题的理解颇有深度。查看作者的个人自述,居然是个2012年毕业的小伙子,后生可畏啊!翻译本文对自己也是个考验。 英文水平捉急,如果错误请多多指正。原文:UNITY SPRITES翻译 2017-11-14 23:41:58 · 25120 阅读 · 2 评论 -
【Unity3d基础】Unity换装系统(1)
引言最近项目需要开发换装系统,做了一些前期的调研。换装系统主要应用与MMORPG游戏中,除了常规的换衣服,发型,翅膀之类的,现在一些次时代的MMORPG游戏加入了捏脸,改变五官等比较复杂的换装系统。本次介绍通过替换Mesh数据来实现换装的方法。期望效果模型1模型2期望可以在游戏运行时将模型1的外观替换为模型2的外观。实现原理通过收集模型2中对应的mesh信息,替原创 2016-12-23 01:27:44 · 6880 阅读 · 0 评论 -
【Unity3d基础】Unity3d中利用NGUI实现虚拟摇杆
引言最近的项目中需要开发虚拟摇杆功能,由于历史原因对于FingerGesture较为熟悉,故没有采用EasyTouch。NGUI中的UIDragObjectNGUI中有一个UIDragObject.cs组件,添加到GameObject,即可实现简单的拖拽动作。其中的Target需要设置被拖拽的对象,代码注释如下: /// /// Target object that原创 2016-11-30 23:47:15 · 6783 阅读 · 0 评论 -
NGUI中的事件响应流程
引言仅对NGUI中对于事件的响应流程做一简单的总结。正文原创 2016-11-27 19:07:54 · 677 阅读 · 0 评论 -
Unity3d编辑器中复制资源路径到剪贴板
今天分享一个在项目中为了便于配置添加到右键菜单的小功能。目的:方便配置资源路径操作方法:1.在Unity Editor内右键点击待操作的资源;2.再右键菜单内单击"Copy Asset Path to ClipBoard"3.再需要该资源路径的地方,右键鼠标——黏贴,或者Ctrl + V。源代码: // 复制资源路径到剪贴板 [Menu原创 2017-02-08 21:02:11 · 3145 阅读 · 0 评论 -
Unity的旋转
原文地址:Unity的旋转1、gameObject的旋转由transform组件统一管理,需要研究透彻它的几个旋转相关的API; 旋转是以物体整体(包括自身坐标系)为单位的,会改变物体位置、朝向,但不会改变物体中各部件的相对位置;2、三要素:旋转轴、旋转方向、旋转角度 旋转轴=定点+轴向量(它是以“定点自身坐标系”来定义转载 2016-12-07 15:26:06 · 915 阅读 · 0 评论 -
Unity3d中FingerGesture与NGUI的事件响应问题
引言当前项目中同时用到了NGUI与FingerGestures两个插件,对于按键的响应会有一些麻烦。如何控制事件响应的顺序?通常情况下,触发按下事件应当优先响应UI层的事件,首先想到的是调整脚本的执行顺序;然而却发现调整脚本的执行顺便并不会改变同一事件响应两次的情况,由于NGUI与FingerGestures直接由Unity.Touch获取输入事件。原创 2016-11-01 00:32:41 · 1258 阅读 · 0 评论 -
AssetGraph的使用小结
引言这几天尝试使用AssetGraph,网上苦于AssetGraph的相关资料很少,只有一篇比较完善的文章:AssetGraph - 好用的AssetBundle打包工具,自己摸索花费了一些时间,做一些记录。解决的问题 AssetGraph目的在于将打assetBundle简单化,图形化。最关键的部分在于Filter结点和Bundlizer结点,Filter结点的主要目的是原创 2016-10-20 23:59:12 · 7913 阅读 · 1 评论 -
Unity3D中脚本的执行顺序和编译顺序
Unity3D中脚本的执行顺序和编译顺序在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行。与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题。事件函数的执行顺序先说一下执行顺序吧。 官方给出的脚本中事件函数的执行顺序如下图: 我们可以做一个小实验来测试一下:转载 2016-10-30 21:45:44 · 2145 阅读 · 0 评论 -
AssetGraph - 好用的AssetBundle打包工具
原文地址:AssetGraph - 好用的AssetBundle打包工具作者:Unity Japan翻譯:Kelvin LoAssetGraph是一個用來針對AssetBundle打包的可視化工具。它的目的是用來建立一個架構在自訂規則下,閱讀容易的AssetBundle管理表。 Usage 1.Add Nodes從Window裡可以呼转载 2016-10-17 23:12:34 · 2618 阅读 · 0 评论 -
Unity 中的旋转
原文地址:Unity 中的旋转参考1、关于万向节死锁2、【Unity技巧】四元数(Quaternion)和旋转一、Unity中的Rotation 在unity中,旋转的表示的常用方法之一,是一个三维向量(x、y、z):图1、Unity中的旋转 实际上这是欧拉角。这三个分量分别是绕x轴、y轴、z轴转载 2016-10-12 11:59:24 · 2911 阅读 · 0 评论 -
<Unity3D>Unity3D中LineRenderer的使用
LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意LineRenderer渲染出的线段的两个端点是3D世界中的点,即他是属于世界坐标(World Point)中的。 LineRenderer是以组件形成存在的,首先我们新建一个空的G转载 2016-09-26 15:57:59 · 19280 阅读 · 5 评论