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系記事まとめ

