雑メモです。
噂のTimelineをUnity2017.1のベータ4で触ってみたんですが、なんかどんどん仕様が変わってるようで、ダウンロードしたサンプルコードが動かなかったり、ネット上に正しい情報も見つからないので、雑な作業メモを残しておきます。(が、もう2017.1b5が出ていたので、すでに仕様が変わっているかもしれない。)
以下、色々やってみて動いたタイムライン上からscriptを動かすやり方。
- TimeLineアセットを作成。
- PlayableDirectorコンポーネントを、適当なゲームオブジェクトに適用。TimeLineアセットを紐づける。
- PlayableBehaviourを継承したHogePlayableBehaviourを作ってタイムラインからのイベントを処理するコードを書く。
- PlayableAssetを継承したHogePlayableAssetを作る。インスペクタで設定したいパラメータがあればExposedReferenceで宣言する。HogePlayableBehaviourをインスタンス化する。パラメータを受けわたすコードを書く。ScriptPlayableを作成して返す。
- TimeLineにPlayableTrackを追加。
- PlayableTrackにHogePlayableBehaviourを配置する。HogePlayableBehaviourのインスペクタでのパラメータがあれば設定する。
HogePlayableAsset.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
[System.Serializable]
public class HogePlayableAsset : PlayableAsset
{
public ExposedReference<UnityEngine.UI.Text> textField; // テキストフィールドを受け渡してみる
public override Playable CreatePlayable(PlayableGraph graph, GameObject go)
{
var b = new HogePlayableBehaviour();
b.textField = textField.Resolve(graph.GetResolver());
return ScriptPlayable<HogePlayableBehaviour>.Create(graph, b);
}
}
HogePlayableBehaviour.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Playables;
public class HogePlayableBehaviour : PlayableBehaviour
{
public UnityEngine.UI.Text textField;
public HogePlayableBehaviour()
{
}
public override void OnGraphStart(Playable playable) {
}
public override void OnGraphStop(Playable playable) {
}
public override void OnBehaviourPlay(Playable playable, FrameData info) {
}
public override void OnBehaviourPause(Playable playable, FrameData info) {
}
public override void PrepareFrame(Playable playable, FrameData info) {
if(textField) textField.text = "deltaTime : " + info.deltaTime;
}
}
タイムライン自体は良い感じのですが、どうも使うまでの手順が面倒ですねえ。元Flasherからすると、シーンに置いたオブジェクトが自動でタイムラインに乗っちゃう勢いでも構わないんですが。(そう言うエディタ拡張を作れと言う話?)