游戏开发
文章平均质量分 85
宇仔TuT
Swift中文社区负责人/软件工程师/炒股爱好者/业余摄影爱好者,目前就职于微软
展开
-
Unity+NGUI打造网络图片异步加载与本地缓存工具类(二)
这里判断缓存文件是否存在使用的是url.GetHashCode()方法,因为我们的图片文件名采用的是原URL的哈希码直接作为文件名来保存,重名概率可以忽略不计,也缩短了文件名的长度提高效率,这个做法借鉴于 iOS开源框架EGOImageView。如果是第一次加载图片,这个URL对应的文件不存在,那么我们就去原URL下载图片然后赋值给控件如果缓存文件夹中已有该文件,直接读取加载由于前文的铺垫,我们的工具类已经是MonoBehaviour的单例子类,所以可以使用unity的异步函数StartCorutin原创 2014-07-23 13:40:50 · 7297 阅读 · 12 评论 -
解读Unity中的CG编写Shader系列9——镜面反射
镜面反射与观察视角的联系系列6中我已经说明了材料表面的平整程度决定了镜面反射的明显与否,现实生活中找不到绝对平的物体表面,所以我们引入一个概念,每一种材料的表面的平整程度为Nshininess, n越大越平整,越小越粗糙,理想状态下n无穷大的时候是绝对的镜面反射,也就是前面引用的文字中所说的你想看到光源,则必须从光线的反射角完全重合去看。结合上图,也就是说我们的材料表面越平整,系数n趋近于无穷大的时候,想要看到光源,则必须从射线R所在的方向去看。当材料表面的粗糙程度更大时,即使我们在R附近,也能看原创 2014-09-23 18:59:22 · 9762 阅读 · 0 评论 -
(连载)边喝咖啡边学Unity——第二章 预备知识体系(2)
什么是矩阵?mn个数排成m行n列形成的矩形表称作一个mxn矩阵。行向量与列向量由于向量我们可以看做是一种特殊的矩阵,即只有一行或者只有一列的特殊矩阵。因此我们把只有一行的向量称为行向量,只有一列的向量称为列向量。注意我们的程序在存储矩阵的时候其实是将mn个数存放在一个线性表中,因此获取一个矩阵中的第几行第几列的元素有一个优先原则。这里特别提出,Unity在Matrix4x4这个类的手册中有这样一句原创 2014-11-27 20:44:51 · 5087 阅读 · 2 评论 -
(连载)边喝咖啡边学Unity开发——前言
前言很高兴此前在我的博客上连载的《解读Unity中CG编写Shader》系列广受好评,但是由于个人工作原因跟新到第10篇后没能及时继续,关于夭折的第10篇《环境映射与立方贴图》我会尽量补上。而关于现在打算写一本编程指南的书籍的想法在我心中逐渐萌生,驱动我的原因是目前市场上大部分相关书籍很少有系统性的、全局性的、联系紧密且通俗易懂的书籍,纵观很多unity书籍不知其作者是否没有用心,感觉草草成书的较原创 2014-11-24 10:40:49 · 2999 阅读 · 0 评论 -
(连载)边喝咖啡边学Unity——第一章 Unity概述
作为本书的第一句正文,在这个醒目的位置再次想告诉大家,我的想法是大家把这本书当做一本闲书来读,同时也希望启发读者,因此目录结构只保留章节,不会再细分。重要的概念会特殊地提出来。 本章其实应该是枯燥无味的,对于Unity已经有所了解的读者可以自行跳过。鉴于本书的完整性不得不废话一章。 Unity是什么? 首先读者需要清楚地知道,Unity是一种工具或者说软件,至目前成书之时已退出5.0版本。也可以说Unity是一款优秀的3D游戏引擎,其对于底层图形接口的封装为开原创 2014-11-24 10:43:00 · 5880 阅读 · 17 评论 -
(连载)边喝咖啡边学Unity——第二章 预备知识体系
第二章 预备知识体系——本章涉及空间数学、解析几何、线性代数、计算机图形学、算法、数据结构等众多基础学科。同上一章相比,虽然枯燥,但是绝不能称为废话之章,即使粗略的看一遍,也比直接跳过来的好,详细地读完,会让读者以后的开发之路走的更加平坦。并且本章的知识不仅仅对您的Unity游戏开发有帮助,对于大部分软件开发人员都是大有作用的。作为传统3D游戏编程来讲,需要运用到的知识面非常之广,涉及到的学科特别之多。而通常讲编程的书籍,会弱化数学知识,讲数学的书籍,会弱化编程方面的知识。这就是我在第一章所提到的数学原创 2014-11-24 17:25:37 · 6278 阅读 · 7 评论 -
开发日记:KBEngine+Unity+php做个扑克小游戏-DAY1
写这篇博客的时候其实我已经开发了一大部分了~php 部分,unity 部分 都已经差不多了 ,由于KBEngine(简称kbe)完全没接触过,其实很多地方php部分的逻辑都可以直接挪到kbe中完成。实际为了开发效率,同样的逻辑目前我还是用php写起来飞快,因此项目的组成有一些小奇葩现在正在琢磨kbe和 php 部分的衔接问题:1.进入房间时,调用进入接口 /room/join 2.准备状态,调用接原创 2016-11-04 14:04:04 · 5208 阅读 · 1 评论 -
开发日记:KBEngine+Unity+php做个扑克小游戏-DAY2
怎么办,这很尴尬,为啥呢,因为kbe的某些原因让我放弃了使用它所以本打算继续更新的,说一下原因:在DAY1中我希望kbe能够开启一个http服务,并让php端做一个web请求将消息传递给对应的用户,可是这个http服务我是写起来了,发送消息的函数也写出来(花了不少时间,kbe的注释和文档都不多,特别是kbe把BaseHttpServer这个python库另外弄了个名字,用http.server i原创 2016-11-12 05:50:07 · 7372 阅读 · 1 评论 -
关于一个游戏消息服务器的点点滴滴,以及关于程序员的“情怀”
原来的KBE系列不更了,因为我放弃了KBE,所以。。。关于一个游戏消息服务器的点点滴滴,以及关于程序员的“情怀” 我从Blued离职回重庆已经快一年了,我竟然在家“玩”了一年,期间有不少朋友问我你还好吧你没死吧?我自己也惊讶,作为一名程序员,我竟然可以在家思考人生思考一年,不出去赚钱!但是毋庸置疑经过我这么长时间的“领悟”,我终于知道,没钱真难啊~~ 我思考什么是情怀,什么是现实我思考什么是敏锐原创 2016-11-13 09:53:42 · 7273 阅读 · 9 评论 -
解读Unity中的CG编写Shader系列10——光滑的镜面反射(冯氏着色)
前文完成了最基本的镜面反射着色器,单平行光源下的逐顶点着色(per-vertex lighting),又称为古罗着色(Gouraud shading)。这篇文章作为后续讨论更光滑的镜面反射方式,逐像素着色(per-pixcel lighting),又称为冯氏着色(Phong shading)逐像素着色Per-Pixel Lighting (冯氏着色Phong Shading)别把冯氏着色与冯氏反射模型搞混淆了,前问提到了冯氏反射模型,冯氏反射模型是为使计算机模拟接近真实的物体表面光泽提出的模型,即环境原创 2014-09-24 17:20:04 · 6380 阅读 · 2 评论 -
解读Unity中的CG编写Shader系列8——多光源漫反射
前文中完成最简单的漫反射shader只是单个光源下的漫反射,而往往场景中不仅仅只有一个光源,那么多个光源的情况下我们的物体表面的漫反射强度如何叠加在一起呢?前文打的tag "LightMode"="ForwardBase"又是什么意思呢?Unity内置的DiffuseShader,也就是我们创建一个Material出来时默认的Shader也是多光源的,所以这篇文章完成的shader与默认的diffuse shader基本效果一致。首先引入几个概念渲染路径 Rendering PathUnity在处原创 2014-09-23 17:07:10 · 6612 阅读 · 1 评论 -
解读Unity中的CG编写Shader系列7——漫反射
如果前面几个系列文章的内容过于冗长缺乏趣味着实见谅,由于时间原因前面的混合部分还没有写完,等以后再补充,现在开始关于反射的内容了。折射与反射在物理世界中,光的反射与折射往往是同时存在的,光源由真空或者空气中射入一种材料,光在进入这种材料的同时就发生了折射,折射的程度与各个介质的折射率有关,使光的传播路线偏离原来的路线;继而如果光在通过不同传播介质的表面时,会像乒乓球一样弹回来,我们人眼能够看到东西,都是因为东西会反射光源,如果一种物质无法反射光,或者没有光源,我们就看不到东西。同样对于不同的材料,光原创 2014-09-22 15:43:15 · 5970 阅读 · 3 评论 -
Unity+NGUI打造网络图片异步加载与本地缓存工具类(一)
我们在移动端的开发中,异步网络图片加载用的非常的多,在unity当中虽然有AssetBundle的存在,一般是先加载好游戏资源然后再进入场景,但是还有不少地方能够用到异步网络图片的加载以及其缓存机制。我之前也写过两个版本的ios中的异步网络图片加载helper类,所以今天按照同样的思路,也想做一个好用的helper类给大家使用以及简单的说下实现原理。首先我们加载一张网络图片,要做的事情分步来讲为:0.开始之前设置一张固定的图片作为占位图(placeholder),表示我们的图片还没加载好,来填充当前图原创 2014-07-22 19:36:29 · 5191 阅读 · 2 评论 -
Unity3D中的第三人称镜头的脚本控制
好久没有敲Blog了,谢谢大家的留言、关注、私信等支持,但是我好像已经没有办法让自己继续写以前的博客系列了,因为我发现网上关于unity3D的内容太少了,所以我无法自拔地想写U3D相关的文章!!!第三人称视角第三人称视角是什么?很简单,CS就是一种第一人称视角游戏,玩家没有办法看到自己的角色形象,只能观察除开自己之外的游戏内容。第三人称视角那么就明显是能够看到玩家所控制的角色的一种视角。而且大部分游戏的镜头不能固定不动,肯定是要跟随猪脚,能看到猪脚,但是保持一定的高度和距离,这样的视角才是最好的原创 2014-05-29 23:54:32 · 22151 阅读 · 3 评论 -
解读Unity中的CG编写Shader系列5——理论知识
经过前面的系列文章中的三个例子,尽管代码简单,但是我想应该还有些地方没有100%弄明白,我们现在得回过头来补充一些必备的数学、图形学知识1、图形管道第一个例子中我有提到顶点着色和片段着色在整个图形绘制过程中属于一个环节,整个过程叫做管道,这个管道的所有环节包括:在整个管道中,只有顶点着色与片段着色是可编程的,顶点数据和帧缓存是具体的数据,剩下的环节是固定功能的环节,即不能用cg去编程的环节。[图片]2、数据流[图片]原创 2014-08-22 16:40:02 · 5022 阅读 · 2 评论 -
解读Unity中的CG编写Shader系列6——不透明度与混合
1.不透明度当我们要将两个半透的纹理贴图到一个材质球上的时候就遇到混合的问题,由于前面的知识我们已经知道了片段着色器以及后面的环节的主要工作是输出颜色与深度到帧缓存中,所以两个纹理在每个像素上的颜色到底以怎样的形式混合在一起最后输出到帧缓存中是我们现在首要讨论的内容。1.混合(blending)上一篇文章中的管道环节中的“逐帧操作”环节中的一项操作就是混合操作,可见混合操作是不可编程的固定功能环节。在混合操作中,我们将片段着色器中计算出来的颜色称之为 “源颜色”,帧缓存中对应的像素已经存在原创 2014-08-22 19:38:08 · 5322 阅读 · 9 评论 -
解读Unity中的CG编写Shader系列2——shader的输入输出参数
上一篇文章的例子中我们可以看到顶点着色器的输出参数可以说是直接作为了片段着色器的形参传递过来,那么不由得一个问题浮现出来,顶点着色器的形参是从何处传递过来的?顶点着色器的形参是gameObject 的meshRenderer组件将所有的mesh数据按每一帧一次传递给OpenGL。这中间的过程常常被称作一次draw call,往往一次性传输大量mesh信息作为一次draw call 比多次传输少量mesh信息引起多次draw call更加效率。而在上一个例子中我们只接受了MeshRenderer传递原创 2014-08-19 16:17:46 · 13149 阅读 · 9 评论 -
解读Unity中的CG编写Shader系列3——表面剔除与剪裁模式
在上一个例子中,我们得到了由mesh组件传递的信息经过数学转换至合适的颜色区间以颜色的形式着色到物体上。这篇文章将要在此基础上研究片段的擦除(discarding fragments)和前面剪裁、后面剪裁(front face culling and back face culling)来达到透明效果。当一个mesh组件的信息被传递后,我们可以通过代码决定哪些部分渲染(render)出来,而哪些部分不要,这个过程就像把那些不要的部分剔除了,我们看不到他,虽然他的mesh信息还在,但是我们的GPU不会去处理原创 2014-08-19 18:40:23 · 10405 阅读 · 3 评论 -
解读Unity中的CG编写Shader系列4——unity中的圆角矩形shader
上篇文章中我们掌握了表面剔除和剪裁模式这篇文章将利用这些知识实现一个简单的,但是又很常用的例子:把一张图片做成圆角矩形例3:圆角矩形Shader好吧我承认在做这个例子的时候走了不少弯路,由于本人对矩阵的知识掌握已经悉数还给老师,所以一开始用了一些笨办法计算圆角矩形区域。我们知道TEXTCOORD0是一个以对象为坐标系的坐标,并且范围在该坐标的第一象限,取值为(0,0)到(1,1)那么我们把每一张图片都看做一张1X1大小的矩形我们要在1X1大小的矩形中擦除4个角,应该是这样:以左上角为例,原创 2014-08-21 17:08:14 · 9101 阅读 · 6 评论 -
解读Unity中的CG编写Shader系列1——初识CG
前提知识点:1.CG代码必须用CGPROGRAM。。。ENDCG括起来2.顶点着色器与片段着色器的主函数名称可随意,但需要再#pragma vert 与#pragma fragment中声明并且与主函数名完全匹配,shader才会找到入口3.float4是一种压缩数组,float4 vert与float vert[4]严格意义上讲不同,虽然都是存放4个float,但float4作为向量类型做点乘、内积等处理更快速4.语义 :变量除了变量名与数据类型之外,还在:后声明其语义例子一:RGB立方体原创 2014-08-18 19:40:55 · 8066 阅读 · 3 评论 -
SurfaceShader中的那些坑-finalcolor覆盖雾化
前天美术同事让我调一个Tree的Shader,起因是因为他在另外一个游戏里看到的树亮部很亮,暗部很暗,反差很大,而一般的shader做不到,而且每棵树也没有对应的高光贴图。于是找到Unity内置的一个Shader,一个alpha裁剪+漫反射shader,修改了他的明部暗部的反差,发给他之后,同事感觉很满意。没想到第二天同事发现那个模型却不再受全局雾影响。原创 2017-10-17 11:16:33 · 2138 阅读 · 5 评论