(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

シーンビューにちょっとした情報を載せたい時はHandles.Labelが便利【Unity】【エディタ拡張】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2021.1.16f1


はじめに


今回は「現在のHPを簡単に確認出来るようにしたいけどユーザに見せたいわけじゃない!」みたいな

シーンビューにちょっとした情報を載せたい時に役立つ記事です!

f:id:kan_kikuchi:20210831154314g:plain


なお、記事中では以下のアセットを使っています。

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


例えば上記のスクリプトを石のオブジェクトに追加してみると以下のような感じに。

f:id:kan_kikuchi:20210831151404j:plain


そのオブジェクトの位置を元にしているので、テキストも石に合わせて動きますし、

f:id:kan_kikuchi:20210831152259g:plain


どの方向や位置から見ても表示されます。

f:id:kan_kikuchi:20210831152121g:plain


なお、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
f:id:kan_kikuchi:20210831152723g:plain


ただ、離れていても表示サイズは基本変わらないので、

一定以上離れた場合は表示しない方が見やすいかもしれません。

//耐久値、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
f:id:kan_kikuchi:20210831154314g:plain