Unity射擊例項講解—主角建立

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

前言:

經過三分鐘的思考決定換個標題,這兩天其實遊戲製作進度推了大半了,加入了許多自我創作的素材,不過想一想用來講解的例項不該這麼花哨,決定還是參照我的一些教材做一些簡單的示例不然要說的東西太多,本人學藝不精尚不能把用到的每個版塊講清楚,這篇內容就是建立一個遊戲模型並讓它有攻擊的能力順便補上之前沒說的攝像機與燈光,同時講解會放前面,實際操作放後面,一些類似的操作就不一步步展示了。自我發揮創作的要素在遊戲大體完成後逐步介紹給大家,我會另開一個專案檔案用來講解用,之前那個被塞了太多東西了。

 

射擊類遊戲例項

 

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

遊戲相關設定:

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

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

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

4.待新增

 

涉及的英文(含括上一篇,有錯誤煩請指正,):

Assets:資源       Import New Assets :匯入新資源             Project:工程              Show in Explorer:在資源管理器中顯示       Create:建立      Folder:資料夾      File:檔案        New Scene:新場景       Save Scene As:場景另存為

GameObjct:遊戲物件        Plane:平面體        Material:材料      Background:背景     Inspector:檢查工具       Element:元素       Rendering Mode:渲染模式       Shader:著色器      Texture:紋理     Animator Controller:動畫控制器

Clip:剪輯     Add  Property:新增屬性     Camera:攝像機      Point Light:點光源          Align With View:與視角對齊    Range:範圍       Hierarchy:層級        Script:指令碼         Component:元件       Transform:變化改變

 

攝像機

攝像機是用來展示遊戲世界的視窗,遊戲引擎在運算過程中,根據攝像機視角進行裁切,將3D模型頂點位置投射到攝像機的矩陣平面內,再進行座標轉換將頂點位置最終投射到螢幕的畫素座標上(無論3d或者2d,我們顯示器都為二維平面),在Unity場景中允許存在多個攝像機也就是說可以切換視角,實際上攝像機就是一個遊戲體,可以移動、旋轉、用指令碼控制等。 

在這個太空遊戲中,我們只需要視角從上向下展望就行,我後續新增了另外的視角不過下面就暫時不放出來了。

選中攝像機(main camera)—【GameObject】—【Align With View】可以讓視角與現在對齊。

對於相機視角操作有多種,我的做法是滑輪(拉遠拉近)、按下滑輪(平移)、按住滑鼠右鍵(轉換角度)三個方面大體除錯範圍,用鍵盤的上下左右微調視角。

篇幅問題就不展示截圖了,自己動手試一試一下就能明白,多視角建立使用會放後面具體說。

 

燈光

【Windows】—【Rendering】—【Lighting Settings】,選擇Ambient  Source,將Skybox改為color,這樣會使用顏色作為環境光代替預設天空盒,會解決SceneheGame場景中亮度不一致的問題。

【GameObject】—【Light】—【Point Light】,建立一個點光源,Range改變影響範圍,Intensity改變燈光強度,讓畫面更美觀些。(為了直觀顯示變化亮度調高了點)

 

 

主角建立

 

到本遊戲的主要環節之一了,這裡開始就能發揮一下自我的想法,而不是在軟體操作上點來點去,先介紹基本的,沖沖衝。

 

部分元件講解:

Input是一個靜態類,封裝了所有輸入功能,包括鍵盤、滑鼠或觸控操作,在這裡我響應了不同的按鍵功能,當然還有另外的輸入方式可以使程式碼支援跨平臺執行。

Time.deltaTime表示每幀的經過時間,所有動畫效果都需要乘上Time.deltaTime,比如在示例中,速度*Time.deltaTime,表示每幀移動N個單位距離。

this.transform呼叫的是遊戲體的Transform,Transform元件提供的主要功能都是和移動、旋轉、縮放遊戲體有關。我們呼叫Translate函式移動遊戲體,並輸入Vector3型別引數,用來表示x、y、z三個方向上的移動距離。移動的方向與美術素材方向有關,建議匯出素材時模型正方向朝向Z軸。

Vector3是一個值型別的結構,表示向量,即某個位置或方向。用於座標位置時好理解,用於方向時就是表示在某方向上偏離一定距離,Translate函式實現的功能就是普通的加減法。

 

具體步驟:

1.將準備好的主角素材拖入【Hierachy】視窗,我就用的簡樸的飛機模型。

 

2.右鍵【Assets】—【Create】—【Folder】建立一個名為Scripts的資料夾,用於存放各種編寫的指令碼。

 

 

3.選中Scripts檔案,右鍵—【Create】—【C# Script】,建立一個名為Player的指令碼。

 

 

4.【Component】—【Scripts】—【Player】,將指令碼指定給主角遊戲體作為元件

5.   點開Player指令碼檔案,編寫程式碼

     這裡實現了主角的上下左右的移動

[AddComponentMenu("MyGame/Player")]這一段程式碼可以讓指令碼出現在MyGame中,方便管理指令碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[AddComponentMenu("MyGame/Player")]

public class Player : MonoBehaviour
{
    public float m_speed = 1;//加一個類控制速度
    
    
    // Start is called before the first frame update
    void Start()
    {
        Transform m_transform = this.transform;//修改點
    }

    // Update is called once per frame
    void Update()
    {

        float movev = 0;
        float moveh = 0;
        if (Input.GetKey(KeyCode.UpArrow))
        {
            movev += m_speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.DownArrow))
        {
            movev -= m_speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.LeftArrow))
        {
            moveh -= m_speed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.RightArrow))
        {
            moveh += m_speed * Time.deltaTime;
        }
        this.transform.Translate(new Vector3(moveh, 0, movev));
    }
}

 

 

6.調整合適移動速度

 

 

總結:

現在執行遊戲,遊戲體就能有可用的移動了,第六步中的speed速度修改會直接改變程式碼中m_speed的值,直接在層級中修改就不用去原始碼修改了,接下來的子彈建立、敵人定義等就能上手到熟悉的程式設計環節了,對了,雖然只定義了四個方向的移動,實際操作時是可以實現斜方向就是多個按鍵同時作用的效果的,我自己定義的另一款還涉及到了瞬移等操作,一步步來吧,先基礎點的好。下一篇應該就是子彈模型建立與發射相關了。

 

各位大佬,都看到這了,不點個關注推薦再走嘛。

 

相關文章