[ Unity 2D ] 教學 #09 – 獲取Component(組件)資訊

標籤: , ,

每個GameObject都帶有數個Component組件,而我們自定義的腳本中常有一些需要抓取的資訊,例如角色的血量、速度等等的,就必須抓取物件Component中的一些參數。

GetComponent<Move>();//獲取物件的Move組件
  • –名詞解釋–
  • GetComponent – 獲取組件
  • Move – 之前寫的C# Script

使用GetComponent可以抓取任意類別的組件,程式碼中的Move是「教學02 基本的移動」中所使用的,使用GetComponent抓取到的組件可以用同類型的變數去接收,如:

Move mymove = GetComponent<Move>();//獲取物件的Move組件並設定給mymove

為了說明的更仔細一點,在這邊做個簡單的示範。我們使用之前一直使用到的小飛兵專案,不過在示範之前先整理一下Project視窗的檔案,可以點擊右鍵Create -> Folder新增資料夾來整理檔案。

首先新增一個用來被抓取資料的腳本,我命名為Unit(單位),裡面會存放角色在遊戲中的屬性數值

開啟後撰寫以下程式碼

using UnityEngine;
using System.Collections;

public class Unit : MonoBehaviour {
 public string UnitName = "New Unit";//名稱預設為新單位
 public int HP = 10;//生命值預設為10
 public float Speed = 2;//速度預設為2

 void Start () {
 
 }

 void Update () {
 
 }
}

設定UnitName(名稱)、HP(生命值)、Speed(速度)三個變數作為角色的屬性,Speed數值用來控制角色移動的速度,這些數值可以直接從Unity編輯器的屬性視窗中進行更改。

接下來開啟之前寫過的Move腳本,修改程式碼如下

using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour
{
 Unit unit;

 void Start()
 {
    unit = GetComponent<Unit>();//獲取遊戲物件的Unit組件
 }

 void Update()
 {
    float speed = unit.Speed;//將unit中的Speed參數抓出來到speed變數中

    if (Input.GetKey(KeyCode.LeftArrow))
    {
       transform.Translate(Vector2.left * Time.deltaTime * speed);
    }
    if (Input.GetKey(KeyCode.RightArrow))
    {
       transform.Translate(Vector2.right * Time.deltaTime * speed);
    }
    if (Input.GetKey(KeyCode.UpArrow))
    {
       transform.Translate(Vector2.up * Time.deltaTime * speed);
    }
    if (Input.GetKey(KeyCode.DownArrow))
    {
       transform.Translate(Vector2.down * Time.deltaTime * speed);
    }
 }
}

這樣就可以藉由修改Unit中Speed的值來控制角色移動的速度了,測試時可邊移動邊修改數值查看效果,若是照著之前教學一直做到這的人,記得將Rigidbody的Is Kinematic(運動學)勾選,否則小飛兵是會受重力掉下去的。

[ Unity 2D ] 教學 #10 – 小總結●小飛兵 射擊遊戲實作(一)



相關文章

教學 #07 – 碰撞器、觸發器、剛體(二)... ---Rigidbody - 剛體--- 想必第一次看到這詞的人一定會問:「剛體是什麼?」這東西不像碰撞器與觸發器那樣可以從字面上來解讀,想知道完整解釋的話可以查查維基百科。 大...
教學 #14 – Scene(場景) Scene是個很重要的環節,在中文稱為「場景」 以比較直覺的方式來說明的話,Scene可以當作遊戲中的關卡,每一個關卡都是獨立的Scene 在Unity的工具列中,File下會看到...
教學 #11 – Tag(標籤) 在GameObject的屬性視窗中,可以看到上面有個「Tag」屬性,中文稱作為標籤 Tag屬性可以作為分類的用途,例如將食物分為飲料和餅乾等等,在Unity中也可以將物件用Tag分為各種不同的類...
教學 #10 – 小總結●小飛兵 射擊遊戲實作(一)... 已經到第10篇教學文了,這次我們將實作出一款可以遊玩的射擊遊戲,將會用到之前所有教學文所教的東西。 ※注意本篇內容較多,請小心食用 這篇教學文也可以算做是一個複習,接下來我們會把之...