Unity环境中《坦克大战》双人游戏的研究与实现
2018-05-14易威环
易威环
[摘 要] 采用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.