前言: 這一篇章會介紹如何創(chuàng)建最基本的射擊用子彈,示例用工程進(jìn)度也往后推了許多,有時間會都整理了發(fā)出來,學(xué)藝尚淺有一些東西不能講明白,后續(xù)學(xué)習(xí)深入會慢慢補(bǔ)足。另外自己魔改過的版本也是花錢買了一些模型,成品游戲應(yīng)該會在一段時間后放出來,有興趣的可以關(guān)注下,我之后應(yīng)該會放個網(wǎng)盤鏈接,進(jìn)入正題吧。
英文翻譯(重復(fù)的就不提了): Transform:使改變 delete:刪除 prefab:預(yù)制 speed:速度 power:威力 original:原始的
射擊類游戲實(shí)例
作為第一個用來發(fā)布講解的游戲,我立馬就想到了射擊類游戲,當(dāng)然不是第一人稱射擊的那種,是打小飛機(jī)累計(jì)得分的那種類型,方便魔改參數(shù)以及自行制作一些敵人的模型。 游戲相關(guān)設(shè)定: 1.在游戲中,我們將操作戰(zhàn)艦擊墜敵人的飛船,游戲開始后戰(zhàn)艦會向前推進(jìn),消滅敵人取得分?jǐn)?shù),戰(zhàn)艦被擊落游戲才會結(jié)束。 2.戰(zhàn)艦擁有固定裝甲(血量),敵人有多種并擁有獨(dú)特的飛行軌跡與裝甲 3.屏幕上會顯示血量、得分等內(nèi)容 4.待添加
創(chuàng)建子彈 介紹: OnBecameInvisible函數(shù)是Unity的事件函數(shù),當(dāng)可渲染的物體離開可視范圍,這個函數(shù)會觸發(fā)并讓物體自我銷毀。 Rocket類中會包含飛行速度、生存時間和威力等參數(shù)并在脫離可視范圍時自我銷毀。
1.找到子彈模型拖入游戲界面,創(chuàng)建子彈的游戲體
2.創(chuàng)建Rocket.cs腳本,指定給子彈游戲體
3.編寫代碼 using System.Collections; using System.Collections.Generic; using UnityEngine; [AddComponentMenu("MyGame/Rocket")] public class rocket : MonoBehaviour { public float m_speed = 10; public float m_power = 1.0f; private void OnTriggerEnter(Collider other) { if (other.tag != "Enemy") { return; } else { Destroy(this.gameObject); } } void OnBecameInvisible() { if (this.enabled) { Destroy(this.gameObject); } } // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { transform.Translate(new Vector3(0, 0, m_speed * Time.deltaTime)); } } 代碼中定義了子彈的威力與飛行速度之后也可以直接在層級界面修改數(shù)值,并添加了自我消化的功能,現(xiàn)在啟動游戲會發(fā)現(xiàn)子彈向前飛行并在一段時間后消失。
Prefab的創(chuàng)建與子彈的發(fā)射 介紹: prefab可以理解為可重復(fù)使用的游戲體,簡單來說就是對一個游戲體的復(fù)制粘貼,方便定義多個游戲體并且可在其他unity游戲中使用。 想要使用prefabs中的游戲體直接拖入即可。 Prefab Variant 繼承于一個父Prefab, 父Prefab屬性修改后:如果子Prefab的某些屬性不動, 則父Prefab的屬性影響子Prefab的屬性, 如果對子Prefab的某些屬性進(jìn)行修改/覆蓋, 則父Prefab的屬性無法影響。
1.在Assets目錄新建Prefabs文件夾,將Hierachy上的rocket拖到下面來,會跳出一個提示框,選擇original prefab
2.刪除原場景中的子彈游戲體
3.將子彈游戲體與主角建立聯(lián)系,打開Player.cs編寫代碼 public Transform m_rocket;
4.回到unity,選擇Player游戲體,在Inspector窗口找到腳本組件將子彈prefab拖入其中的rocket選項(xiàng)
5.打開Player.cs,編寫代碼加入Update()中 if (Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0)) { Instantiate(m_rocket, m_transform.position, m_transform.rotation); } 這里的代碼應(yīng)該就很明了,判斷輸入是否為空格或者左鍵,是就發(fā)射基于游戲體發(fā)射子彈。
再說一句: 打開游戲應(yīng)該就能實(shí)現(xiàn)子彈的射擊了,不過會發(fā)現(xiàn)子彈可以連續(xù)無間隔射擊,加個限制就行,之后想起來再修改下,不過也是因?yàn)檫@個現(xiàn)象,可以試著做出激光武器特效,一段激光射線就是一長串連續(xù)的子彈不就很有意思了,武器的設(shè)計(jì)也可以定義出一些固定的近戰(zhàn)用武器,定義個游戲體固定在某一處,添加物理碰撞,這邊提供一些個人想法。講解用示例不適合有過多的東西,之后會慢慢介紹花一點(diǎn)的玩意,最近在試著實(shí)現(xiàn)一些噴射特效與形態(tài)轉(zhuǎn)換,我們的目標(biāo)是星辰大海。
|
|