Unity射擊實例講解—主角創建


前言:

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

 

射擊類游戲實例

 

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

游戲相關設定:

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的值,直接在層級中修改就不用去原代碼修改了,接下來的子彈創建、敵人定義等就能上手到熟悉的編程環節了,對了,雖然只定義了四個方向的移動,實際操作時是可以實現斜方向就是多個按鍵同時作用的效果的,我自己定義的另一款還涉及到了瞬移等操作,一步步來吧,先基礎點的好。下一篇應該就是子彈模型創建與發射相關了。

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM