はじめに
この記事はHamster Output Advent Calendar 2024の14日目の記事です!
ArborFSMのステートから現在再生中のAnimationの情報を取得したいなと感じるようになり、取得方法を探しましたがスクリプトの中身を見る限り取得方法がありませんでした...。
スクリプトの中身を載せるのはアウトなので...どうやって取得できるようにしたかの手段を書きます。
投稿者はEditorの処理を完全に把握していません。あくまで、自分が欲しい処理を追加するために少し追加しただけです。
AnimatorCrossFadeの中身を確認する
利用したい情報が入っている変数名だけ書くと、下の内容になります。
// LayerとStateを保持している変数たち
private string _CacheLayerName;
private string _CacheStateName;
自分が調べた限りにはなりますが、ArborにはEditorの変数を参照する手段がないためこのままだと参照できないです。
AnimatorCrossFade.csを複製して処理を追加する
AnimatorCrossFadeに直接追加するのもありかな...?と考えましたが、仮にUpdateが来た時に困りそうな気がしたので、別フォルダーに複製して作りました。
そして、複製されたAnimatorCrossFadeに追加された処理が以下の通りです。プロパティを追記しました。
// ここ以外の内容はAnimatorCrossFade.csと同じ
#region 2024.12.24にハムスターが追加した部分
public string GetChaceLayerName => _CacheLayerName;
public string GetChaceStateName => _CacheStateName;
#endregion
これで、ArborEditor上にスクリプトが配置できるようになります。
現時点では、AnimatorをアタッチしてもLayerやStateに選択できるタブは出てきません。通常のAnimatorCrossFadeではAnimatorを参照すると以下の状態になります。
次はこのタブを出すために、もう一つのEditorのスクリプトを複製します。
AnimatorCrossFadeInspector.csを複製して一部の処理を変更する
変更する部分はclassの上にあるCustomEditorの内容を変更するだけです。
[CustomEditor(typeof(CustomAnimatorCrossFade))]
EditorでAnimatorを設定するとAnimatorCrossFadeと同じようにLayerとStateが設定できるようになります。
LayerとStateの参照方法
同じステート内にCustomAnimatorCrossFadeがあればGetComponentで取得できます。
// 変数宣言
private CustomAnimatorCrossFade _customAnimatorCrossFade;
// 取得方法
_customAnimatorCrossFade = GetComponent<CustomAnimatorCrossFade>();
// こんな感じで使えます
var layer = _customAnimatorCrossFade.GetChaceLayerName;
var state = _customAnimatorCrossFade.GetChaceStateName;
これで、LayerとStateをAnimatorCrossFadeから参照できるようになりました。
詳細に書けない内容な記事にはなりましたが、コピーしたり工夫すれば割と自分が追加したい処理を入れれるんだなと思いましたー