NGUIでHPバーを表示するだけでめっちゃ苦労しました。
ちなみにこういうのをHUD(HeadUpDisplay)って呼ぶらしいですね。
やりたいこと
・キャラクターは2DToolkitのtk2dSpriteでtk2dCameraに表示・HPバーはNGUIのUISpriteでUICameraに表示
やりかた
下記クラスを作成し、キャラクターオブジェクトに追加HeadUpDisplay.cs
using UnityEngine; public class HeadUpDisplay : MonoBehaviour { /// <summary>キャラクタを表示しているカメラ</summary> public Camera BaseCamera; /// <summary>HUDを表示するカメラ</summary> public Camera HudCamera; /// <summary>HUDプレハブ</summary> public GameObject HudPrefab; /// <summary>キャラクタ座標系でのHUDオフセット</summary> public Vector3 HudOffset; /// <summary>HUDインスタンス(自動生成)</summary> private GameObject hudObject; void Start () { /// <summary>HUDを生成</summary> this.hudObject = Instantiate (this.HudPrefab, Vector3.zero, Quaternion.identity) as GameObject; } void Update () { /// <summary>キャラクタのWorld座標をスクリーン座標に変換</summary> Vector3 hudViewportPoint = this.BaseCamera.WorldToViewportPoint (this.transform.position + this.HudOffset); /// <summary>スクリーン座標をHUDのWorld座標に変換</summary> Vector3 hudWorldPoint = this.HudCamera.ViewportToWorldPoint (hudViewportPoint); hudWorldPoint.z = 0.0f; this.hudObject.transform .position = hudWorldPoint; } }
こんな感じで設定
大事なとこ
WorldToViewportPointとViewportToWorldPointだけ。それぞれWorld座標からスクリーン座標(左下0,0右上1,1)に変換&戻しを行ってる。
うごいた
やれやれ。
→Unity系記事まとめ