unity官方案例--坦克大戰(zhàn)(二)

坦克創(chuàng)建

在Models文件夾中,找到名為T(mén)ank的模型并將它拖到Hierarchy面板當(dāng)中。在Inspect面板中撒汉,設(shè)置Tank對(duì)象的Layer值為Players,并在彈出的改變Layer對(duì)話框中選擇No,this object only。給坦克模型增加一個(gè)Rigidbody組件。展開(kāi)組件的Constraints區(qū)域塞淹,在這個(gè)下面選擇Freeze Position Y軸,Freeze Rotation X、Z軸罪裹。

2.1 Rigidbody

增加一個(gè)Box Collider組件到坦克模型饱普,并將Box Collider組件的Center改為(0,.85,0)运挫,將Size改為(1.5,1.7套耕,1.6)谁帕。

增加一個(gè)Audio Source組件到坦克模型。通過(guò)Audio Clip旁邊的小圓鈕將Audio Source組件的Audio Clip屬性改為EngineIdle冯袍,然后選擇Loop匈挖。然后運(yùn)行后坦克就會(huì)有發(fā)動(dòng)機(jī)的聲音了。

再增加一個(gè)Audio Source組件康愤,將第二個(gè)Audio Souce組件不勾選Play On Awake儡循;

選擇Project中的Prefabs文件夾,將hierarchy面板中的Tank對(duì)象拖到Prefabs中征冷,保存場(chǎng)景择膝。

從Prefabs文件夾中拖拽DustTrail到Tank對(duì)象中,成為T(mén)ank對(duì)象的子對(duì)象检激。復(fù)制DustTrail對(duì)象肴捉,使他變成兩個(gè)。并將一個(gè)重命名為L(zhǎng)eftDustTrail,另一個(gè)命名為RightDustTrail,將LeftDustTrail的Position屬性改為(-0.5,0,0.75)呵扛,RightDustTrail的Position屬性改為(0.5,0,0.75)每庆。

在Scripts/Tank文件夾下找到,TankMovement腳本今穿,將它拖到Tank對(duì)象里缤灵,并雙擊打開(kāi)TankMovement腳本。

這個(gè)腳本主要是實(shí)現(xiàn)4個(gè)功能

1.獲取輸入

2.設(shè)置聲音

3.設(shè)置前進(jìn)蓝晒、后退移動(dòng)

4.設(shè)置轉(zhuǎn)彎

下面我們就一個(gè)個(gè)來(lái)實(shí)現(xiàn)

private float m_MovementInputValue=0f; //定義當(dāng)前移動(dòng)物體輸入的值

private float m_TurnInputValue=0f;? //定義轉(zhuǎn)變物體角度的值? 初始都為0

private Rigidbody m_Rigidbody;? //坦克的剛體對(duì)象

private void Awake()? ? {? ? ?

? ? ? ? ? m_Rigidbody = GetComponent<Rigidbody>();

}腮出;//獲取物體剛體組件

在Update函數(shù)中

m_MovementInputValue = Input.GetAxis("Vertical1");

m_TurnInputValue = Input.GetAxis("Horizontal1");

private void Move(){

// Adjust the position of the tank based on the player's input.

Vector3 movement = transform.forward*m_MovementInputValue * m_Speed * Time.deltaTime;

? ? ? //創(chuàng)建一個(gè)向量,方向即為坦克面對(duì)方向芝薇,大小為輸入胚嘲、速度和兩幀之間的時(shí)間的乘積m_Rigidbody.MovePosition(m_Rigidbody.position + movement);//移動(dòng)剛體組件,當(dāng)前的坐標(biāo)加上移動(dòng)的向量洛二;

}

private void Turn()
{// Adjust the rotation of the tank based on the player's input.
float turn = m_TurnInputValue * m_TurnSpeed * Time.deltaTime;//旋轉(zhuǎn)的角度
Quaternion turnRatation = Quaternion.Euler(0f, turn, 0f);//繞著Y軸旋轉(zhuǎn)馋劈。
m_Rigidbody.MoveRotation(m_Rigidbody.rotation * turnRatation);//剛體旋轉(zhuǎn)}
而后在FixedUpdate 函數(shù)中調(diào)用Move()和Turn()函數(shù);

現(xiàn)在我們的坦克模型應(yīng)該是可以移動(dòng)了晾嘶。

接下來(lái)妓雾,我們往坦克里面添加不同狀態(tài)的聲音,

private float m_OriginalPitch;//定義float型變量用于存儲(chǔ)原始音樂(lè)音量大小垒迂,并在start函數(shù)中進(jìn)行賦值械姻,

m_OriginalPitch=m_MovementAudio.pitch;
private void EngineAudio()

{
// Play the correct audio clip based on whether or not the tank is moving and what audio is currently playing.
//當(dāng)坦克禁止不動(dòng)時(shí);
if (Mathf.Abs(m_MovementInputValue) < 0.1f && Mathf.Abs(m_TurnInputValue) < 0.1f)
{
if (m_MovementAudio.clip == m_EngineDriving)
{
m_MovementAudio.clip = m_EngineIdling;
m_MovementAudio.pitch = Random.Range(m_OriginalPitch - m_PitchRange, m_PitchRange + m_OriginalPitch);
m_MovementAudio.Play();
}}
else {//當(dāng)坦克走動(dòng)時(shí)
if (m_MovementAudio.clip == m_EngineIdling) {
m_MovementAudio.clip = m_EngineDriving;
m_MovementAudio.pitch = Random.Range(m_OriginalPitch - m_PitchRange, m_OriginalPitch + m_PitchRange);
m_MovementAudio.Play();
}}}

回到Tank Movement(Script).將第一個(gè)Audio Source拖入到Movement Audio參數(shù)旁邊的方框机断。EngineIdling參數(shù)用小圓按鈕選擇EngineIdle楷拳,Engine Driving參數(shù)選擇EngineDriving,然后點(diǎn)擊Inspector面板的最上面進(jìn)行應(yīng)用绣夺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市欢揖,隨后出現(xiàn)的幾起案子陶耍,更是在濱河造成了極大的恐慌,老刑警劉巖浸颓,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件物臂,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡产上,警方通過(guò)查閱死者的電腦和手機(jī)棵磷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晋涣,“玉大人仪媒,你說(shuō)我怎么就攤上這事⌒蝗担” “怎么了算吩?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)佃扼。 經(jīng)常有香客問(wèn)我偎巢,道長(zhǎng),這世上最難降的妖魔是什么兼耀? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任压昼,我火速辦了婚禮,結(jié)果婚禮上瘤运,老公的妹妹穿的比我還像新娘窍霞。我一直安慰自己,他們只是感情好拯坟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布但金。 她就那樣靜靜地躺著,像睡著了一般郁季。 火紅的嫁衣襯著肌膚如雪冷溃。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天梦裂,我揣著相機(jī)與錄音似枕,去河邊找鬼。 笑死塞琼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的禁舷。 我是一名探鬼主播彪杉,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼毅往,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了派近?” 一聲冷哼從身側(cè)響起攀唯,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渴丸,沒(méi)想到半個(gè)月后侯嘀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谱轨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年戒幔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片土童。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诗茎,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出献汗,到底是詐尸還是另有隱情敢订,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布罢吃,位于F島的核電站楚午,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尿招。R本人自食惡果不足惜矾柜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泊业。 院中可真熱鬧把沼,春花似錦、人聲如沸吁伺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)篮奄。三九已至捆愁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窟却,已是汗流浹背昼丑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夸赫,地道東北人菩帝。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親呼奢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子宜雀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容