第四章 为地形添加水源、水流以及水下的模糊效果
制作好了地形的各种效果,接下来我们给场景添加一些水效果,使场景更加丰富。
第一步:添加水面
由于我在上一次的地形创作中就已经在山峰之间制作了一块洼地,它就可以作为一个放置湖水的地方。如果您上次的创作并没有这样的地形,那么请您重新创建一个山势地形图,就当作自己的一次练习吧。
在场景面板中点击Y方向的绿色箭头 ,切换到顶视图,这样可以便于我们很快的找到洼地所在的地方。如图4.1所示:

图4.1
然后用鼠标滚轮迅速的推进观测距离。如图4.2所示:

图4.2
接着再到Project【项目文件栏】找到“Standard Assets”文件夹下的 (仅限专业版使用,如果您使用的版本是非专业版本,请转到 )文件夹中,拖拽一个 【白天光照效果的水模型】到洼地的中央,并利用场景调整工具中的缩放工具 ,将水模型调整到合适的大小。如图4.3所示:


图4.3
紧接着我们再点击场景面板中右上角的白色小方块 ,将视角切换到透视图。然后利用场景调整工具 ,将水模型调整到合适的高度。如图4.4所示:

图4.4
这时您只需要在播放时,将摄像机移动到洼地这个地方就可以看见湖水的效果了。
第二步:添加瀑布。
现在看来效果略显单调,既然是山中泉水我们还得有一些瀑布和溅起的水花。为了节约查找的时间,我们直接在Project【项目文件栏】上方的搜索框输入字符“water f”,这样就可以查处如图所示的材质和模型。如图4.5所示:

图4.5
在这里面, 是一个喷泉模型, 是一个水面的飞溅模型, 是一个瀑布模型。我们先拖入一个 到洼地,然后利用场景调整工具来调整它的位置和角度。如图4.6所示:


图4.6
这时的瀑布略显小了一些,我们可以先选中它,然后到它的属性面板里面去调整成您想要的效果。如图4.7所示:

图4.7
第三步:添加水面飞溅模型。
接下来我们会看到瀑布落到水面是没有水花飞溅的效果的,这不合常理。于是我们在瀑布下的水面上方放置一个水面飞溅模型 。由于它的噶偶一定要和水面高度一致,所以我们先点选水平面,看看它的Y轴坐标,然后复制到 属性面板中同样的位置,以确保它是伏在水面上的。紧接着再到它的属性面板中调整它的属性,让模型效果调整成您想要得到的效果。如图4.8所示:

图4.8
第四步:添加水下模糊效果。
我们运行一下游戏 ,然后将镜头移动到泉水的水面下。如图4.9所示:

图4.9
大家会发现,水下的视觉和在地面上的视觉效果是完全一样的。这和我们平时的生活现状是不相符的,所以我们还得做一下相应的调整。首先点击 ——> ——> ,创建一个立方体,并运用场景调整工具将它调整到整个水洼的实体部分。(注:运用其他形体也可以,其主要是用来覆盖水洼的实体部分,以用来和摄像机做碰撞检测,让摄像机的镜头变得模糊。)如图4.10所示:


图4.10
接着,确保您创建的这个cube是被选中状态,到它的属性面板中,将“Box Collider”卷展栏中的“Is Trigger”复选框打上勾(如果这里不打勾,这个cube将作为一个实物,当摄像机撞上它时,就像撞上墙一样,无法穿过。)如图4.11所示:

图4.11
然后再将“Mesh Renderer”卷展栏下的所有复选框全部勾掉,使这个立方体只作为一个形体存在,而不让它在场景中作出任何的显示渲染。如图4.12所示:

图4.12
接着在属性面板的最上方将它的名字由“Cube”改为“WaterColler” ,再选中 的下拉框 中新添加一个“WaterColler”的标签分类。然后将这个“WaterColler”水洼碰撞体的Tag也改成“WaterColler”。
然后我们在菜单栏中选中 ——> ——> ,新添加一个JS脚本。到Project【项目文件栏】找到刚才新建的JS脚本 ,按下F2键更改它的名字为“UnderWatereffect”,并双击编辑它,输入代码如图4.13所示:


