Unity UIToolkit
UITooklit sample の Dragon Crashers でメニューカーソルのアニメはスクリプトで行っていた。
// Use the tweening tool for animation
m_MenuMarker.experimental.animation.Position(targetInRootSpace - offset, duration);
外部の Tweener を使わなくても済むのは便利そうだが、experimental な機能っぽいのと、毎回呼ぶたびに alloc が発生していのがちょっと気になった。
しかもちょっと不具合っぽい動作になった。
試しにサンプルと同じ experimental.animation.Position
を使うコードをこんな感じで書いてみた。
var pos = new Vector3( UnityEngine.Random.Range( -100, 100 ) ,0 ,0 );
label.experimental.animation.Position( pos, 5000 );
これをキー押下時に呼ぶようにしたが、連打して連続で呼ばれたりすると結構な頻度で前のアニメがキャンセルされずにおかしな動作になる。
いまのところ実用は控えたほうがよさそう。
UIToolkit は Scene view に表示されないので実行時に表示されているのがどの element なのかを探しにくい。
Window -> UI Toolkit -> Debugger
を開くことで表示中の要素を見ることはできる。
でも Pick Element
を使っても Game ビューをクリックして表示要素を選択することはできなさそう。
UITooklit の Binding は便利すぎる!
UI の表示項目に UniRx や R3 を使ってプロパティの bind を自動で行う下回りでも作ろうかと思っていたけど、既に Scriptable Object で素敵に Binding する仕組みが用意されていた!
この辺はこの公式動画 20:00 あたりで大変分かりやすく説明してくれている。
https://www.youtube.com/watch?v=GFxOCdHwWZA&t=43s
ただ、Unreal の bind と同じく毎フレーム更新処理などをやっていないのかとちょっと心配。今度調査してみたい。
もっとすごいことに Localization Table の bind にまで対応してあった!
uGUI では Localize String Event や GameObject Localizer などを使って UI へのテキスト入力を楽に自動で設定できていたが、UIToolkit でも同じように StringTable が Bind できるように!
しかも String Table だけじゃなく Font や Texture、Audio などなどほとんどのデータの binding が用意されている模様。これはずいぶんと設定が楽になりそう。