2-3 Enemy Floating Health Bar
請先下載課程提供的Enemy Health Bar v.2.unitypackage
https://drive.google.com/open?id=1Q6pn14JVW4Q6ut9Yhgw9HaAECKqccieL
本章實作敵人頭頂上的血條,同樣讓我們來匯入package內容。
匯入之後,讓我們看看Enemy Canvas的內容,首先大家可以看見Canvas的Render Mode是World Space,什麼意思呢?
大家可以嘗試先把Enemy Canvas拖入場景中,就會發現這個UI跟上一篇文章介紹的UI長的不同,他是放在『場景中』的。
取名為UI Socket,這個物件的位置是我們要定位Health Bar用的。
所以,我們要在場景中將UI Socket的位置移動到Enemy的頭頂上。
接下來我們就來看Enemy UI做了什麼事?
大家可以看到Enemy頭上的血條呈現一個很詭異的歪斜狀態,但實際上是因為我們把UI調整到可以面向Camera照過來的方向的關係。
所以,實際在遊戲中,我們應該會看到的是如下圖的模樣。
https://drive.google.com/open?id=1Q6pn14JVW4Q6ut9Yhgw9HaAECKqccieL
本章實作敵人頭頂上的血條,同樣讓我們來匯入package內容。
匯入之後,讓我們看看Enemy Canvas的內容,首先大家可以看見Canvas的Render Mode是World Space,什麼意思呢?
大家可以嘗試先把Enemy Canvas拖入場景中,就會發現這個UI跟上一篇文章介紹的UI長的不同,他是放在『場景中』的。
接著,一樣需要新增一個Enemy.cs檔案,然後撰寫一段跟Player.cs相似的程式碼,並將Enemy.cs拖曳到Enemy中:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy : MonoBehaviour { [SerializeField] float maxHealthPoints = 100f; float currentHealthPoint = 100f; public float healthAsPercentage{ get{ return currentHealthPoint / maxHealthPoints; } } }
然後我們於Enemy底下建立一個空的GameObject。
所以,我們要在場景中將UI Socket的位置移動到Enemy的頭頂上。
再來把EnemyUI.cs拖曳到UI Socket中,並把Enemy Canvas的prefab拖曳到EnemyUI.cs的變數中。
接下來我們就來看Enemy UI做了什麼事?
using UnityEngine; // Add a UI Socket transform to your enemy // Attack this script to the socket // Link to a canvas prefab that contains NPC UI public class EnemyUI : MonoBehaviour { // Works around Unity 5.5's lack of nested prefabs [Tooltip("The UI canvas prefab")] [SerializeField] GameObject enemyCanvasPrefab = null; Camera cameraToLookAt; // Use this for initialization void Start() { cameraToLookAt = Camera.main; //載入Enemy UI 的prefab,產生位置設定為UI Socket的位置 Instantiate(enemyCanvasPrefab, transform.position, Quaternion.identity, transform); } // Update is called once per frame void LateUpdate() { //設定UI的方向為面對Camera照過來的方向 transform.LookAt(cameraToLookAt.transform); transform.rotation = Quaternion.LookRotation(cameraToLookAt.transform.forward); } }
大家可以看到Enemy頭上的血條呈現一個很詭異的歪斜狀態,但實際上是因為我們把UI調整到可以面向Camera照過來的方向的關係。
留言
張貼留言