unity3D第一人称射击游戏(推荐) - CSDN博客
unity3D第一人称射击游戏(推荐)
unity3d第一人称射击游戏(推荐)
第一部分:简介
这个教程中,我们详细了解下如何制作一个简单的第一人称射击游戏(FPS)。其中将介绍一些基本的3D游戏编程的概念和一些关于怎样如游戏程序员般思考的技巧。
这个教程假定你已经熟悉软件Unity基本操作,掌握了基本的脚本概念。
创建新工程
下载FPS_Tutorial.zip压缩文件,解压,在Unity中打开工程文件。
从Unity***目录导入Standard Assets资源包。
导入工程后,你会在Unity工程面板中的“Standard Assets”文件夹下看见这些资源内容。当我们导入新资源时,最好***按照资源功能对其分组,例如:火箭、爆炸、音频等。
设置游戏环境
导入资源后,你会注意到在工程面板中有许多文件夹。
工程面板中,从文件夹“Object/mainLevelMesh”中选择“mainLevelMesh”。
在参数面板,FBXImporter选项中,你会发现“Generate Colliders”选项,勾选此选项。如果不做这一步,游戏中玩家会穿越地面直接掉下深渊(实际是开启“碰撞”,产生交互)
把“mainLevelMesh”拖放到场景中。
场景中不需要添加灯光,这关全部场景已经全部应用了灯光贴图。整个场景对所有灯光进行了灯光贴图渲染,使用了“预烘焙阴影”。灯光贴图对显示效果有很大帮助,特别是复杂灯光环境。
下面可以在场景中添加一个角色了。
添加主要角色
下面在场景中增加一个可以操控的角色物体。Unity针对第一人称射击游戏预置了许多内置的控制器,在工程面板Standard Assets-&Prefabs下。
添加第一人称控制器,点击工程面板Standard Assets旁边的小三角,弹出资源列表。找到Prefabs文件夹,点击小三角形,弹出资源列表。把“First person controller”拖到场景里。
这时场景中会出现一个代表玩家的圆柱体,三个大箭头代表物体在3D空间中的位置(如果没有看见箭头,选择物体,按“W”键),白色面代表物体当前视角。现在FPS控制器处于默认视角位置,通过移动它可以改变游戏视野。把角色移动到游戏环境关卡地面上面的位置。
Main Camera现在已经没有用处了,可以删掉了。
点击“Play”键,现在应该可以通过使用鼠标和键盘在本关卡地形中四处移动了(光标或者“W,A,S,D”)
现在我们创建了一个非常简单的FSP,下面我们给角色添加武器。
下面我们将给游戏角色一个类似榴弹的物体,可以在游戏中发射。要实现这个功能,需要创建一些脚本语言来在Unity中告知这个武器如何动作。
那么我们具体要实现什么呢?我们要使游戏角色能在摄像机的任意位置开火。但是,我们还是首先来思考一下游戏角色和武器。游戏角色游戏中是第一人称的视角,所以摄像机的位置与眼睛平行。如果玩家使用武器射击,武器应该是在角色的手部位置开火而不是眼睛的位置。这样我们就要增加一个“game object”(游戏物体)来代表榴弹发射器,同时把它放置在游戏角色手持武器时武器所处的位置。这样就保证了开火的位置没有问题。
创建武器发射器
首先,创建一个“game object”代表榴弹发射器。游戏物体是3D世界中的任一物体(角色、关卡、声音),零件就是游戏物体的属性。因此我们还需要对游戏物体添加零件:
从主菜单栏选择GameObject&Great Empty,并在层级面板中(Hierarchy)命名为“Launcher”。注意,空物体在场景中是看不见的,只是用它来作放置飞弹发射器。
现在在场景中把视野推近到FPS控制器,便于我们放置武器发射器。
层级面板中选择FPS控制器,确保鼠标处于场景视图中,按“F”键。使窗口以当前选择的物体为中心。
层级面板中选择发射器,主菜单栏选择Game Object&Move to view。注意发射器如何移动到FPS控制器附近的。然后使用手柄,把发射器移动到大概角色手部的位置。
注意:可以通过设置这个物体的位置来设定游戏角色是左撇子还是右撇子,不需要写代码。
使Unity窗口模式是“2by3”模式(window&Layouts&2by3),点击播放键(play)。确保层级面板中点选了发射器,四处移动角色,同时观察场景窗口。你将发现发射器并没有随着角色一起运动(现在再次点击播放键停止运行游戏)
下面来解决这个问题,层级面板中,把发射器拖放到FPS控制器下面的主摄像机上。弹出的对话框点击“是”。再次运行游戏,观察场景窗口,发射器已经和角色运动一致了。这样我们就把发射器与摄像机关联起来了。
下面我们来创建在玩家点击开火键时能够发射出来的飞弹。
我们先用一个简单物体-球体-代替飞弹。Unity主菜单栏点击Assets&Creat&Prefab创建一个预制(Prefab)物体,命名为“Missile”
创建一个球体(GameObject&Create Object&Sphere)
层级面板中,拖放球体到飞弹预制物体上(Missile),这时预制物体图标会变化。你可以从层级面板中删除球体。
技巧:游戏运行中产生的任何游戏物体都应该是预制物体(Prefab)。
编写飞弹发射器脚本
FPS控制器是一个包含了几个游戏物体和部件的预制物体。FPS控制器本身是一个只能沿Y轴旋转的圆柱体,因此,如果我们直接把发射器脚本赋予FPS控制器的话,是实现不了上下开火的。所以我们把脚本赋予控制器中的能够四周转动的主摄像机。
下面我们来编写第一个描述发射器行为的JavaScript代码。
点击Assets&Greate&JavaScript,创建一个空的JavaScript文档。一个名为“NewBehaviourScript”资源将会出现在工程面板中,把它更名为“MissileLauncher”
技巧:通过Unity&Preferences点击External Script Editor,可以自定义外部脚本编辑器。
工程面板中创建一个“WeaponScripts”文件夹,放置我们所有的武器脚本。把MissileLauncher脚本和飞弹预制物体(Missile Prefab)拖到这个文件中。
我们来看看飞弹发射器的完整JavaScript脚本。
进一步思考一下,我们到底想实现什么效果?我们要检测玩家是否按了开火键,然后产生一枚飞弹,然后把它沿着玩家朝向的方向按照一定的速度发射出去。我们仔细的解剖一下脚本:
var projectile: R
var speed=20;
function Update( )
这是脚本的开头部分,定义了一些属性,开启了“Update”的功能
if(Input.GetButtonDown(“Fire1”))
首先我们要检测玩家是否按了开火键,“开火1”映射的是鼠标左键和当前配置的键盘上的按键(可以通过主菜单栏的Editor&Project Settings&Input设定)
var instantiatedProjectile: 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全部完整代码如下:
var projectile : R
var speed = 20;
function Update()
if( Input.GetButtonDown( “Fire1″ ) )
var instantiatedProjectile : Rigidbody = Instantiate(
projectile, transform.position, transform.rotation );
instantiatedProjectile.velocity =
transform.TransformDirection( Vector3( 0, 0, speed ) );
Physics.IgnoreCollision( instantiatedProjectile. collider,
transform.root.collider );
把脚本MissileLauncher赋予FPS控制器中的发射器。在层级面板中点击发射器,检查一下参数面板下面是否显示了MissileLauncher script。
先前创建的飞弹的预制物体还没有与脚本中的变量projectile创建关联,我们需要在编辑器中创建一下。变量projectile只能与刚体关联,因此,首先我们要赋予飞弹一个Rigidbody。
工程面板中点击飞弹,然后从主菜单栏选择Components&Physics&Rigidbody。这样将会给我们想开火发射的飞弹一个刚体属性。我们必须确保想在游戏中发射的物体类型与脚本中外部变量要求的物体类型是同一类型的物体。
创建飞弹与脚本中变量projectile的链接。首先在层级面板中点击发射器,然后把飞弹的预制物体从工程面板中拖拽放置在发射器参数面板中MissileLauncher script部分上。
运行游戏的话,你会发现点击开火键可以发出一个受重力影响的小球了。
下面,当飞弹与其他物体发生碰撞时,增加一个爆炸效果。要实现这个效果,我们要编写一段新脚本赋予飞弹。
创建一个新脚本,命名为Projectile。拖放到工程面板的WeaponScripts文件夹下。
那么我们想要脚本Projectile实现什么样的效果呢?我们要检测飞弹是否发生碰撞,然后在碰撞点产生一个爆炸效果。代码如下:
var explosion : GameO
function OnCollisionEnter( collision : Collision )
函数OnCollisionEnter内的程序代码的作用是计算被赋予脚本的物体是否与其他物体发生碰撞。
var contact: ContactPoint=collision.contacts[0];
在函数OnCollisionEnter中我们主要是要实现在3D空间中飞弹发生碰撞的点产生一个新爆炸。那么在何处了碰撞的呢?函数OnCollisionEnter就有个记录这个信息的功能。碰撞发生的点的信息储存在变量ContactPoint中。
var rotation=Quaternion.FromToRotation(Vector3.up,contact.normal);
var instantiatedExplosion:GameObject=Instantiate(
explosion,contact.point,rotation);
这里我们使用函数Instantiate来创建一个爆炸。我们已经知道函数instatiate有三个参数:(1)产生的物体(2)物体的3D空间位置(3)物体的旋转。
第一个参数,后面我们将会赋给一个带粒子系统的游戏物体。同时我们还想通过编辑器来实现这个功能,所以我们把变量设置为外部变量。
第二个参数,爆炸产生的点的位置,就是碰撞发生的位置。
第三个参数,爆炸旋转的设置,需要解释一下。我们需要爆炸体的Y轴方向与飞弹和其他物体发生碰撞的那个表面的法线方向一致。这就是说如果是墙面那么爆炸就面向外,如果是地板就朝上。那么实际上我们就是要使爆炸体在本地坐标系的Y轴与飞弹与之碰撞的物体的表面法线方向(世界坐标系)一致。
Destroy(gameObject);
最后,我们要让飞弹碰撞后就从游戏中消失,通过函数Destroy()实现,它的参数是gameObject(gameObject代表被赋予这个脚本的物体)。
Projectile.js全部代码如下:
var explosion : GameO
function OnCollisionEnter( collision : Collision )
var contact : ContactPoint = collision.contacts[0];
var rotation = Quaternion.FromToRotation( Vector3.up, contact.normal );
var instantiatedExplosion : GameObject = Instantiate(
explosion, contact.point, rotation );
Destroy( gameObject );
把脚本赋予飞弹预制物体(Missile prefab)。
下面我们要创建飞弹发生碰撞时所产生爆炸的爆炸效果物体。
首先,创建一个新的预制物体(命名为Explosion)用来存放爆炸效果资源。
标准资源包中(standard asset)有个不错的爆炸预制物体,粒子系统和灯光都设置好了。把这个爆炸预制物体(在Standard Assets/Particles/explosion中)拖放到层级面板。
调节这个爆炸效果的各个参数直到你觉得满意,然后把它从层级面板中拖放到工程面板中的爆炸预制物体(Explosion Prefab)中。
现在把爆炸配置给飞弹:
点选飞弹预制物体(Missile Prefab),在参数面板Explosion变量栏,拖放工程面板中的爆炸到上面。
定义爆炸的行为
下面我们要再创建一个脚本来定义爆炸自身的特性。
创建一个新的脚本-Explosion,放在Weapons文件夹中,双击脚本进行编辑。
脚本中另一个常用函数称为Start()。当它配置给的物体是在游戏中产生的时候,函数Start()中的代码只被执行一次。我们要实现的效果就是在一定时间后,在游戏中删除爆炸。我们通过函数Destroy()的第二个参数实现,它的作用是定义执行删除前的时间长度。
var explosionTime=1.0;
function Start( )
Destroy(gameObject,explosionTime);
变量explosionTime设置成外部变量,方便调节。
新建脚本插入以上代码时,要删除函数Update()。
把脚本Explosion赋予给爆炸预制物体。
目前的游戏世界太安静了,让我们给爆炸效果增加点音效。
首先,给爆炸预制(Prefab)添加一段音频。
给爆炸添加音效前,我们首先要添加一个音源部件(Audio Source),在主菜单点击Component--Audio--Audio Source。你会发现音源部件有一个Audio Clip的属性。
把“RocketLauncherImpact”音效添加给爆炸预制体的AudioClip外部变量。Unity支持多种音频格式。
运行游戏,发射飞弹的时候就有声音了!
添加图形界面
下面我们来添加GUI,有点像头部显示设备(HUD)。我们要做的GUI非常简单,就一个准星。
添加一个准星:
工程栏中创建一个GUI的文件夹。
创建一个新脚本,命名为“准星”(Crosshair),拖到GUI文件夹。
Crosshair中写入下面的脚本:
var crosshairTexture:Texture2D;
var position:R
function Start( )
position=Rect((Screen .with-crosshairTexture.with)/2,(Screen.height-crosshairTexture.height)/2,crosshairTexture,crosshairTexture.height);
function OnGUI( )
Gui.DrawTexture(position,crosshairTexture);
首先我们设定了两个变量。第一个变量是定义我们将要用可选的方式来选择图形纹理。第二个变量定义了一个方形区间,它是图形纹理在屏幕上的位置范围。
在start( ) 中函数用来设定图形纹理在屏幕上的位置。函数中,有四个参数,用来定义方形区域的大小和位置。第一个参数定义了方形区域的左边框,第二个是底边框,第三和第四个参数定义了宽和高。
OnGUI( )函数中,使用GUI类程序来让图形显示在屏幕上。DrawTexture( )函数的参数position和crosshairTexture将使准星显示在屏幕的中央位置。
保存脚本。
创建一个新的空物体,命名为“GUI”。
把脚本“Crosshair”赋予给GUI物体。
点选GUI物体,把在文件夹Texturelaim下的欲使用的图形拖放到参数面板变量Crosshair Texture中。
运行游戏,屏幕中就会有准星显示了。
物理特效:
现在,我们想要游戏中的物体效果越真实越好,这是通过添加物理特效实现的。在这一节中,我们将在环境中添加一些物体,他们能被飞弹击中后有相应的反应。首先有几个新概念要解释下。
校正(Update)
先前,我们在函数Update()中写入代码,这样可以在每一帧都执行其中的代码。其中有个例子是检测玩家点击开火键。帧速并不是一个固定值,它是根据场景复杂度等因素来定的。各帧之间的时间差会导致不稳定的物体反应。因此,如果想在场景中添加有物理反应的物体(刚体等),代码就应该写在函数FixedUpdate()中。Unity中deltaTime的值用来测定渲染两个连续帧的所用时间。
一般而言,函数Update与FixedUpdate之间的区别如下:
Update()-其中的代码通常用于角色行为、游戏逻辑等。这个函数中的deltaTime值并不是固定的。
FixedUpdate()-其中的代码通常用于刚体物体(物理属性的行为)。函数中deltaTime的值通常是固定的。
FixedUpdate函数被调用的频率是主菜单中Edit-Project Settings-Time的FixedTimestep属性确定的,当然也是可以更改的。第二个属性Time Scale是读取每秒的帧速和相应的倒数值。
技巧:定义FixedTimestep值时,要注意把握好一个平衡:值越小,物理效果越真实越好,但影响游戏运行速度。应该同时确保游戏运行速度和物理效果的真实性。
最后说一下yield,它相当于暂停当前正在执行的函数。
回到游戏,我们想实现的效果:
使玩家可以发射飞弹(已经实现了)。
如果飞弹与其它刚体物体发生碰撞,检测其范围类是否有其它被赋予刚体属性的物体。
对爆炸冲击力范围内的每个刚体物体,均给予一个upwards方向上的力,使它们对飞弹产生反应。
让我们看看修改后的爆炸脚本(Explosion Javascript)
var explosionTime = 1.0;
var explosionRadius = 5.0;
var explosionPower = 2000.0;
function Start()
//Destroy the explosion in x seconds,
//this will give the particle system and audio enough time to finish playing
Destroy( gameObject, explosionTime );
//Find all nearby colliders
var colliders : Collider[] = Physics.OverlapSphere( transform.position,
explosionRadius );
首先检测下飞弹落点周围是否有带碰撞器的物体。函数Physics.OverlapSphere()有两个参数:3D位置和半径值,然后返回一组检测到的在半径内的碰撞器的数组。
//Apply a force to all surrounding rigid bodies.
for( var hit in colliders )
一旦得到这些数组后,就会对每个对应碰撞器的刚体物体一个在特定方向上的力。
if( hit.rigidbody )
hit.rigidbody.AddExplosionForce( explosionPower,
transform.position, explosionRadius );
然后我们在飞弹的炸点处,向上的方向增加一个力(ExplosionPower)。但是,爆炸效果是随着距离而递减的,作用力大小不能在整个半径内都一样。圆周位置的刚体物体受到的作用力应该比炸点中心处小。函数把这种效果也考虑在内的。通过调节外部变量explosionPower和explosionRadius的值,可以较容易的得到想要的效果。
//If we have a particle emitter attached, emit particles for .5 seconds
if( particleEmitter )
particleEmitter.emit =
yield WaitForSeconds( 0.5 );
particleEmitter.emit =
如果一个粒子发射器也添加到了爆炸预制中的话,然后就开始发射粒子,0.5秒后停止发射(yield)。
完整爆炸脚本如下:
var explosionTime = 1.0;
var explosionRadius = 5.0;
var explosionPower = 2000.0;
function Start()
//Destroy the explosion in x seconds,
//this will give the particle system and audio enough time to finish playing
Destroy( gameObject, explosionTime );
//Find all nearby colliders
var colliders : Collider[] = Physics.OverlapSphere( transform.position,
explosionRadius );
//Apply a force to all surrounding rigid bodies.
for( var hit in colliders )
if( hit.rigidbody )
hit.rigidbody.AddExplosionForce( explosionPower,
transform.position, explosionRadius );
//If we have a particle emitter attached, emit particles for .5 seconds
if( particleEmitter )
particleEmitter.emit =
yield WaitForSeconds( 0.5 );
particleEmitter.emit =
本文已收录于以下专栏:
相关文章推荐
首先对上一篇做一些遗漏的的补充
1、 文件夹中的文件类型的说明的补充:
Mannaged:这个文件夹下放的都是dll,Unity3D的逻辑脚本编译成dll后就放在这里面;
resources.a...
本篇文章基于上一篇文章: 使用unity3d搭建简单的场景以及第一人称角色的控制
1、给角色添加射击功能
通过射线射击,新建RayShooter.cs脚本,将该脚本添加到角色所包含的摄像机对象上,编辑...
从本篇起,我们将进入实战环节,编写一个简单的第一人称射击游戏。
第一人称射击类游戏,FPS(First-person Shooter), 严格来说第一人称射击游戏属于ACT类游戏的一个分支,但和RTS类游戏一样,由于其在世界上的迅速风靡,使之发展成了一个单独的类型...
这一篇文章主要是和大家分享如何制作一个属于自己的“第一人称射击游戏”,而且是要可以多人联机的。这个游戏属于比简单的,大神可以直接无视,如果有做错的地方请大家多多指点,我也是刚学如何做游戏。代码是用C#...
攻击 后切换动画
unity3d学习(一)制作第一人称射击-玩家的视口和移动unity3d学习一制作第一人称射击-玩家的视口和移动
构建简单场景
总结写在前面:
- 学习课本:Unity5实战 使用c#和u...
五、动画和行为
在前面,我们创建了可以自动寻路的敌人角色,接下来我们为其增加动画效果。敌人共有4种动画,对应4种状态----待机、行走、攻击和死亡。
1. 在场景中选择敌人,在Inspector窗口的An...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)手机第一人称射击游戏下载_安卓第一人称射击游戏大全_第一人称射击手机游戏推荐第一人称射击游戏&&(共121款)第一人称射击游戏游戏数量:121 个说道第一人称射击游戏,你告诉我只有CF和CS,那你就out了!为了给射击控们一些夏日的火热,让你们重拾战斗的欲望!3454游戏网为大家整理了好玩经典的第一人称射击游戏,喜欢的玩家就赶紧来3454下载吧!僵尸突袭是一款像素FPS在线游戏。这款僵尸突袭拥有普通多人对战、......死亡传说寒冬破解版,最新款好玩有趣的射击动作游戏,第一人称冒......死亡传说寒冬手游,赶紧来和僵尸战斗吧,最新款好玩有趣的射击动......死亡传说寒冬安卓版,精彩有趣好玩的的射击动作游戏,第一人称冒......王者勋章黎明杀机是一款射击类的游戏。玩家在游戏中可以体验到全......僵尸法则破解版,最新款有趣好玩的,僵尸射击游戏,简单易上手的......寒冬行动,最新款好玩的动作第三人称的射击手游,简单易上手的操......Exile Game游戏是一款类似与pc端大逃杀的游戏应用,Exile Game大......Sniper Shoot Fire Hunter是一款以第一人称视角打造的动作射击手......noblemen1986游戏是一款以美国内战为背景的射击游戏应用,noblem......放逐游戏大逃杀为实时在线对战游戏,主要功能是将在线的玩家按照......末日战场破解版是一款射击类的游戏。玩家在游戏中可以体验到不一......SquadFlow是一款韩系动作射击玩法手游,游戏中除了将保留线上版独......孤单***手之杀出重围是一款射击游戏,游戏有着简单的操作,丰富的......像素射击破解版是一款非常有趣的像素风格动作射击游戏,像素射击......全民***神手游是一款第一人称射击类***战手游,游戏有着较为公平的......丛林大逃杀The Last One是一款第一人称射击大逃杀生存手游,游戏......王者军团ios版是一款动作类竞技游戏,多人在线竞技、喜欢的赶紧来......穿越火线***战王者官网下载,穿越火线***战王者是腾讯穿越火线的手......穿越火线***战王者体验服是一款CF正版FPS手游,游戏继承了端游的经......穿越火线手机版是一款FPS射击手游,游戏有着端游的精致品质及经典......穿越火线***战王者冰与火是一款CF正版授权打造的FPS射击手游,游戏......穿越火线***战王者火线大乱斗是一款FPS射击手游,这是CF***战王者的......穿越火线生化2.0版是一款射击竞技类手游,穿越火线手游将在8月5日......穿越火线生化2.0修改版是一款射击类手游,在8月来临之际,为了迎......丛林大逃杀The LastOne是一款丛林题材的大逃杀游戏,游戏支持支持......僵尸前线2破解版是由FTGames开发制作的一款第一人称的动作射击游......1