比較的最近の Unity では、 Timeline 関連の API も公開されていて、ある程度自由にカスタマイズすることが出来ます。
今回はそのうち、 TrackAsset
についてのお話です。
TrackAsset
を継承したクラスを作ることで、 Timeline に任意のトラックを追加することが出来ます。
ちなみにトラックっていうのは、 Timeline の左側にある部分です。 Animation Track とかいろいろありますね。
例えば、以下のようなコードを書くことで、自作アセットをトラックとして扱えたりします。
// ------------------------------------------------------------------------------------------ // Copyright (c) Natsuneko. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. // ------------------------------------------------------------------------------------------ using UnityEngine; using UnityEngine.Timeline; namespace NatsunekoLaboratory.NekoAnim.Models.Timeline { [TrackColor(236f / 255, 202f / 255, 224f / 255)] [TrackBindingType(typeof(GameObject))] [TrackClipType(typeof(NekoAnimPlayableAsset), false)] public class NekoAnimTrack : TrackAsset { } }
TrackColor
属性は、トラックの左側に表示されたり、トラックに含まれるクリップの色について設定が出来ます。
TrackBindingType
属性は、トラックに関連付けられるオブジェクトを設定することが出来ます。この場合は GameObject
です。
TrackClipType
では、トラックに含むことが出来るクリップを指定することが出来ます。この場合は NekoAnimPlayableAsset
です。
ただ、このままだと、トラックを追加するときに、 NatsunekoLaboratory.NekoAnim.Models.Timeline/Neko Anim Track
と表示されます。
つまりは、単純に <NAMESPACE>/${ObjectNames.GetInspectorName(obj)}
みたいな名前が表示されます。
この状態だと、スクリプトに指定した名前空間がそのまま表示されてしまい、ユーザビリティが低いです。
(というか、基本的に Unity の機能は基本的に名前空間を考慮していない気がするんですが、なぜなんでしょう?)
ということで、表示名を変更しましょう。
といっても、 Unity の不具合で、名前空間を使用した場合は完全に名前を指定することは出来ません。
最低限、何らかの階層が発生することになります。詳しくは参考文献を参照してください。
やり方は簡単で、 System.ComponentModel.DisplayNameAttribute
を使用します。
こんなかんじですね:
// ------------------------------------------------------------------------------------------ // Copyright (c) Natsuneko. All rights reserved. // Licensed under the MIT License. See LICENSE in the project root for license information. // ------------------------------------------------------------------------------------------ using System.ComponentModel; using UnityEngine; using UnityEngine.Timeline; namespace NatsunekoLaboratory.NekoAnim.Models.Timeline { [DisplayName("Natsuneko Laboratory/NekoAnim Track")] // ← ここ追加 [TrackColor(236f / 255, 202f / 255, 224f / 255)] [TrackBindingType(typeof(GameObject))] [TrackClipType(typeof(NekoAnimPlayableAsset), false)] public class NekoAnimTrack : TrackAsset { } }
こうすることで、名前空間が含まれない、完全にカスタムした名前が表示されます。
逆に、ネストしない場合、つまりは /
を含めない場合は、第一階層は名前空間になるのでご注意ください。
ということで、ではでは~。
参考: