APP下载

Unity环境中《坦克大战》双人游戏的研究与实现

2018-05-14易威环

现代职业教育·中职中专 2018年3期
关键词:双人脚本视图

易威环

[摘 要] 采用Unity3D5.6.1+VS2013+C#语言为开发环境设计《坦克大战》双人游戏,其中首先搭建了游戏场景,再设计双人控制环境并实现,最后实现子弹的发射,从而实现完整的双人游戏功能,逐一进行讲解,并配有详细的代码及图例。

[关 键 词] unity;VS;坦克大战;游戏

[中图分类号] G898.2 [文献标志码] A [文章编号] 2096-0603(2018)08-0118-01

一、场景搭建

1.新建项目TankShot,将资源包TankAssset.unitypackage导入并拖出场景LevelArt,并除平行光,调整天空盒Source为Color。

2.添加坦克Tank,增加刚体、碰撞盒,并通过Edit Collider调整碰撞盒大小。

3.添加灰尘效果,将资源库中的Prefabs/DustTrail拖入坦克后轮,左右各一个,通过调整为Back视图、Top视图进行定位。

二、双人控制

1.将原坦克设为预设体,并在场景中添加另一台坦克Tank1,如果场景中的某坦克有修改,为了能使由预设体产生的所有对象都能改变,需点击组件面板上的“Apply”按钮。

2.先增加六套按键(注:小回车:enter,大回车:return左Ctrl:left ctrl,Negative:负,Positive:正,系统已经有的键定义不能删除):

Horizontal1:a/d键 Vertical1:s/w键 Horizontal2:left/right键

Vertical2:down/up键 fire1:space键 fire2:return

3.新建脚本:TankMovement

public class TankMovement:MonoBehaviour {

private Rigidbody m_rigidbody;

private float moveValue,turnValue,moveSpeed,turnSpeed;//移动、旋转的值和速度

private string moveAxisName,turnAxisName;

public int playerNum;//玩家序号

void Start () {

m_rigidbody = GetComponent();//获取坦克身上的刚体组件

moveAxisName = "Vertical" + playerNum;

turnAxisName = "Horizontal" + playerNum;

}

void Update () {

moveValue = Input.GetAxis(moveAxisName);//按左右键或a、d键

turnValue = Input.GetAxis(turnAxisName);//按上下键或w、s键

}

void FixedUpdate() { //物理更新,一直按0.02秒进行更新

Move(); Turn();

}

void Move(){ //移动

Vector3 movements=transform.forward*moveValue* Time.delta Time *moveSpeed;

m_rigidbody.MovePosition(m_rigidbody.position + movements);//实现移动

}

void Turn() { //旋转

float turn = turnValue * Time.deltaTime * turnSpeed;//具体的旋转角度

Quaternion turnRotation = Quaternion.Euler(0,turn,0);//绕y轴旋转

m_rigidbody.MoveRotation(m_rigidbody.rotation * turnRotat-ion);

} }

4.将脚本拖放在两上Tank上,分别设置其playNam为1、2,为防止坦克飞起来,可如图将坦克预设体锁定。

三、发射炮弹

1.在Tank游戏对象上新建空对象:TankShellPos,调整在枪口位置:通过Left视图进行调整,绕X轴旋转-15度。

2.从Shell中拖出子弹Shell,添加刚体,拖到项目视图Prefabs中为预设体,将场景中的子弹删除。

3.新建TankShotting:

public class TankShotting :MonoBehaviour {

private string fireButton;

public int playerNum;//玩家編号

public Rigidbody shell;//炮弹

public Transform fireTransform;//攻击位置

void Start () {

fireButton = "fire" + playerNum;

}

void Update () {

if (Input.GetButtonDown(fireButton)) {

Fire();

} }

void Fire() {

Rigidbody shellInstance=Instantiate(shell,fireTransform.position,fireTransform.rotation);

shellInstance.velocity = fireTransform.forward * 10;//给炮弹添加速度

} }

4.将脚本TankShotting挂在Tank上,并进行设置,然后点击Apply按钮,在Tank1上,设置player Num为2。

四、运行游戏

一个用户可通过按adsw和Enter键控制一辆坦克进行射击,另一个用户可通过按↑↓→←和Space控制另一辆坦克进行移动射击。

五、小结

Unity是一款全面整合的专业游戏引擎,开发者编写少量脚本就可轻松创建三维游戏。

参考文献:

Unity Technologies. Unity 5.X从入门到精通[M].中国铁道出版社,2016.

猜你喜欢

双人脚本视图
自动推送与网站匹配的脚本
双人脱困
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
《投影与视图》单元测试题
Django 框架中通用类视图的用法
“双人运球”乐翻天
举一反三新编
捕风捉影新编
愚公移山