unity 第一人称射击游戏推荐Word格式.docx

上传人:b****5 文档编号:16028089 上传时间:2022-11-17 格式:DOCX 页数:13 大小:23.23KB
下载 相关 举报
unity 第一人称射击游戏推荐Word格式.docx_第1页
第1页 / 共13页
unity 第一人称射击游戏推荐Word格式.docx_第2页
第2页 / 共13页
unity 第一人称射击游戏推荐Word格式.docx_第3页
第3页 / 共13页
unity 第一人称射击游戏推荐Word格式.docx_第4页
第4页 / 共13页
unity 第一人称射击游戏推荐Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

unity 第一人称射击游戏推荐Word格式.docx

《unity 第一人称射击游戏推荐Word格式.docx》由会员分享,可在线阅读,更多相关《unity 第一人称射击游戏推荐Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

unity 第一人称射击游戏推荐Word格式.docx

在参数面板,FBXImporter选项中,你会发现“GenerateColliders”选项,勾选此选项。

如果不做这一步,游戏中玩家会穿越地面直接掉下深渊(实际是开启“碰撞”,产生交互)

把“mainLevelMesh”拖放到场景中。

场景中不需要添加灯光,这关全部场景已经全部应用了灯光贴图。

整个场景对所有灯光进行了灯光贴图渲染,使用了“预烘焙阴影”。

灯光贴图对显示效果有很大帮助,特别是复杂灯光环境。

下面可以在场景中添加一个角色了。

添加主要角色

下面在场景中增加一个可以操控的角色物体。

Unity针对第一人称射击游戏预置了许多内置的控制器,在工程面板StandardAssets->

Prefabs下。

添加第一人称控制器,点击工程面板StandardAssets旁边的小三角,弹出资源列表。

找到Prefabs文件夹,点击小三角形,弹出资源列表。

把“Firstpersoncontroller”拖到场景里。

这时场景中会出现一个代表玩家的圆柱体,三个大箭头代表物体在3D空间中的位置(如果没有看见箭头,选择物体,按“W”键),白色面代表物体当前视角。

现在FPS控制器处于默认视角位置,通过移动它可以改变游戏视野。

把角色移动到游戏环境关卡地面上面的位置。

MainCamera现在已经没有用处了,可以删掉了。

点击“Play”键,现在应该可以通过使用鼠标和键盘在本关卡地形中四处移动了(光标或者“W,A,S,D”)

现在我们创建了一个非常简单的FSP,下面我们给角色添加武器。

增加武器

下面我们将给游戏角色一个类似榴弹的物体,可以在游戏中发射。

要实现这个功能,需要创建一些脚本语言来在Unity中告知这个武器如何动作。

那么我们具体要实现什么呢?

我们要使游戏角色能在摄像机的任意位置开火。

但是,我们还是首先来思考一下游戏角色和武器。

游戏角色游戏中是第一人称的视角,所以摄像机的位置与眼睛平行。

如果玩家使用武器射击,武器应该是在角色的手部位置开火而不是眼睛的位置。

这样我们就要增加一个“gameobject”(游戏物体)来代表榴弹发射器,同时把它放置在游戏角色手持武器时武器所处的位置。

这样就保证了开火的位置没有问题。

创建武器发射器

首先,创建一个“gameobject”代表榴弹发射器。

游戏物体是3D世界中的任一物体(角色、关卡、声音),零件就是游戏物体的属性。

因此我们还需要对游戏物体添加零件:

从主菜单栏选择GameObject>

GreatEmpty,并在层级面板中(Hierarchy)命名为“Launcher”。

注意,空物体在场景中是看不见的,只是用它来作放置飞弹发射器。

现在在场景中把视野推近到FPS控制器,便于我们放置武器发射器。

层级面板中选择FPS控制器,确保鼠标处于场景视图中,按“F”键。

使窗口以当前选择的物体为中心。

层级面板中选择发射器,主菜单栏选择GameObject>

Movetoview。

注意发射器如何移动到FPS控制器附近的。

然后使用手柄,把发射器移动到大概角色手部的位置。

注意:

可以通过设置这个物体的位置来设定游戏角色是左撇子还是右撇子,不需要写代码。

使Unity窗口模式是“2by3”模式(window>

Layouts>

2by3),点击播放键(play)。

确保层级面板中点选了发射器,四处移动角色,同时观察场景窗口。

你将发现发射器并没有随着角色一起运动(现在再次点击播放键停止运行游戏)

下面来解决这个问题,层级面板中,把发射器拖放到FPS控制器下面的主摄像机上。

弹出的对话框点击“是”。

再次运行游戏,观察场景窗口,发射器已经和角色运动一致了。

这样我们就把发射器与摄像机关联起来了。

创建飞弹

下面我们来创建在玩家点击开火键时能够发射出来的飞弹。

我们先用一个简单物体-球体-代替飞弹。

Unity主菜单栏点击Assets>

Creat>

Prefab创建一个预制(Prefab)物体,命名为“Missile”

创建一个球体(GameObject>

CreateObject>

Sphere)

层级面板中,拖放球体到飞弹预制物体上(Missile),这时预制物体图标会变化。

你可以从层级面板中删除球体。

技巧:

游戏运行中产生的任何游戏物体都应该是预制物体(Prefab)。

编写飞弹发射器脚本

FPS控制器是一个包含了几个游戏物体和部件的预制物体。

