1. 程式人生 > >Unity3d 三種血條的製作

Unity3d 三種血條的製作

方法一:(推薦)

結果:血條跟隨目標物體移動,血條一直面向攝像機


步驟一:

1.製作一個血條(Image)的預設體;

2.在Canvas 中新增一個Plane,作為血條的父物體;

3.(1,2)準備工作做完了,思路:在生成遊戲物體時,生成血條,把遊戲物體的3D座標轉換為螢幕座標,讓血條的座標等於遊戲物體的螢幕座標,如果要修改,可以新增一些偏移,

程式碼如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class EnemyState : MonoBehaviour {
    //宣告你需要用到的變數
    private  GameObject HP_imageGameobject;
    private GameObject HP_imageGameObjectClone;

    private Transform HP_Parent;
    private Vector3 EnemySceenPosition;

    void Start () {

        //獲取複製HP的預製體(prefab)
        HP_imageGameobject=Resources.Load<GameObject>("Enemys/Image_blod");

        //獲取放HP血條的父物體
        HP_Parent = GameObject.FindWithTag("HPPosition").transform;
        //把遊戲物體的世界座標轉換為螢幕座標
        EnemySceenPosition=Camera.main.WorldToScreenPoint(transform.position);
        //建立一個Clone血條圖片
        HP_imageGameObjectClone = Instantiate(HP_imageGameobject,EnemySceenPosition, Quaternion.identity);
        //設定血條的父物體
        HP_imageGameObjectClone.transform.SetParent(HP_Parent);
    }

    void Update () {
        //沒幀都去執行使血條跟隨物體
        PHFollowEnemy();
    }
    //血條放置到Canvas另一個Plane中 並跟隨物體移動
    void PHFollowEnemy()
    {
        //把物體座標轉換為螢幕座標,修改偏移量
        EnemySceenPosition= Camera.main.WorldToScreenPoint(transform.position)+new Vector3(0,50,0);
        HP_imageGameObjectClone.transform.position = EnemySceenPosition;
    }
}


方法二:(推薦)

和方法一相似,只是把血條的座標轉換到3D場景中 ,和遊戲物體的座標相等,之後微調,

方法三:

如果血條不一定面向攝像機,可以把(用Canvas單獨做血條)血條設定為遊戲物體的子物體;