UnityのDefault PlayablesとTimeline Playable Wizardを使う際の備忘録 後編 Normal Modeを使う
はじめに
この記事は、前編(UnityのDefault PlayablesとTimeline Playable Wizardを使う際の備忘録 前編 Standard Bind Playableを使う)の続きです。こちらではDefault PlayablesのTimeline Playable WizardのNormal modeの使い方をまとめます。Timeline Playable Wizardの基本的な使い方は前編をご覧ください。
Normal Modeは、タイムラインで操作するゲームオブジェクト以外への参照が必要な時に使用します。例えば、指定する二つのゲームオブジェクトの間を移動させるなどです。
使用するサンプルスクリプト
今回は、こちらの NormalModeSample.cs を使います。
gist64e5f0aee13fae187a658cd08b92c8f7
Unity Editor上でファイルを作り、Main Cameraにコンポーネントとしてアタッチしてください。
このスクリプト自体は、SampleVariableの値をDebug.Logで表示する以外のことは行いません。SampleVariableに入れるべき値はPlayableの方で行います。
Timeline Playable WizardのNormal modeの設定
Timeline Playable Wizardを開きます。今回は以下の通りに設定します。
Standard Blend Playableのチェックは入れません。
Exposed Referencesにはシーン内のほかのゲームオブジェクトへの参照をするための変数を指定します。今回は、OtherGameObjectTransformという名前で、ほかのゲームオブジェクトのTransformを参照できるよう設定します。
Behaviour Variablesはシーン内のオブジェクトへの参照が不要であるものを指定します。今回はMultiplyというfloatの値を使います。
あと、Create Drawerにもチェックを入れておきます。
最後に、Createボタンを押して、Playableを作成してください。
MixerBehaviourの設定
Createを押すと、以下の通り、NormalModeSamplePlayableのスクリプトが作られます。この中のNormalModeSamplePlayableMixerBehaviourのスクリプトを編集します。
スクリプトは、以下の通りです。
gistc7901e6460f0137df332ae601e949f40
11行目のtrackBindingがWizardで指定したTrack Binding Type(今回はNormalModeSample.cs)への参照になります。NormalModeSample.cs内のSampleVariableへはこれでアクセスできます。
この中で18行目にforループがありますが、ここで追加した各クリップでの処理を行います。
inputWeightはクリップ外では0、クリップ内では1ですが、Easingを設定している場合は徐々に0~1で値が変化します。
inputは、Exposed ReferencesやBehaviour Variablesで指定した変数(今回はOtherGameObjectTransform, Multiply)を参照するために使います。
これら、inputWeightとinputを使って必要な計算を行い、trackBindingで参照できるTrackBinding Typeへ値を与えます。その処理は、24行目の"// Use the above variables to process each frame of this playable."以下に追加します。今回は、以下の行を追加します。OtherGameObjectTransformのy座標をMultiply倍する処理にinputWeightを追加しただけの処理です。
trackBinding.SampleVariable = input.OtherGameObjectTransform.position.y * input.Multiply * inputWeight;
追加したら、保存してください。
Timelineで使う
Main CameraにTimelineを追加し、TimelineにNormal Mode Sample Playable Trackを追加します。このTrackの任意の場所にClipを追加しましょう。以下の通りになるはずです。
追加したClipには、Exposed ReferenceやBehaviour Variablesで指定した変数への設定ができます。今回は、以下の通りMultiplyを5とし、OtherGameObjectTransformとしてDirectionl Light(y座標 = 3)を与えます。また、Ease In Durationを1にしておきます。
この設定で実行すると、以下の通り、クリップ内でNormalModeSample.csのSampleVariableの値が0から15に上昇します。15というのは、OtherGameObjectTransformとして指定したDirectionl Lightのy座標が3、Multiplyの値が5で、それらの積をSample Variableに保存しているからです。
Clip内を実行中にDirectionl Lightのy座標を変えれば、それによってSample Variableの値も変わります。
このように、自分以外のオブジェクトを参照しながらTimelineを実行するには、Normal Modeを使うのが良いです。