FPS控制器本身是一个只能沿Y轴旋转的圆柱体,因此,如果我们直接把发射器脚本赋予FPS控制器的话,是实现不了上下开火的。

所以我们把脚本赋予控制器中的能够四周转动的主摄像机。

下面我们来编写第一个描述发射器行为的JavaScript代码。

点击Assets>

Greate>

JavaScript,创建一个空的JavaScript文档。

一个名为“NewBehaviourScript”资源将会出现在工程面板中,把它更名为“MissileLauncher”

通过Unity>

Preferences点击ExternalScriptEditor,可以自定义外部脚本编辑器。

工程面板中创建一个“WeaponScripts”文件夹,放置我们所有的武器脚本。

把MissileLauncher脚本和飞弹预制物体(MissilePrefab)拖到这个文件中。

我们来看看飞弹发射器的完整JavaScript脚本。

进一步思考一下,我们到底想实现什么效果?

我们要检测玩家是否按了开火键,然后产生一枚飞弹,然后把它沿着玩家朝向的方向按照一定的速度发射出去。

我们仔细的解剖一下脚本:

varprojectile:

Rigibody;

varspeed=20;

functionUpdate()

{

这是脚本的开头部分,定义了一些属性,开启了“Update”的功能

if(Input.GetButtonDown(“Fire1”))

首先我们要检测玩家是否按了开火键,“开火1”映射的是鼠标左键和当前配置的键盘上的按键(可以通过主菜单栏的Editor>

ProjectSettings>

Input设定)

varinstantiatedProjectile:

Rigidbody=Instantiate(

projectile,transform.position,transform.rotation);

我们用变量来定义产生的物体。

变量的类型是Rigibody(刚体),因为飞弹是具有物理属性的。

Unity中产生新物体使用的函数是Instantiate,它有三个参数,分别是:

产生的物体、产生物体的3D空间位置、物体的旋转。

它还有另一个语法结构,参照API手册,这里我们只使用这种结构。

第一个参数,projectile,代表我们想创建的物体。

那么到底发射什么物体?

具体产生的物体是可以手动设定的。

实现方法:

把Projectile定义为函数的外部变量,这样就可以在参数面板中显示出来。

发射的物体也可以通过代码来创建,但如果你想使一个变量可调的话,还是用上面的方法。

第二个参数,transform.position,使产生的物体与发射器的空间位置一致。

为什么就是发射器呢?

因为如果要使飞弹产生的位置没有问题,脚本就要关联给发射器。

(transform读取的transform数据就是被赋予脚本的游戏物体transform数据)

第三个参数transform.rotation,与第二个类似,只是它的值与发射器的旋转值是一样的。

instantiatedProjectile.Vellocity=

transform.TransformDirection(Vector3(0,0,speed));

代码的下一部分使飞弹产生运动。

为了实现运动,我们要赋予飞弹一个速度,但是在哪个方向上(X,Y,Z)产生速度呢?

在场景中,点击FPS控制器,出现运动箭头(如果没有出现,按“W”键),其中一个箭头是红色、一个是绿色、一个是蓝色。

红色代表X轴,绿色代表Y轴,蓝色代表Z轴。

因为蓝色指向的方向,与玩家面朝的方向一致,所以我们要在Z轴上给飞弹一个速度。

(Velocity)速度是instantiatedProjectile的一个属性。

我们怎么知道的呢?

因为instantiatedProjectile是刚体的一种,如果我们看看API手册,我们就会知道速度是刚体的属性中的一种。

同时也看看刚体的其它属性。

要设置速度,我们就必须在各个轴向上设定数值。

但还有个小问题。

3D空间中的物体一般使用两种坐标模型:

本地坐标系和世界坐标系。

在本地坐标系中,物体的轴向只与物体本身有关。

在世界坐标系中,轴向是绝对的,例如:

向上,对所有物体来讲向上的方向都是一样的。

Rigidbody.Vellocity刚体物体速度必须使用世界坐标系。

因此,定义速度时,需要把本地坐标系中的Z轴(朝前的方向)向转换成世界坐标系中的相应方向。

可以用函数transform.TransformDirection,它有三个向量作为自变量。

变量speed也应该定义成外部变量,便于后面在编辑器中直接调节数值。

Physics.IgnoreCollision(instantiatedProjectile.collider,

transform.root.collider);

}

最后,我们要关闭飞弹与游戏角色之间的碰撞。

如果不这样做的话,飞弹产生的时候就可能与角色发生碰撞。

可以在API手册IgnoreCollision下查询详细信息。

MissileLauncher.js全部完整代码如下:

varprojectile:

Rigidbody;

varspeed=20;

functionUpdate()

if(Input.GetButtonDown("

Fire1"

))

varinstantiatedProjectile:

Rigidbody=Instantiate(

projectile,transform.position,transform.rotation);

instantiatedProjectile.velocity=

transform.TransformDirection(Vector3(0,0,speed));

Physics.IgnoreCollision(instantiatedProjectile.collider,

transform.root.collider);

把脚本MissileLauncher赋予FPS控制器中的发射器。

在层级面板中点击发射器,检查一下参数面板下面是否显示了MissileLauncherscript。

先前创建的飞弹的预制物体还没有与脚本中的变量projectile创建关联,我们需要在编辑器中创建一下。

变量projectile只能与刚体关联,因此,首先我们要赋予飞弹一个Rigid

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1