2017-03-11 1 views
0

Layer1: 4状態マシン、各状態マシンX状態。これらのマシンのそれぞれには、動作参照が設定された状態があります。いくつかは混合木です。エディタスクリプトを使用して、同期されたレイヤの動き参照を変更しますか?

レイヤー2(レイヤー1と同期): Unityのエディターでは、レイヤー1と同じナビゲーションツリーをナビゲートできます。アニメーションクリップへの参照をうまく変更することができます。

質問は、スクリプトでどのようにすればよいですか?これらの参照へのアクセスはありません。この場合、Unityエディタはこれをどのように保存していますか? https://s3.amazonaws.com/uploads.hipchat.com/20686/98498/cEhYZ4owenI8ebJ/Test.png

答えて

1

バックエンド表現:私が参照しています何の

スクリーンショット。 これはUnityのクラスのほとんどの中でかなり一般的ですが、いくつかの注目すべき例外はありますが、例えばUnityのUIのように、あなたが興味があるならrepoはオープンソースです。

Unityのデコンパイルコードを見たことがあるなら、多くのメソッドがバックエンドのC++で書かれた実際のメソッドに委譲されていることに気付くでしょう。これは、多くの変数を設定するのと同じ設定です。

Animatorコントローラのケースでは、AnimatorコントローラがRuntime Animatorコントローラから継承するので、実行時にアニメーションクリップにアクセスできます。しかし、あなたは新しいものに交換することはできません。このためには、代わりに別のコントローラが必要です。

エディターでアニメーションを入れ替えることはできますが、エディターでのみ作成して出荷して出荷することはできません。 UnityEditor.Animations名前空間は、コードからアニメータコントローラを構築する機能を提供します。これらのクラスの逆コンパイルされたバージョンを見ると、これらのプロパティの多くがC++に委譲されて実際のアニメータコントローラビルドを行うことがわかります。次に、コードでそのビルドバージョンを使用することができます。

実行時に独自のアニメータコントローラを構築する可能性があります。しかし、これは独自のバージョンであり、私の知る限りではユニティは実行時にアニメータコントローラを構築することはできません。あなたはUnityEngine.Experimental.Director名前空間の後にいます。これにより、実行時にアニメーションチェーンやアニメーターコントローラーを構築するために使用できるカスタムプレイアブルにアクセスできます。しかし、これは実験的なものであり、今後のUnityリリースで変更される可能性があります。

あなたの答えはバックエンド表現です。コントローラのランタイムロジックは、C++で記述され、エディタでアクセス可能なビルダーインタフェースを備えています。バックエンドデータは、保存ボタンを押すとシリアル化され、フロントエンドはC#からバックエンドを参照する方法を提供します。実行時には、Animatorを使用してバックエンドの特定のファセットを制御します。

いくつかのリンク:

アニメーション:https://docs.unity3d.com/ScriptReference/Animations.AnimatorController.html

ディレクターもの: https://docs.unity3d.com/ScriptReference/Experimental.Director.AnimatorControllerPlayable.html

うまくいけば、これは、あなたの質問に答えます。

+0

素晴らしい情報JJC、私はスクリプトを介してコントローラを構築しています。すべてのレイヤーが脆弱レイヤーを除いてきれいです。私が持っている各銃は、コントローラ内の別の状態マシンです。銃の起こりやすいアニメーションは、異なるクリップを使って1対1で同じ構造なので、同期したレイヤーにあります。最終的な結果は、少なくとも同期されたレイヤーではなく、mecanimの失敗したスクリプトAPIではできないと思われます。本当の問題は、私が何百もの銃を持ち、100以上のアニメーションを設定することができるということです。* 100アニメーションは、これを行う際に数千、数千のドラッグ・アンド・ドロップと工数があります:( –

+0

私はこれらの参照を編集時に設定しようとしていますコントローラの設定では、手で行うのがずっと時間がかかります。構造体が100%分かっているので、エディタのスクリプトはやり方のように思えました。 –

+0

エディタスクリプトは確かに有益でしょう。AnimatorControllerLayer API、https://docs.unity3d.com/ScriptReference/Animations.AnimatorControllerLayer.html、必要な機能を持つ可能性があります。おそらくSetOverrideMotions。 – JJC

関連する問題