UnityEditorのオブジェクト管理(UnityEvent編)

Unityイベントのインスペクター管理もそれ以外の管理方法と基本的に違いがありません。
どのイベントハンドラー(メソッド)が呼び出されるかは、シーンファイルに記述されているため、スクリプトを変更することなく、イベント処理を実現することができます。

これから、読んでみましょう

サンプルプロジェクト

エディター画面

デバッグ表示

実行結果

SampleScene.unityファイル(イベント部分の抽出)

どのオブジェクトのどのメソッドが実行されるのかが、シリアル化された状態で記述されています。

--- !u!114 &912011094
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 912011092}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 9c812735c477845d782e68c76e4c6289, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  unityEvent:
    m_PersistentCalls:
      m_Calls:
      - m_Target: {fileID: 912011095}
        m_TargetAssemblyTypeName: ShowSample, Assembly-CSharp
        m_MethodName: Show
        m_Mode: 1
        m_Arguments:
          m_ObjectArgument: {fileID: 0}
          m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
          m_IntArgument: 0
          m_FloatArgument: 0
          m_StringArgument: 
          m_BoolArgument: 0
        m_CallState: 2
--- !u!114 &912011095
MonoBehaviour:
  m_ObjectHideFlags: 0
  m_CorrespondingSourceObject: {fileID: 0}
  m_PrefabInstance: {fileID: 0}
  m_PrefabAsset: {fileID: 0}
  m_GameObject: {fileID: 912011092}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: 36a5264d023284922835fe9c6007ab7c, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 

スクリプト(InspectorSet.cs)

using UnityEngine;
using UnityEngine.Events;

public class InspectorSet : MonoBehaviour
{
    public UnityEvent unityEvent;

    void Start()
    {
        unityEvent.Invoke();
    }
}

スクリプト(ShowSample.cs)

using UnityEngine;

public class ShowSample : MonoBehaviour
{
    public void Show()
    {
        Debug.Log("コールバック");
    }
}

Unity

Posted by hidepon