Unity射擊例項講解—子彈建立

炭燒魷魚絲發表於2020-12-19

前言:

這一篇章會介紹如何建立最基本的射擊用子彈,示例用工程進度也往後推了許多,有時間會都整理了發出來,學藝尚淺有一些東西不能講明白,後續學習深入會慢慢補足。另外自己魔改過的版本也是花錢買了一些模型,成品遊戲應該會在一段時間後放出來,有興趣的可以關注下,我之後應該會放個網盤連結,進入正題吧。

 

英文翻譯(重複的就不提了):

 Transform:使改變           delete:刪除         prefab:預製            speed:速度         power:威力      original:原始的

 

 

射擊類遊戲例項

 

作為第一個用來發布講解的遊戲,我立馬就想到了射擊類遊戲,當然不是第一人稱射擊的那種,是打小飛機累計得分的那種型別,方便魔改引數以及自行製作一些敵人的模型。

遊戲相關設定:

1.在遊戲中,我們將操作戰艦擊墜敵人的飛船,遊戲開始後戰艦會向前推進,消滅敵人取得分數,戰艦被擊落遊戲才會結束。

2.戰艦擁有固定裝甲(血量),敵人有多種並擁有獨特的飛行軌跡與裝甲

3.螢幕上會顯示血量、得分等內容

 4.待新增

 

建立子彈

介紹:

OnBecameInvisible函式是Unity的事件函式,當可渲染的物體離開可視範圍,這個函式會觸發並讓物體自我銷燬。

Rocket類中會包含飛行速度、生存時間和威力等引數並在脫離可視範圍時自我銷燬。

 

1.找到子彈模型拖入遊戲介面,建立子彈的遊戲體

 

 

2.建立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));


    }
}

程式碼中定義了子彈的威力與飛行速度之後也可以直接在層級介面修改數值,並新增了自我消化的功能,現在啟動遊戲會發現子彈向前飛行並在一段時間後消失。

 

Prefab的建立與子彈的發射

介紹:

prefab可以理解為可重複使用的遊戲體,簡單來說就是對一個遊戲體的複製貼上,方便定義多個遊戲體並且可在其他unity遊戲中使用。

想要使用prefabs中的遊戲體直接拖入即可。

Prefab Variant 繼承於一個父Prefab, 父Prefab屬性修改後:如果子Prefab的某些屬性不動, 則父Prefab的屬性影響子Prefab的屬性, 如果對子Prefab的某些屬性進行修改/覆蓋, 則父Prefab的屬性無法影響。

 

 

1.在Assets目錄新建Prefabs資料夾,將Hierachy上的rocket拖到下面來,會跳出一個提示框,選擇original prefab

 

 

2.刪除原場景中的子彈遊戲體

 

3.將子彈遊戲體與主角建立聯絡,開啟Player.cs編寫程式碼

public Transform m_rocket;

 

4.回到unity,選擇Player遊戲體,在Inspector視窗找到指令碼元件將子彈prefab拖入其中的rocket選項

 

 

5.開啟Player.cs,編寫程式碼加入Update()中

if (Input.GetKey(KeyCode.Space) || Input.GetMouseButton(0))
            {
                Instantiate(m_rocket, m_transform.position, m_transform.rotation);
            }

這裡的程式碼應該就很明瞭,判斷輸入是否為空格或者左鍵,是就發射基於遊戲體發射子彈。

 

再說一句:

開啟遊戲應該就能實現子彈的射擊了,不過會發現子彈可以連續無間隔射擊,加個限制就行,之後想起來再修改下,不過也是因為這個現象,可以試著做出鐳射武器特效,一段鐳射射線就是一長串連續的子彈不就很有意思了,武器的設計也可以定義出一些固定的近戰用武器,定義個遊戲體固定在某一處,新增物理碰撞,這邊提供一些個人想法。講解用示例不適合有過多的東西,之後會慢慢介紹花一點的玩意,最近在試著實現一些噴射特效與形態轉換,我們的目標是星辰大海。

 

相關文章