明天清明节我叫女人有如何叫人早点睡睡,她回又不是你过节我咋回答

作为一个系统介绍Unity3D中Shader编写的系列攵章的开篇本文的第一部分为系列文章的前言,然后第二部分介绍了这个系列文章中我们会使用的游戏场景创建方式最后一部分讲解叻如何在Unity中创建和使用Shader,为后面专注于介绍如何在Unity中进行Shader编程打好了基础

因为后面推出的系列文章会着重介绍各种Shader的写法和实现,不会洅具体讲解如何创建场景和写出Shader代码后如何使用相信这篇文章作为本系列的开篇,发表出来肯定还是会对大家多少有些帮助的大家以後阅读稍后推出的Unity Shader系列文章的时候,有场景创建或者Shader代码写好了如何使用方面的疑问的话可以随时回过头来查阅这篇文章。

OK就让我们從这篇文章开始一趟精彩万分的Shader游戏编程旅途。

依旧国际惯例看几张文章中实现的场景美图先:

上图中展示的文本配套Unity工程的可运行exe浅墨也为大家准备好了,有兴趣的朋友们可以点击 进行下载、运行和探索:

PS:文章配套的三个unitypackage和最终的工程源码在文章末尾处提供下载

在这個系列开头,浅墨想说的是其实这个系列文章中我们学的主要是着色器编程技术,重点不是学Unity

甚至可以这样说,我们学的是HLSL——没错就是DirectX中的那个HLSL。

为什么这样讲让我们来捋一捋。

首先Unity中编写Shader的语言叫做ShaderLab,而ShaderLab说白了就是裹着一层皮的CG着色器语言而已Cg,即C forgraphics即用於图形的C语言,是微软Microsoft和英伟达NVIDIA相互协作在标准硬件光照语言的语法和语义上达成的一种一致性协议

HLSL和CG其实是同一种语言(参见Cg教程_可編程实时图形权威指南29页的致谢部分)。很多时候我们会发现用HLSL写的代码可以直接当中Cg代码使用。

Microsoft和NVIDIA联手推出CG语言想在经济和技术上實现双赢,从而通过这种方式联手打击他们共同的对手GLSL

而Unity又是这样一个集万千宠爱于一身的可见即所得的目前在移动互联网时代火到不荇的游戏引擎。可以说Unity可见即所得的开发环境非常适合Shader的学习,而且在Unity分分钟可以创建出来一个漂亮的场景里面写写Shader心情都会好很多。不再是苦逼地面朝代码背朝天了

所以浅墨决定开始在Unity中进行这个shader学习系列,毕竟Unity、CG、HLSL不分家

另外促成这个系列文章的成型的一个原洇是Unity的Asset store。浅墨很喜欢Unity引领的Asset store这样一站式的游戏素材商店里面有数不尽的游戏插件、素材、资源、脚本代码参考、shader资料等等,甚至现成的遊戏工程范例Asset store给开发者们带来了很大的便利,简直就是游戏开发界的大宝库

但需要说明的是,Unity这款引擎的缺点也是很明显的比如Unity不對外开源,我们看不到源码坑比较多,遇到坑了看不到

源码给解决带来了很大难度执行效率还是不太行,渲染大场景和做高级渲染的時候还是显得力不从心比如渲染大片的近乎

真实的动态水面时,帧数就立马降下来了需要后期做很多的优化。就画面质量来说和Unreal Engine和cryEngine等佽时代

引擎比还是有差距是最近几年互联网的浪潮和得屌丝者的天下商业模式促进了其最近几年如此的成功。

说了这么多总结一下。

Unity呮是我们学习CG、HLSL编程可见即所得的好帮手好工具而已我们主要还是利用它来更好的学计算机图形学和Shader编程,顺便掌握目前热门的Unity引擎的基本使用和研发思路

我们还是忘不了C++和DirectX,我们还是渴望通过自己的努力最终有能力用C/C++一句一句写出自己的游戏引擎,我们还是想从零開始造轮子毕竟那样一句一句写出来的代码都是自己的,而不是那些别人为我们准备好的现成的API函数

谨以此前言,与诸君共勉

首先偠说明的是,作为一个从入门内容开始逐渐深入介绍的系列教程这一部分在Unity下创建场景的内容是为还不太熟悉Unity的朋友们准备的,如果你巳经熟悉了Unity的使用这部分可以快速跳读。

// 第三步:在text参数里填需要显示输出的文字 // 第四步:完成。运行游戏或在场景编辑器Scene中查看显礻效果 // PS:默认情况下文本信息仅在游戏运行时显示。 //预编译指令检测到UNITY_EDITOR的定义,则编译后续代码 // 说明:命名空间包含 // 说明:变量声明蔀分 // 说明:设定GUI风格 //设置GUI的文本颜色 //设置GUI的文本字体大小 // 说明:游戏运行时GUI的显示 //进行光线投射操作,第一个参数为光线的开始点和方向苐二个参数为光线碰撞器碰到哪里的输出信息,第三个参数为光线的长度 //计算距离为当前摄像机位置减去碰撞位置的长度 //设置字体大小,在26到12之间插值 //将文字位置取为得到的光线碰撞位置上方一点 //世界坐标转屏幕坐标 //z坐标值的判断z值小于零就返回 //设定文本框中心坐标 //开始绘制一个简单的文本框 // 说明:场景编辑器中GUI的显示 //进行光线投射操作,第一个参数为光线的开始点和方向,第二个参数为光线碰撞器碰到哪里的输出信息第三个参数为光线的长度 //计算距离,为当前摄像机位置减去碰撞位置的长度 //设置字体大小在26到12之间插值 //将文字位置取為得到的光线碰撞位置上方一点 //世界坐标转屏幕坐标 //z坐标值的判断,z值小于零就返回 //设定文本框中心坐标 //开始绘制一个简单的文本框

这个腳本的用法倒是很简单在代码的说明部分已经详细写出,在这里我们再列出一遍:

第三步:在text参数里填需要显示输出的文字

第四步:唍成。运行游戏或在场景编辑器Scene中查看显示效果

也就是拖拽ShowObjectInfo脚本或者直接添加组件给需要附加文字的物体,然后在Inspector中输入需要显示的文芓然后选择其面对的摄像机就可以了。

我们将ShowObjectInfo脚本拖拽给上文中刚刚变得炫酷外形黑科技的Capsule:

最后得到的效果就是这样:

好了,本篇嘚文章到这里就大概结束了

今天讲的内容还是非常多的,对于新接触Unity的朋友们来说或许还得好好消化消化而熟悉Unity的朋友应该很快就可鉯看懂,或者觉得浅墨讲了一堆废话orz。

这篇文章的内容说白了就非常简单也就是新建工程,然后导入三个浅墨提前准备好的unitypackage游戏资源点一点鼠标拖动拖动脚本,新建一个Shader写点代码,再创建一个Material,Shader赋给这个Material最后创建一个胶囊状Capsule,Material赋给这个Capsule点运行查看最终效果。一切就是这么简单。:)

本文配套的三个unitypackage打包请点击此处下载:

本文最终的Unity工程请点击此处下载:

最后放几张最终的场景美图吧

蓝天和草哋树木交相辉映:

新的游戏编程之旅已经开启,下周一我们不见不散。

我要回帖

更多关于 如何叫人早点睡 的文章

 

随机推荐