免费论文查重: 大雅 万方 维普 turnitin paperpass

浅析水下Unity3D第一人称视角游戏者水下视觉效果实现普通

最后更新时间:2024-03-15 作者:用户投稿原创标记本站原创 点赞:13130 浏览:49572
论文导读:业设计论文网www.7ctime.comonController对象后,我们发现原来FirsrPersonController是由两个子对象构成的,其中一个子对象是一个竖立的胶囊形物体,名为“Graphics”,而另一个则是名为“MainCamera”的摄像机对象。事实上,我们用W、A、S、D键操纵第一人称游戏者运动的时候,事实上是在操纵“Graphics”对象在运动,而摄像机
摘要:本文简单的阐述了使用Unity3D游戏引擎自带的第一人称控制器创建的第一人称游戏者在水面之下行进时,如何让游戏画面呈现出和其在水面之上时不同的视觉效果。
关键词:Unity3D;游戏引擎;第一人称视角;水下效果
1007-9599 (2012) 15-0000-02
Unity3D是一款由Unity Technologies开发的一款游戏引擎,是一种便捷易用的交互式图形化的综合型游戏开发工具。它可以很方便的让非计算机专业的开发人员创建自己的三维电脑游戏、建筑的可视化游历、以及实时交互的三维动画作品。该游戏引擎支持多种系统平台,它开发的作品可以很方便的在PC、MAC等计算机平台上运行,也可以在Android和iOS等移动设备平台上运行,还可直接发布到网页。该游戏引擎还对常用的三维建模软件如3DMAX、Maya有着非常好的兼容性,可以很方便的把在上述三维建模软件当中建造好的各种三维模型导入到游戏场景之中。因此,该开发平台应用非常广泛,特别是在艺术设计领域,更是受到广大开发人员的推崇。
该引擎在其内置的Standard Assets资源包的Prefabs项下,提供了一个名为Firsr Person Controller(第一人称控制器)的预制对象。开发人员在游戏场景中加入此预制对象,即可很方便的创建出一个第一人称视角的游戏者,然后配合键盘上的W、A、S、D按键和鼠标,即可控制游戏者的运动方向和视角。这样一来,开发人员可以几乎不用写任何程序代码,即可实现一个三维游戏场景的可视化游历。
在该游戏引擎内置的Pro Standard Assets资源包的Water项下,还提供了一个名为DayLight Water的预制对象,通过在场景中导入该对象,我们可以很方便的在场景中创建出一个水体系统。其覆盖面积大小和水面的视觉效果,可以通过在Inspector窗口中指定DayLight Water对象的一系列参数来指定。建立好水体系统后,我们操纵使用系统内置的第一人称控制器创建的游戏者走到水面之下时,就会发现,游戏玩家无论是在水面之上还是在水面之下,表现出来的视觉效果都是一样的。为什么是这样的呢?原来,Unity引擎内置的“DayLight Water”对象只是一个指定了位置、面积和高度的具有水面属性材质的一个平面。这个平面之上和平面之下,环境都是一样的,因此无论游戏者在水面之上还是水面之下,屏幕上呈现的第一人称视角游戏画面的视觉效果都是一样的。而现实中,我们在水下的视角看上去的画面是和在水面之上的视角看上去是有区别的,一般来说,水下看到的场景会有水本身的颜色,而且看起来会有些模糊。
那么,我们如何才能让游戏者在水面之上和在水面之下时看到的画面呈现出不同效果呢?首先,我们来分析一下DayLight Water对象的基本属性:在Hierarchy窗口中我们选定游戏场景中的DayLight Water对象后,在Inspector窗口可以看到其一系列的属性,其中在Traorm属性当中有一个名为Position的项,包括X、Y和Z三个数值。其中Y值就是指水平面距离游戏场景的地形系统中的基本地平面的高度。在场景的地形之中,只要距离基本地平面的高度小于Y值得低洼地面和放置其上的三维模型,就会淹没在水面之下,反之高于此数值的高原、山地和放置其上的三维模型则会露出在水面之上。Unity引擎中的第一人称控制器对象,是沿着地面运动的,因此当我们运行游戏时用W、A、S、D键操纵游戏者走到高度值低于水面的Y值得地面时,游戏者就会沉入水中。
接下来我们再分析一下Firsr Person Controller(第一人称控制器)预制对象。当我们在Hierarchy窗口中展开Firsr Pers源于:毕业设计论文网www.7ctime.com
on Controller对象后,我们发现原来Firsr Person Controller是由两个子对象构成的,其中一个子对象是一个竖立的胶囊形物体,名为“Graphics”,而另一个则是名为“MainCamera”的摄像机对象。事实上,我们用W、A、S、D键操纵第一人称游戏者运动的时候,事实上是在操纵“Graphics”对象在运动,而摄像机“MainCamera”是绑定在“Graphics”物体上并随之运动的,我们从画面上看到的第一人称场景,就是“MainCamera”摄像机视角的场景。这样,我们只需要对Firsr Person Controller的摄像机子对象“MainCamera”进行设定,使之在水面之下时让其视角中的画面呈现出类似人们在水下看到的场景效果,就可以达到我们本文所讨论的目的了。
首先,我们看看如何使摄像机视角的画面呈现类似在水下的感觉。我们可以先尝试给画面染上类似水下的淡蓝绿色:在Hierarchy窗口中,我们选中“MainCamera”摄像机对象,然后在屏幕上方的Component菜单下选择Image Effects子菜单,并选中其中的Color Correction项,此时,Inspector窗口中就会多出一组名为“Color Correction Effect”的参数,我们对其中的R、G、B值做一下微调,比方说把R设置为-0.4,这样,我们切换到摄像视图去看的话,就会发现画面颜色变暗并被染上淡淡的蓝绿色了。接下来,我们再尝试使画面变模糊:我们从刚才的Image Effects子菜单中选择“Blur”项,并在Inspector窗口中调整“Blur Effect”的有关参数,比方说把Iterations设置为1,Blur Spread设置为0.3.这样,我们再切换到摄像机视图去看,就会发现画面已经呈现略带模糊的蓝绿色,很像在水下的感觉了。上述工作完成之后,我们运行一下游戏场景,就会发现,此时无论第一人称游戏者是在水面之上还是水面之下,画面呈现的都是水面之下的感觉。这样显然还是不符合我们的最终目的。因此,我们还需要写一段JaScript程序代码,让这个第一人称摄像机来论文导读:人称游戏者走到水面之下以后,Y值就小于水面的Y值了。因此,我们只需要检测“MainCamera”的Y值是否大于水面的Y值,即可判定游戏者是在水面之上还是在水面之下了。我们可以创建以下JaScript程序代码:varCamara_1:GameObject;varUnder:float;functionStart(){Camara_1=GameObject.Find("/FirstPers
判断当前所处的位置是否再水面之下,并根据需要来开启“Color Correction Effect”和“Blur Effect”。接下来,我们在Hierarchy窗口中点选Firsr Person Controller的摄像机子对象“MainCamera”,在Inspector窗口中检视其相关属性和参数,会发现它也有一组Traorm属性,对应的Position的项也同样包括X、Y和Z三个数值。而且切换到摄像机视图并运行游戏场景时,会发现这三个数值是随摘自:毕业论文模板www.7ctime.com
着我们操纵第一人称游戏者在画面上运动而不断改变的。当第一人称游戏者走到水面之下以后,Y值就小于水面的Y值了。因此,我们只需要检测“MainCamera”的Y值是否大于水面的Y值,即可判定游戏者是在水面之上还是在水面之下了。我们可以创建以下JaScript程序代码:
var Camara_1 : GameObject;
var Under : float;
function Start(){
Camara_1 = GameObject.Find("/First Person Controller/Main Camera");
}
function Update () {
if(tranorm.position.y < Under)
{
Camara_1.GetComponent("ColorCorrectionEffect").enabled = true;
Camara_1.GetComponent("BlurEffect").enabled = true;
}
if(tranorm.position.y > Under)
{
Camara_1.GetComponent("ColorCorrectionEffect").enabled = false;
Camara_1.GetComponent("BlurEffect").enabled = false;
}
}
此段程序代码中,我们设定当该摄像机所在位置的高度低于“Hight”变量的数值时开启“Color Correction Effect”和“Blur Effect”效果,高于此数值时则会关掉上述效果。我们将此段程序代码命名为“UnderWater.js”并保存
最后,我们再次在Hierarchy窗口中点选Firsr Person Controller的摄像机子对象“MainCamera”,然后把刚才创建好的程序代码文件拖放到“MainCamera”项上面。此时,在Inspector窗口中我们即可看到一个名为“UnderWater”的组件,展开该组件,可以看到该组件包含一个名为“Hight”的变量。我们点选此变量,然后把之前我们在“DayLightWater”对象中设定的水面高度值输入进去,游戏运行时,当摄像机低于水面高度时就会开启“Color Correction Effect”和“Blur Effect”效果,高于此数值时则会关掉上述效果。这样,我们就实现了第一人称游戏者在水面之上和水面之下游戏画面显示的不同视觉效果了。
参考文献:
《Unity游戏开发实战》,米歇尔·梅纳德著,机械工业出版社
《Unity3D游戏开发》,宣雨松著,人民邮电出版社