Unity GetComponent 教學Author: Kelvin Huang
Unity 的遊戲物件可增加各種元件增加不同的功能,使用 GetComponent 可抓取特定的元件並進行互動。 本教學透過不同的範例說明 GetComponent 的使用方法:
用於控制燈光新增 Point Light 燈光,再建立燈光的控制腳本,使用 GetComponent 抓取燈光元件,控制燈光的亮度或顏色。 以上的範例使用數字控制燈光的亮度,若需要使用單一按鈕進行燈光的開關操作,可改用以下的寫法。 原理是新增一個變數 m_isOn 記錄燈光的狀態,只有關閉的時候可以開燈,只有開啟的時候可以關燈。 這個變數在 Inspector 將會顯示 Is On ,也可以用 Private 宣告變數使其不顯示。進入遊戲後按下空白鍵即可開燈或關燈。
除了使用 GetComponent 控制物件本身的元件,也可以先抓取其他物件再控制該物件上的元件。 若找不到對應的物件名稱、元件名稱、參數名稱,將會出現錯誤訊息: NullReferenceException: Object reference not set to an instance of an object (物件參照沒有設定到正確的物件實體) 使用「名稱」尋找物件 player = GameObject.Find ("Player"); 使用「標籤」尋找物件 player = GameObject.FindGameObjectWithTag ("Player");
用於製作 UI需要將變數的值顯示到 UI 時,也需要使用 GetComponent 抓取 Text 元件,以下是 Standard Assets 顯示遊戲畫面 FPS 的腳本:
用於控制玩家 HP將 ThirdPersonController 玩家角色預製物件拖曳到遊戲場景,重新命名為「Player」,並將標籤設定為「Player」。 將 MultipurposeCameraRig 攝影機拖曳到場景,按下 Play 按鈕測試遊戲,確認玩家移動時攝影機會自動跟隨。 場景上新增 2 個物件,使用 2 個材質讓物件呈現不同的顏色讓玩家區分: .紅色 - 玩家碰到將會扣血的炸彈,重新命名為 「Bomb」 .藍色 - 玩家接觸可以補血的藥水,重新命名為 「HealthPickup」 … Bomb.cs 炸彈腳本 使用 GameObject.Find("Player") 找到玩家,當玩家碰到炸彈時,扣除設定的血量(先設定減 10),並且刪除炸彈遊戲物件。
再修改 Bomb.cs 炸彈腳本,因為玩家碰到炸彈時沒有爆炸效果,而且損傷修改比較麻煩。 透過宣告變數,動態生成爆炸效果,並且讓損傷可以直接透過 Inspector 屬性編輯器設定。 將爆炸的粒子效果 Explosion 拖曳到 Bomb 物件的 Explosion Prefab 欄位,設定 Attack Damage 對玩家的損傷數值。
確認玩家碰到炸彈後,血量扣除設定的數值。
HealthPickup 補血腳本
用於製作血條 ( 使用 Energy Bar Toolkit 第三方外掛 )建立一個 PlayerStats.cs 腳本,宣告 playerHP 與 playerMP 變數,用於儲存玩家狀態,套用到玩家角色。 建立一個 Controller.cs 腳本,建立一個空物件並套用此腳本,功能是將玩家 HP 與血量數值同步。
修改 Controller.cs 腳本,玩家血量低於 0 時將會出現 GAME OVER,實際上應該再讓玩家角色執行倒地的動作。
注意!沒有 RemoveComponent() 移除元件的敘述 , 如果需要移除一個元件可以使用 Object.Destroy 指令。 Destroy(GetComponent(MeshRenderer)); 關於 Destroy 的使用方法可參閱 Unity 網站 的說明。
............................. 關於 Destroy 的使用方法可參閱 Unity 網站 的說明。
用於判斷物件的元件使用 GetComponent 判斷物件是否帶有特定的元件,可以使用以下 3 種寫法。
Copyright © 2024 CG Digital Corp. All rights reserved.
|