
游戏开发
文章平均质量分 75
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 评论 -
[Unity]屏幕空间(视口)坐标(viewport coordinate)的几种计算方法对比分析
前言:本本的主要目的在于对比分析几种计算屏幕空间坐标的方法,顺便梳理了一遍坐标在不同阶段的变换。其中特别对比了SV_Postion语义及TEXCOORD0传递参数的异同,同时分析了ComputeScreenPos这个怪异的函数的本质。运行环境:Unity 2019.4.10f1Graphics API: Direct3D11效果图:代码:本文的说明主要与代码相结合,下面的几种方法都亲测可用。// https://blog.youkuaiyun.com/coffeecato/.原创 2022-03-04 13:42:36 · 2699 阅读 · 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项目在pc和ios设备上黑屏的原因探究
0x00由于项目上线了windows平台的项目(别问我为什么,咱也不敢说,咱也不敢问),由Unity5.4.6升级到Unity2018的过程中,遇到了各种各样的坑,本文为避坑指南1。本项目没有使用HDR和抗锯齿,由于查这几个问题查到吐血,前后用了3天的时间,本文充满了怨气,行文非常啰嗦,需要快速解决问题的,可以直接拉到最后看结论。0x01 法线贴图项目在unity2018出了新的androi...原创 2019-11-27 09:01:21 · 6172 阅读 · 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 评论 -
同一个Unity项目打开两个Unity Editor实例
coffeecato写在前面: 有时测试功能,需要多开unity3d进行,而unity3d无法同时打开同一个项目,找到了这个解决方案,亲测可用,方便简单,欢迎大家品尝! 在项目开发过程中,经常会遇到一个Unity项目需要打开两个Unity Editor实例的需求。而默认情况下一个项目只能打开一个Unity Editor。而最常见最暴力的方法就是一个项目copy两份,但这种做法对代码更新十转载 2018-04-24 15:42:49 · 10589 阅读 · 15 评论 -
GPU图形绘制管线
图形绘制管线的三个主要阶段##1、应用程序阶段:使用高级编程语言(C、C++、Java)进行开发,主要和CPU、内存打交道。诸如碰撞检测,空间八叉树更新,视锥裁剪等经典算法都在此阶段进行。在该阶段的末端,几何体数据(顶点坐标、法线量、纹理坐标、纹理等)通过数据总线传送到图形硬件。2、几何阶段:主要负责顶点坐标变换、光照、裁剪、投影以及屏幕隐射,该阶段基于GPU进行运算,在该阶段的末端得到了经过变换...转载 2018-03-08 14:37:51 · 764 阅读 · 0 评论 -
利用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 评论 -
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简明教程
原文地址:LUA简明教程文章来自:酷 壳 – CoolShellcoffeecato写在前面:最近在学习Lua,看了陈浩大侠的文章还是觉得收益良多,重要的知识点都有提炼出来并加以简单的栗子。本文做一份简明的回顾是一篇很好的材料。只可惜对于Javascript不甚了解,陈浩大侠在文中类比Javascript之处无法感同身受。转载 2017-09-14 18:34:34 · 663 阅读 · 0 评论 -
Unity Shader-渲染队列,ZTest,ZWrite,Early-Z
原文地址:Unity Shader-渲染队列,ZTest,ZWrite,Early-Z简介在渲染阶段,引擎所做的工作是把所有场景中的对象按照一定的策略(顺序)进行渲染。最早的是画家算法,顾名思义,就是像画家画画一样,先画后面的物体,如果前面还有物体,那么就用前面的物体把物体覆盖掉,不过这种方式由于排序是针对物体来排序的,而物体之间也可能有重叠,所以效果并不好。所以目前更加常用的方式是z-buffe转载 2017-08-31 23:43:35 · 3499 阅读 · 9 评论 -
【NGUI源码剖析】深入理解NGUI的drawcall
引言上篇【NGUI源码剖析】NGUI的drawcall简单认识了NGUI中的drawcall。借着近来工作更替的间隙,本文在之前的基础上做一点深入的分析: - UIPanel工作流程图 - 如何生成drawcall - widgets的生成及作用 - drawcall的合并 UIPanel的工作流程 无论是UIDrawCall还是UIWidget的流程,都离不开UIPane原创 2017-07-10 18:33:57 · 4761 阅读 · 0 评论 -
【NGUI】头顶血条(2D与3D的实现)
前言 游戏中的头顶血条是一种常见的小功能,一般游戏会要求做2D的头顶血条,这是因为这样能保证UI的大小不变,图片和文字不会产生变形引起的其他效果;反过来,3D的头顶血条会由于透视的原因会有近大远小的效果,看起来会更真实。 实现 资源的制作上,2D血条与3D血条都一样,需要注意的是,实现3D血条时需要将场景camera的CullingMask选中血条所在的图层即可,同时将UI camera的cu原创 2017-05-20 17:25:06 · 5278 阅读 · 0 评论 -
【设计模式】从命令模式到录像(replay)系统
引言 这几天看到《游戏变成模式》中的到命令模式一章,这个模式说起来并不是很熟,想着大概也像观察者模式,单例之类的,被用了很多次却不自知吧,没想到还真的对我有所启发。 命令模式 命令模式,将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 如果一个命令对象可以做(do)一些事情,那么就应该可以很轻松地撤销(undo)它们。撤销这原创 2017-05-08 22:45:04 · 2816 阅读 · 0 评论 -
【游戏设计】任务系统进化论
引言 近来在新的项目中负责开发任务系统,起初自己做了一份设计,后来经与同事的交流,发现从系统设计上还有诸多可以改善的空间,这里加以记录。 背景&需求 MMORPG游戏中的任务系统远了说从《征途》《传奇》《魔兽世界》开始,一直占据着串联游戏内容,增加游戏粘性,丰富游戏内容等等很多本身功能之外的责任。所以不无可避免的,任务系统会与游戏的中的各种其他模块打交道,从设计的角度上如何避免过度耦合就是一个原创 2017-05-03 08:43:05 · 1479 阅读 · 0 评论 -
【设计模式】从观察者模式到事件委托
引言 很久之前就接触过观察者模式,最近在项目开发中,发现C#从语言层面上新增了event关键字,一时理不清观察者模式和委托之前的关系。通过《大话设计模式》和《游戏编程模式》重新复习理解一下如何从观察者模式过度到事件委托机制。 观察者模式 定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己原创 2017-03-30 09:09:56 · 831 阅读 · 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基础】Unity换装系统(1)
引言最近项目需要开发换装系统,做了一些前期的调研。换装系统主要应用与MMORPG游戏中,除了常规的换衣服,发型,翅膀之类的,现在一些次时代的MMORPG游戏加入了捏脸,改变五官等比较复杂的换装系统。本次介绍通过替换Mesh数据来实现换装的方法。期望效果模型1模型2期望可以在游戏运行时将模型1的外观替换为模型2的外观。实现原理通过收集模型2中对应的mesh信息,替原创 2016-12-23 01:27:44 · 6928 阅读 · 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 · 3233 阅读 · 0 评论 -
【Unity3d基础】Unity3d中自动生成asset bundle name
引言:在unity3d的实际项目开发中,由于资源的增删改频繁,手动设置asset bundle name是一项繁琐且容易出错的工作,所以衍生出了开发自动化工具的需求。工作原理:以文件夹为目标,设置asset bundle name,在目标文件夹内的文件都会打进同一个asset bundle。实现原理:通过遍历Asset路径下的所有文件夹,收集所有的子文件夹列表,然后顺序设置as原创 2016-12-14 23:05:16 · 3466 阅读 · 0 评论 -
Unity的旋转
原文地址:Unity的旋转1、gameObject的旋转由transform组件统一管理,需要研究透彻它的几个旋转相关的API; 旋转是以物体整体(包括自身坐标系)为单位的,会改变物体位置、朝向,但不会改变物体中各部件的相对位置;2、三要素:旋转轴、旋转方向、旋转角度 旋转轴=定点+轴向量(它是以“定点自身坐标系”来定义转载 2016-12-07 15:26:06 · 926 阅读 · 0 评论 -
【Unity3d基础】Unity3d中利用NGUI实现虚拟摇杆
引言最近的项目中需要开发虚拟摇杆功能,由于历史原因对于FingerGesture较为熟悉,故没有采用EasyTouch。NGUI中的UIDragObjectNGUI中有一个UIDragObject.cs组件,添加到GameObject,即可实现简单的拖拽动作。其中的Target需要设置被拖拽的对象,代码注释如下: /// /// Target object that原创 2016-11-30 23:47:15 · 6812 阅读 · 0 评论 -
Unity3d中FingerGesture与NGUI的事件响应问题
引言当前项目中同时用到了NGUI与FingerGestures两个插件,对于按键的响应会有一些麻烦。如何控制事件响应的顺序?通常情况下,触发按下事件应当优先响应UI层的事件,首先想到的是调整脚本的执行顺序;然而却发现调整脚本的执行顺便并不会改变同一事件响应两次的情况,由于NGUI与FingerGestures直接由Unity.Touch获取输入事件。原创 2016-11-01 00:32:41 · 1271 阅读 · 0 评论 -
unreal3的viewport和client
原文地址:unreal3的viewport和client名字里带viewport/client的类不少,以及相关的类:FViewportFrame、FViewportFViewportClient/UScriptViewportClient/UGameViewportClientUClient/UWindowsClientUEngine/UGameEngine/UEdi转载 2016-10-30 23:40:21 · 1049 阅读 · 0 评论 -
Unity3D中脚本的执行顺序和编译顺序
Unity3D中脚本的执行顺序和编译顺序在Unity中可以同时创建很多脚本,并且可以分别绑定到不同的游戏对象上,它们各自都在自己的生命周期中运行。与脚本有关的也就是编译和执行啦,本文就来研究一下Unity中脚本的编译和执行顺序的问题。事件函数的执行顺序先说一下执行顺序吧。 官方给出的脚本中事件函数的执行顺序如下图: 我们可以做一个小实验来测试一下:转载 2016-10-30 21:45:44 · 2160 阅读 · 0 评论 -
AssetGraph的使用小结
引言这几天尝试使用AssetGraph,网上苦于AssetGraph的相关资料很少,只有一篇比较完善的文章:AssetGraph - 好用的AssetBundle打包工具,自己摸索花费了一些时间,做一些记录。解决的问题 AssetGraph目的在于将打assetBundle简单化,图形化。最关键的部分在于Filter结点和Bundlizer结点,Filter结点的主要目的是原创 2016-10-20 23:59:12 · 7928 阅读 · 1 评论 -
AssetGraph - 好用的AssetBundle打包工具
原文地址:AssetGraph - 好用的AssetBundle打包工具作者:Unity Japan翻譯:Kelvin LoAssetGraph是一個用來針對AssetBundle打包的可視化工具。它的目的是用來建立一個架構在自訂規則下,閱讀容易的AssetBundle管理表。 Usage 1.Add Nodes從Window裡可以呼转载 2016-10-17 23:12:34 · 2631 阅读 · 0 评论 -
Unity 中的旋转
原文地址:Unity 中的旋转参考1、关于万向节死锁2、【Unity技巧】四元数(Quaternion)和旋转一、Unity中的Rotation 在unity中,旋转的表示的常用方法之一,是一个三维向量(x、y、z):图1、Unity中的旋转 实际上这是欧拉角。这三个分量分别是绕x轴、y轴、z轴转载 2016-10-12 11:59:24 · 2930 阅读 · 0 评论 -
<Unity3D>Unity3D中LineRenderer的使用
LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意LineRenderer渲染出的线段的两个端点是3D世界中的点,即他是属于世界坐标(World Point)中的。 LineRenderer是以组件形成存在的,首先我们新建一个空的G转载 2016-09-26 15:57:59 · 19307 阅读 · 5 评论 -
Unity3D笔记十八 GL图像库
作者:PEPE 出处:http://pepe.cnblogs.com/ 1、绘制2D图像的时需要使用GL.LoadOrtho()方法来将图形映射到平面中。 2、所有绘制相关的内容都要写在OnPostRender()方法中。 3、有关GL图像库的脚本需要绑定到Hierarchy视图中Camera上,否则无法显示绘制的图像。 4、在GL图像库的转载 2016-09-26 15:55:00 · 5404 阅读 · 0 评论 -
Unity3D占用内存太大的解决方法
该文章来自用户转载 点击阅读原文Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化.Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要转载 2016-07-20 11:50:17 · 1251 阅读 · 0 评论 -
【Unity技巧】四元数(Quaternion)和旋转
原文地址:【Unity技巧】四元数(Quaternion)和旋转目录(?)[+]四元数介绍旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的转载 2016-07-12 20:27:19 · 749 阅读 · 0 评论 -
【Unity3d基础】Unity3d 中如何旋转一张2D图片到指定角度
引言近日在开发项目中,遇到一个这样的需求:将炮弹旋转至开火方到受击方所成的角度上,简言之就是将一枚炮弹旋转到开或者到敌人的方向上。如何旋转2D贴图?查阅了很多资料,都是关于四元数,欧拉角的问题。有点杀鸡焉用牛刀的意味,于是自己摸索着利用已有的接口用一种简单的方法实现。(注意,我的需求存在于2D场景内)用到的接口Vector3.Angle原创 2016-07-06 23:26:51 · 18183 阅读 · 0 评论