読者です 読者をやめる 読者になる 読者になる

(:3[kanのメモ帳]

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

通知メッセージを表示する【Unity】【エディタ拡張】


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


この記事でのバージョン
Unity 5.4.0f3


はじめに

今回はUnityエディタ上で通知メッセージを表示する方法のご紹介!

通知メッセージとは以下のような感じのやつです。


f:id:kan_kikuchi:20160829133222j:plain


EditorWindow.ShowNotification

通知を表示するにはEditorWindowクラスのShowNotificationメソッドを使います。

なお、通知は一定時間で自動で消えますが、即座に消したい時はRemoveNotificationを使います。



例えば以下のような感じで使います。

using UnityEditor;
using UnityEngine;

public class NotificationWindow : EditorWindow {

  //メニューからウィンドウを表示
  [MenuItem("Tools/Open/NotificationWindow")]
  public static void Open (){
    NotificationWindow.GetWindow (typeof(NotificationWindow));
  }

  //表示するGUIの設定
  private void OnGUI(){

    //通知を表示するボタン
    if(GUILayout.Button("Show Notification")){
      ShowNotification(new GUIContent("通知!"));
    }

    //通知を消すボタン
    if(GUILayout.Button("Remove Notification")) {
      RemoveNotification();
    }

  }


}


上記のスクリプトをEditorディレクトリに入れると、

メニューにTools/Open/NotificationWindowという項目が追加されます。


f:id:kan_kikuchi:20160829133915p:plain


この項目を選択するとからウィンドウが表示でき、

Show Notificationボタンを押すと通知が表示され、

Remove Notificationボタンを押すと通知が消えます。


f:id:kan_kikuchi:20160829134038g:plain


自作ウィンドウ以外に表示

通知は自作したウィンドウだけでなく、

GameViewやSceneViewConsoleWindow等にも表示することが可能です。

using UnityEngine;
using UnityEditor;

public class NotificationTest{

  //Game Viewに通知を表示する
  [MenuItem("Notification/Game View")]
  public static void NotificationGameView (){
    var assembly = typeof(UnityEditor.EditorWindow).Assembly;
    var type = assembly.GetType( "UnityEditor.GameView" );
    EditorWindow.GetWindow(type).ShowNotification(new GUIContent("GameView"));
  }

  //Scene Viewに通知を表示する
  [MenuItem("Notification/Scene View")]
  public static void NotificationSceneView (){
    var assembly = typeof(UnityEditor.EditorWindow).Assembly;
    var type = assembly.GetType( "UnityEditor.SceneView" );
    EditorWindow.GetWindow(type).ShowNotification(new GUIContent("SceneView"));
  }

  //Console Windowに通知を表示する
  [MenuItem("Notification/Console Window")]
  public static void NotificationConsoleWindow (){
    var assembly = typeof(UnityEditor.EditorWindow).Assembly;
    var type = assembly.GetType( "UnityEditor.ConsoleWindow" );
    EditorWindow.GetWindow(type).ShowNotification(new GUIContent("ConsoleWindow"));
  }

}


上記のスクリプトをEditorディレクトリに入れると、

メニューにNotificationという項目が追加されます。


f:id:kan_kikuchi:20160829134719p:plain


この各項目を選択すると通知が表示されます。


f:id:kan_kikuchi:20160829134535g:plain


おわりに

エディタ上限定ですが、何かの通知をする時にはログを出すより分かりやすくていいかもしれません。