3D上の得点をNGUI上の同じ位置に表示する


image

3D上の敵を倒したときに、その得点が倒した敵の頭の上に出したいときがありますよね。3D側で得点のオブジェクトを表示させるか、UI側で出させるかいろいろありますが、NGUIで出すときのサンプルを作ってみました。

>> Demo
>> Sanple Download (NGUI3.5のimportが必要)

[unityjavascript]
/**
* 指定の座標に得点を出す。
* 上に上がって少し下がる演出。
*/
public function ShowPoint(pos:Vector3, point:int):void {
var pointLabelGO:GameObject = NGUITools.AddChild(this.gameObject, this.pointLabelPrefab);

(pointLabelGO.GetComponent(UILabel) as UILabel).text = point.ToString();

var cameraPos = Camera.main.WorldToScreenPoint(pos);
var pointPos = new Vector3(cameraPos.x – Screen.width / 2, cameraPos.y – Screen.height / 2, 0);

// 初期位置
pointLabelGO.transform.localPosition = pointPos;

// …以下演出…
}
[/unityjavascript]

表示させたい3D側のオブジェクトのグローバルポジションから、Camera.WorldToScreenPoint()を使ってスクリーン座標にしてます。得られた座標は左上が(0, 0)の座標系ですが、NGUIは中心が(0, 0)の座標系なのでスクリーンの半分だけ表示位置をずらして表示させています。

NGUIではInstantiate()してからpositionを設定しても位置が反映されないので、NGUITools.AddChild()を利用して設定すると反映されるので注意。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です