GatherProperties機能の確認
UnityのタイムライントラックにはGatherProperties
という仮想メソッドがあり、
これをオーバーライドしてタイムラインプレビュー中に変更した値を元に戻すのが一般的かと思います。
公式ドキュメント
コンポーネントのフィールドの保護
コンポーネントのプロパティに対しては以下のメソッドで値を保護することができています。
// driverはIPropertyCollectorインターフェースを実装したオブジェクトです。 driver.AddFromName <コンポーネントの型>(対象のゲームオブジェクト, シリアライズフィールド名);
ゲームオブジェクトのフィールドの保護
同様にゲームオブジェクトのフィールド、特にActiveSelfプロパティのフィールドを保護しようとしたのですが、うまくいきませんでした。
driver.AddFromName( 対象のゲームオブジェクト, "m_ActiveSelf");
エラーメッセージ
DrivenPropertyManager has failed to register property "m_ActiveSelf" of object "TsetObject" with driver "" because the property doesn't exist.
課題1:ライブラリクラスのプライベートフィールド名を調べたい
今ある課題としては、フィールド名がm_ActiveSelf
で合っている保証がありません。UnityEngineライブラリクラスのプライベートフィールドなので確認する方法がないためです。
試しに以下のようにリフレクションで取得しようとしてもうまくいきませんでした。
var fieldNames = typeof(GameObject).GetFields(System.Reflection.BindingFlags.NonPublic).Select(field => field.Name).ToArray(); Debug.Log(fieldNames.Length); // 0
例えばトランスフォームであればm_LocalPosition
というフィールドがありますが、このようなプライベートフィールド名を知る一般的な方法はどのようなものなのでしょうか。
課題2:ゲームオブジェクトのフィールドを保護したい
ライブラリクラスのプライベートフィールドの確認方法を理解した上で上記と同じ
driver.AddFromName( 対象のゲームオブジェクト, シリアライズフィールド名);
でゲームオブジェクトのActive状態を保護できるのか試したいと考えています。
もしできなければ、ゲームオブジェクトはコンポーネントとは違って特殊なのか、それともActiveプロパティが特殊なのか切り分けて行きたいと考えています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/09 14:00
2020/07/09 15:28
2020/07/10 14:38