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

前言:ide

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

 

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

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

 

 

射擊類遊戲實例spa

 

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

遊戲相關設定:設計

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

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

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

 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);
            }

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

 

再說一句:

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

相關文章
相關標籤/搜索