Timelineを久しぶりに使う。
過去にも2回ぐらい使ってた。記憶になかった
- アニメーションClip切り替え
- テキストを変える
- BlendShape
- スクリプトと連携
- Timelineをループ
- 座標系
- モーションの開始位置変更
- Animationのループ
- パーティクルのオンオフ
アニメーションClip切り替え
Timelineを使いたいと思ったきっかけが、Animatorでモーションをどんどん切り替えていっていたけど、子のモーションは何秒みたいなのを設定するのがくそめんどかった。
スピードや遷移のExitTimeなどをいじってやろうとしたがうまくいかないものもあった。
Timelineではキャラクターをタイムラインに入れてAnimationみたいなのを選ぶ。
そしてAdd From Animation Clipでクリップをダブルクリックで選ぶ
Animatorがついている場合、Timelineのほうが優先されて、Timelineの内容が終わったらAnimatorの内容が途中から再生されてた。
時間とかはそのままにAnimationClipファイル自体を変えることもできた!
テキストを変える
Timelineでキャラクターのアニメーションの遷移によってuGUIのテキストの内容を切り替えたい。
TimelineにuGUIのテキストオブジェクトを追加してみたが、テキスト内容を変えるような選択肢は表示されなかった。
そんなに表示するテキストの種類が多いわけじゃないので、いったんテキストオブジェクトをセリフの個数分作ってActivationを切り替えるようにした
DefaultPlayerbleという公式のアセットを使えばTimelineでテキスト内容を変えれるみたい
入れたら確かに設定できる項目が増えてる!
でもレガシーのテキストしか使えなかった;;TextMeshProは使えない><
TextSwitcherTrack
BlendShape
当然公式にBlendShapeをいじる機能はない。
カスタムして制作されている方がいた!
スクリプトを使わせてもらったがエラーが出る
別の方も配布されていた。
UniVRMのインポート(バージョンは0.xxxです、1.xxxでは動きません)って書いてたから、バージョン確認したけどまだ1.xxxは出ていない?
こちらからunitypackageを入れたがこっちもエラーが出て動かな><
UniVRMが0.XXじゃなくてVRMが0.xxxみたい
VRMのバージョンって何だっけ・・・
fbxをuniVRMでコンバージョンしてVRM化したとき、uniVRMがVRM1.0に対応してたら自然にVRM1.0になるのか?
結局アセットなど使わなくても、普通にAnimationClipとしてBlendShapeの値を変更できた。
キャラにつけたTimelineのWindowをロックで固定。
その状態でFaceのメッシュなどBlendShapeがついているメッシュを選んで、AnimationTrackを追加して、あとは録画状態にしながら、Animationウィンドウで値を変更していく。
AnimationウィンドウはTimelineと連動しているので、Animationウィンドウで時間を動かすとTimelineも進んでいくので演出やモーションを確認しながら、表情付けができた
スクリプトと連携
セリフをしゃべっているときはカメラのほうを向くのと口パクをするようにしたい。LookAtコンポーネントを付けているがコンポーネントをオンオフする機能はデフォルトだとなさそう
公式チュートリアルにコンポーネントを制御するってあるけど私の思っている意味じゃなさそう
Signal
Signalというものを使えば特定のタイミングで特定のコンポーネントの関数を実行できそう
なんでもいいけどオブジェクトをタイムラインにAddSignalTrackとして入れる
するとそのオブジェクトにSignalReceiverがつく。
SignalAssetというのをCreateSignalなどから作る。名前を付けて保存する。
Timelineに発動させたい場所にSignalAssetを配置。
SignalReceiverでなんかいい感じに設定するとSignalがきたとこで設定した関数が呼び出される
これを使えば上のほうでできなかったTextMeshProのテキスト内容を変えることもできるじゃん!って思ったけど、消えるタイミング操作できないし、2回目呼び出したはずが適用されなかったりうまくいかない・・・
マーカーを自作することもできるらしい
この記事の中でもテキストを変えるマーカーを作っている。このスクリプトのText部分をTextMeshProにしたら使えそう。でも消すタイミングとか調整できなそうだしいいや。
あとLookAtコンポーネントもMonobehaviorを継承していないせいかよくわからないがEventのUIからは参照できなかった
しょうがないので自分でオンオフするスクリプトを書いてそれを呼び出すようにした。
これで無事できた!
マーカーをTimelineで複製するとき、複製したい場所にバーを合わせておいて、他の場所のマーカーをCtrl+C,Ctrl+Vしたらバーの場所に複製されて便利
Playable Behaviour
PlayableTrackで専用のスクリプトを作ってなんかいろいろできるみたい
Timelineをループ
Timelineをループさせたり、Timelineを任意のタイミングで実行したい。
任意のタイミングで実行するのはTimelineを作る時にできたPlayableDirectorをスクリプトからオンオフしたらよさそう
そしてこの中のWrapModeでLoopが選べた
initialTimeはスタートした時にTimelineのどこから始めるか。
ちなみにTimelineの右上の歯車から秒数表示にできた。最初フレーム数表示だったのでわかりにくかった。
座標系
とあるオブジェクトの子オブジェクトとして、Timelineを設定したモデルを置いて実行すると、角度が自分の置きたい方向じゃなくなる。
TimelineのAnimationTrackの一番左をクリックすると、何やら設定できる
これでApplySceneOffsetにすると、自分でヒエラルキー上で最初に設定した角度で始まった。
モーションの開始位置変更
他のモーションと組み合わせたとき、Tinelineに入れたmocopiのモーションの開始位置がぴゅーんて遠くに行ってしまう。(アニメーション内で一の変化は欲しいのでRootMotionはオン状態にはしたい)
Timeline内のモーションをクリックしてインスペクタのAnimationPlayableAssetのPositionを変更したらオフセットみたいなのがかかる。微調整して前のもモーションと同じ位置にした
Animationのループ
TimelineのAnimationをクリックしたインスペクタにLoopの設定があった。デフォルトはUseSourceAssetとある
これだと元のAnimationClipの設定でLoop設定してたら、トラックの時間を広げたときにループする。
TimelineのほうでLoopすることもできる。でもこれでループさせると切り替わりがきれいじゃなかった
パーティクルのオンオフ
パーティクルのオンオフはActivationTrackじゃなくてControlTrackを使う必要があった
パーティクルをドラッグでして、SourceGameObjectにパーティクルが入ってることを確認