易威環(huán)
[摘 要] 采用Unity3D5.6.1+VS2013+C#語言為開發(fā)環(huán)境設(shè)計《坦克大戰(zhàn)》雙人游戲,其中首先搭建了游戲場景,再設(shè)計雙人控制環(huán)境并實現(xiàn),最后實現(xiàn)子彈的發(fā)射,從而實現(xiàn)完整的雙人游戲功能,逐一進行講解,并配有詳細的代碼及圖例。
[關(guān) 鍵 詞] unity;VS;坦克大戰(zhàn);游戲
[中圖分類號] G898.2 [文獻標(biāo)志碼] A [文章編號] 2096-0603(2018)08-0118-01
一、場景搭建
1.新建項目TankShot,將資源包TankAssset.unitypackage導(dǎo)入并拖出場景LevelArt,并除平行光,調(diào)整天空盒Source為Color。
2.添加坦克Tank,增加剛體、碰撞盒,并通過Edit Collider調(diào)整碰撞盒大小。
3.添加灰塵效果,將資源庫中的Prefabs/DustTrail拖入坦克后輪,左右各一個,通過調(diào)整為Back視圖、Top視圖進行定位。
二、雙人控制
1.將原坦克設(shè)為預(yù)設(shè)體,并在場景中添加另一臺坦克Tank1,如果場景中的某坦克有修改,為了能使由預(yù)設(shè)體產(chǎn)生的所有對象都能改變,需點擊組件面板上的“Apply”按鈕。
2.先增加六套按鍵(注:小回車:enter,大回車:return左Ctrl:left ctrl,Negative:負,Positive:正,系統(tǒng)已經(jīng)有的鍵定義不能刪除):
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;//移動、旋轉(zhuǎn)的值和速度
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);//實現(xiàn)移動
}
void Turn() { //旋轉(zhuǎn)
float turn = turnValue * Time.deltaTime * turnSpeed;//具體的旋轉(zhuǎn)角度
Quaternion turnRotation = Quaternion.Euler(0,turn,0);//繞y軸旋轉(zhuǎn)
m_rigidbody.MoveRotation(m_rigidbody.rotation * turnRotat-ion);
} }
4.將腳本拖放在兩上Tank上,分別設(shè)置其playNam為1、2,為防止坦克飛起來,可如圖將坦克預(yù)設(shè)體鎖定。
三、發(fā)射炮彈
1.在Tank游戲?qū)ο笊闲陆諏ο螅篢ankShellPos,調(diào)整在槍口位置:通過Left視圖進行調(diào)整,繞X軸旋轉(zhuǎn)-15度。
2.從Shell中拖出子彈Shell,添加剛體,拖到項目視圖Prefabs中為預(yù)設(shè)體,將場景中的子彈刪除。
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上,并進行設(shè)置,然后點擊Apply按鈕,在Tank1上,設(shè)置player Num為2。
四、運行游戲
一個用戶可通過按adsw和Enter鍵控制一輛坦克進行射擊,另一個用戶可通過按↑↓→←和Space控制另一輛坦克進行移動射擊。
五、小結(jié)
Unity是一款全面整合的專業(yè)游戲引擎,開發(fā)者編寫少量腳本就可輕松創(chuàng)建三維游戲。
參考文獻:
Unity Technologies. Unity 5.X從入門到精通[M].中國鐵道出版社,2016.