图4.13
输入完毕,按Ctrl+S保存代码并关闭退出。然后将代码拖拽给摄像机使用。重新运行一下游戏,将摄像机移动到水下,就可以看到一片模糊的景象了。如图4.14所示:

图4.14
第五章 Unity3D中脚本的简单概述
和其他的3D软件一样,Unity3D作为一个类播放器的3D集成软件,具有良好的时间层级关系。比如Start()里面的语言,总是在播放器初始化时执行一次,而后就不再执行。例如下面用JS写的一个例子。在菜单栏上选中 ——> ——> ,将下面这段代码拖拽给Hierarchy【层次清单栏】中任意一个对象。

您就会在播放器刚开始播放的时候,在左下角的控制台面板中看到 这句话,证明您的Game播放器已经开始工作了。如图5.1所示:


图5.1
(注:这个控制台买那般以后在大家使用的时候会经常用到它,因为它可以用作您代码片段的调试,以及您程序出错了的提示框,详细的提示您出错的原因所在。)
当然有了初始化函数,就一定会有刷帧函数Update(),该函数内所有的代码会在播放器每播放一帧时执行。例如下面用JS写的一个例子,在菜单栏上选中 ——> ——> ,输入如下代码:

该代码会在播放器每播放一帧的时候,显示游戏开始到现在所消耗的时间值。
Unity3D中有着非常强大的接口处理功能,您可以在代码中为对象制定任意一个空接口用于和对应类型的对象进行交互,例如下面用JS写的一个例子,在菜单栏上选中 ——> ——> ,输入如下代码:


该代码为对象添加了一个在Z轴方向上的初始速度,如果在没有其他外力的作用下,物体将一直沿着Z轴方向以5的速度运动。并且当您将这段代码拖拽给一个物体对象后,它的这个初始速度可以作为一个接口在它的属性面板中进行修改。如图5.2所示:

图5.2
除了数字作为接口外,接口还可以是对象,例如下面用JS写的一个例子,在菜单栏上选中 ——> ——> ,输入如下代码:

您可以将这段代码拖拽给Hierarchy【层次清单栏】中任意一个对象,因为它在这里定义了一个Transform类接口对象cubeGO,所以它几乎与拖拽的对象无关。拖拽成功之后来到该物体的属性面板中,您可以看到这样一个属性卷展栏 ,cubeGO的后面有个很明显未定义对象填写栏 ,然后我们把想要使之运动的物体拖拽到这个上面来,当我们运行游戏时,只要按下“G”键就可以看到被拖拽的物体作为“cubeGO”的指代对象,朝着Z轴方向运动了。

