技術系のめも。

技術関連(Unity)のメモ。調べてもうまく見つからなかったことを書きます。

PlayableTrackのInspector拡張

経緯

 調べてもうまく出てこなかったので一応同じ道をたどる方がいたら手助けになるかなと思い。

Unityのversion

 記事を書くにあたっては2018.4を用いましたが、2019.2でも動作確認済みです。

方法

 PlayableAssetを継承したクラスを対象にCustomEditorのOnInspectorGUIを用いる。

拡張元のTrackを作る
using UnityEngine;
using UnityEngine.Playables;

public class TestTackAsset : PlayableAsset {

    [SerializeField] int num;


    public override Playable CreatePlayable(PlayableGraph graph, GameObject owner) {

        var behaviour = new TestTrackBehaviour();

        return ScriptPlayable<TestTrackBehaviour>.Create(graph,behaviour);

    }


    public void Log() {
        Debug.Log("Num is " + num);
    }


}

TestTrackBehaviorは内部に何も書いていないハリボテです。
今回はTestTrackAsset内にあるLogというメソッドをエディタ上のボタンで実行できるようにします。

エディタ拡張
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(TestTackAsset))]
public class TestTrackAssetInspector :Editor
{

    public override void OnInspectorGUI() {

        base.OnInspectorGUI();

        if (GUILayout.Button("Log")) {

            (target as TestTackAsset).Log();

        }

    }


}

拡張自体の書き方は特に変わらないと思います。

結果

こんな感じです。

f:id:haruyan9071:20200507140127g:plain
結果

ScriptableObjectのコンストラクタ

はじめに

ScriptableObjectの初期化処理について調べてたら

「MonoBehaviourじゃないからコンストラクタ使えるよなぁ」

とふと思ったので実行タイミング調べてみました。

結果

・コード書き換えた後の読み込み

・ゲーム実行前の読み込み

コンパイルっていうんですかね…?)

に実行されました。

そのコンストラクタが書かれたクラスとは別のクラスやファイルを書き換えても読み込みの際呼ばれました。

ちなみに

コンストラクタに引数を持たせると、上記のタイミングでは呼ばれなくなりました。

使いどころあるのか

微妙…。調べても出てこなかったので一応書きました。

ただ、出てこないってことはみんな使わないってことかな…実際自分も結局使わない形に落ち着きました。