週刊SleepNel新聞

SleepNel所属のぽうひろが日々の個人開発で気になったことを綴ります。

【Unity】3DオブジェクトにUI(2D)オブジェクトを追随させる

みなさん、こんにちは。ぽうひろです。

今日はアーバンナックル開発の時に調べた、
3DオブジェクトにUI(2D)オブジェクトを追随させる方法を書き留めておきたいと思います。
こちらの記事を参考にさせていただきました!
qiita.com

こんな感じで、動く敵(右側)の上部に必殺ゲージ(uGUIの2Dオブジェクト)を追随させ、ゲージが溜まったら必殺技を撃ってくる!みたいなことをやりたい。
f:id:pouhiroshi:20160723185309p:plain:w350

ゲーム画面はメインカメラ(Perspective)、UIはUI Camera(Orthographic)で、別の座標系になっているため、ちょっと小細工が必要です。

// 3Dオブジェクトのワールド座標から、Perspective カメラのビューポート座標を求める 
var viewPortPos = Camera.main.WorldToViewportPoint(player2.transform.position);
// 上記ビューポート座標を Orthographic カメラのワールド座標に逆変換する
var worldPos2d = GameObject.Find("UI Camera").GetComponent<Camera>().ViewportToWorldPoint(viewPortPos);
// 2Dオブジェクトの座標を移動
GameObject esp = GameObject.Find ("ESp");
//worldPos2dのy軸を少し足してキャラの上部に来るように調整
esp.transform.position = new Vector3(worldPos2d.x,worldPos2d.y+2.5f,worldPos2d.z);

このコードの結果、このような動きになりました。uGUIで作った敵の必殺ゲージがちゃんと敵の上部に表示されていますね!
f:id:pouhiroshi:20160723190115g:plain

動く対戦相手のHPを表示させるような時にも使える手法かと思います。

それでは、また!