Unity3D ——强大的跨平台3D游戏开发工具(三)的更多相关文章

  1. Unity3D ——强大的跨平台3D游戏开发工具(六)

    第十一章 制作炮台的旋转 大家知道,炮台需要向四周不同的角度发射炮弹,这就需要我们将炮台设置成为会旋转的物体,接下来我们就一起制作一个会旋转的炮台. 第一步:给炮台的炮筒添加旋转函数. 给炮台的炮筒部 ...

  2. Unity3D ——强大的跨平台3D游戏开发工具(一)

    众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎.在现有的版本中,其强大的游戏制作功能已 经达到让人瞠目结舌的地步.尤其是它在3.0版本里面制作的那款 ...

  3. Unity3D ——强大的跨平台3D游戏开发工具(五)

    第九章 图形用户界面类G.U.I 您在玩很多3D游戏的时候,不知是否注意到在游戏界面中,总有一些图形和文字信息是不随着3D视角的改变而改变的.这也是由于游戏本身的要求而决定的.比如说英雄的生命值,聊天 ...

  4. Unity3D ——强大的跨平台3D游戏开发工具(四)

    第六章 Unity3D中的C#Script编程的注意事项 也许您在学习Unity3D之前,已经是一位C#的编程高手了.但在Unity3D中的C#并不像真正的C#那般强大,在Unity3D的C#中必须全 ...

  5. Unity3D ——强大的跨平台3D游戏开发工具(二)

    第二章 Unity3D的简单预览 每个Unity3D版本都会自带一个Demo源文件.在3.0的正式版中,自带的Demo就是网上展示的那款强大的射击游戏.在一般情况下,您只要第一次 打开Unity3D ...

  6. Unity 4.2.0 官方最新破解版(Unity3D 最新破解版,3D游戏开发工具和游戏引擎套件)

    Unity是一款跨平台的游戏开发工具,从一开始就被设计成易于使用的产品.作为一个完全集成的专业级应用,Unity还包含了价值数百万美元的功能强大的游戏引擎.Unity作为一个游戏开发工具,它的设计主旨 ...

  7. 5 个最好的3D游戏开发工具(转)

    转自:http://www.open-open.com/news/view/33a4f0 5 个最好的3D游戏开发工具 jopen 2012-11-19 22:56:21 • 发布 摘要:UDK(th ...

  8. 优秀工具推荐:两款很棒的 HTML5 游戏开发工具

    HTML5 众多强大特性让我们不需要多么高深技术就能创建好玩的网页游戏,同时证明了开放的 Web 技术能与任何其他在游戏开发中使用的技术竞争.正如标题所说,这篇文章推荐的几款很棒 HTML5 游戏开发 ...

  9. Unity 3D游戏开发引擎:最火的插件推荐

    摘要:为了帮助使用Unity引擎的开发人员制作更完美的游戏.我们精心挑选了十款相关开发插件和工具.它们是:2D Toolkit.NGUI.Playmaker.EasyTouch & EasyJ ...

随机推荐

  1. FZU 2086 餐厅点餐(枚举)

    ///个人感觉vector好看一点 #include<iostream> #include<cstdio> #include<cstring> #include&l ...

  2. 转:Loadrunner——Block(块)技术

    在使用LoadRunner时经常遇到这样一个问题,如果对不同的事务进行不同次数的循环该怎么处理?默认情况下LR对所有的事务都是统一执行的,即虽然有多个事务,但它们被执行的循环次数都是一样的,那么LR如 ...

  3. 交换数组中两个元素的位置,元素包括key和value 一维数组

    /*author: yangyu@sina.cndescription: 交换数组中两个元素的位置,元素包括key和value,具体用法见下面的例子*/$arr = array(11=>'a', ...

  4. ZEN_CART_如何添加自定义页面

    按照下面的路径,添加自己的文件,就OK了 以about us页面为例, 默认模板 \includes\templates\template_default\templates\tpl_about_us ...

  5. 一个好用简单的布局空间EasyUI

    之前项目中都是前端来新写的页面,对于很多后台管理系统来说,新写页面其实比较麻烦. 最近看到一款还是不错的开源页面框架EasyUi http://www.jeasyui.com/index.php 这是 ...

  6. xdebug 安装

    如果是这样的话,请参考 http://www.mengyunzhi.com/share/php/107-xdebug.html 进行xdebug的安装.

  7. psy & vr

    技术指标及应用法则:PSY和VR 一.PSY(Psychologial Line)   1. PSY的参数 2. PSY的应用法则 二.VR(Volume Ratio) 1. VR的参数 2. VR的 ...

  8. java集合框架list和set

    为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一中方式 数组和集合类同是容器,有何不同? 数组虽然也可以存储对象 ...

  9. 解决BT5不能使用putty连接问题

    root@bt:~# cd /etc/sshroot@bt:/etc/ssh# sshd-generate Generating public/private rsa1 key pair.Your i ...

  10. HDU 1883 Phone Cell(计算几何)

    方法:选取一个点A,以点A为圆心做一个半径为r的圆,然后枚举另一个点B,以B为圆心做一个圆,如果这两个圆有交集,那我们在这个交集内选取一个点做半径为r的圆,这个圆就包括了A和B点,找到交集最多的区域并 ...