この記事でのバージョン
Unity 2021.1.16f1
はじめに
今回は「現在のHPを簡単に確認出来るようにしたいけどユーザに見せたいわけじゃない!」みたいな
シーンビューにちょっとした情報を載せたい時に役立つ記事です!
なお、記事中では以下のアセットを使っています。
Dreamscape Nature: Meadows | 3D Fantasy | Unity Asset Store |
Handles
シーンビューだけに何か表示を追加したい場合はHandlesを使うと簡単に行えます。
なお、今回はテキストの描画だけですが線や図形も描画出来ます。
使い方は簡単、OnDrawGizmosとうメソッドを作成し、そこでHandles.Labelを実行するだけ
//Handlesを使うのに必要、エディタ用なのでUNITY_EDITORで括る #if UNITY_EDITOR using UnityEditor; #endif
#if UNITY_EDITOR private void OnDrawGizmos() { //シーンビュー上にテキスト表示 Handles.Label(transform.position + new Vector3(0, 3, 0), "これは石です"); } #endif
例えば上記のスクリプトを石のオブジェクトに追加してみると以下のような感じに。
そのオブジェクトの位置を元にしているので、テキストも石に合わせて動きますし、
どの方向や位置から見ても表示されます。
なお、OnDrawGizmosはシーンビューを表示していれば実行される更新系(?)のメソッドなので
常に変化する値をリアルタイムに表示する事も可能です。
//耐久値、1秒に1ずつ減っていく private float _hp = 4; private void Update() { _hp -= Time.deltaTime; } #if UNITY_EDITOR private void OnDrawGizmos() { //テキストの設定、_hpが2より大きければ青、そうでなければ赤に var guiStyle = new GUIStyle {fontSize = 20, normal = {textColor = _hp > 2 ? Color.blue : Color.red}}; //耐久値をシーンビュー上に表示 Handles.Label(transform.position + new Vector3(0, 4, 0), $"耐久値 : {_hp:F0}", guiStyle); } #endif
ただ、離れていても表示サイズは基本変わらないので、
一定以上離れた場合は表示しない方が見やすいかもしれません。
//耐久値、1秒に1ずつ減っていく private float _hp = 4; private void Update() { _hp -= Time.deltaTime; } #if UNITY_EDITOR private void OnDrawGizmos() { //シーンビュー上で、一定以上離れていれば表示しないように if (Vector3.Distance(transform.position, SceneView.currentDrawingSceneView.camera.transform.position) > 10f) { return; } //テキストの設定、_hpが2より大きければ青、そうでなければ赤に var guiStyle = new GUIStyle {fontSize = 20, normal = {textColor = _hp > 2 ? Color.blue : Color.red}}; //耐久値をシーンビュー上に表示 Handles.Label(transform.position + new Vector3(0, 4, 0), $"耐久値 : {_hp:F0}", guiStyle); } #endif