仕事のUnityプロジェクトは実はもうそろそろ終盤のようです。
しかしここでUnityのTimeline機能を触るようになった。やりたいことは指定した時間でAPIを呼び出すようにする、ということだが、UnityデフォルトのSignalではパラメータをTimeline側で設定することができないので、SignalEmitterを継承してカスタマイズSignalを開発すること、というまでは一応問題なかった。
しかし、複数APIルートを呼べるようにしてほしい、という要望なので、パラメータももちろんルートごとに異なる。まあ、それならSignalEmitterからカスタマイズSignalを増やせばいいじゃん、とは思ったけど、Unity Editor内部では問題ないが、ビルドすると一個目のSignal以外はうまく動作しない、という報告を受けた。
これはなぜ?と困惑しましたが、いかんせんビルドではWindows環境じゃないとできないプロジェクトであり、うちの開発環境(会社が支給したもの)はMacなので、そこまではテストできなかった。色々と調べましたが、結局ヒントはTimelineアセットのMetaファイルで、2個目のカスタムSignalを利用すると、m_EditorClassIdentifierに値が設置された。そしてそのままアセットのMetaファイルの値(例えばUID)を変えてみると、1個目以外(つまりm_EditorClassIdentifierが設置されたSignal)は全部Invalid Marker扱いとなる。
この挙動を見ると、もしかして同じファイルあるいは同じ名前空間で複数SignalEmitterを用意するのは駄目?と思って、名前空間を見直してSignalをそれぞれ別のファイルと名前空間に作り直してみたが、そうすると、TimelineアセットのMetaファイルのm_EditorClassIdentifierは、すべてのSignalも空白になった。そしてそのままビルド関係に伝えて、ビルドがうまくできて想定通りに動作したとの報告であった。
これはとんでもない罠ですね…
もちろんプロジェクトのUnityバージョンは2022なので、新しいバージョンでは修正されるかもしれない。しかし、おそらくまだ2022を利用する方が多いだろうから、一応この仕様を記事にしました。
P.S. 名前空間ではなく同じファイルで複数SignalEmitterはNG、ということに発覚しました。