2014年3月12日水曜日

【Unity,NGUI3.x】2DToolkitのSpriteにNGUIでHPバー(HUD)を表示する


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)に変換&戻しを行ってる。

うごいた

video

やれやれ。

Unity系記事まとめ

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...