トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

Timelineがっつり使った

Timelineを久しぶりに使う。

過去にも2回ぐらい使ってた。記憶になかった

bibinbaleo.hatenablog.com

bibinbaleo.hatenablog.com

アニメーションClip切り替え

Timelineを使いたいと思ったきっかけが、Animatorでモーションをどんどん切り替えていっていたけど、子のモーションは何秒みたいなのを設定するのがくそめんどかった。

スピードや遷移のExitTimeなどをいじってやろうとしたがうまくいかないものもあった。

Timelineではキャラクターをタイムラインに入れてAnimationみたいなのを選ぶ。

そしてAdd From Animation Clipでクリップをダブルクリックで選ぶ

Animatorがついている場合、Timelineのほうが優先されて、Timelineの内容が終わったらAnimatorの内容が途中から再生されてた。

時間とかはそのままにAnimationClipファイル自体を変えることもできた!

テキストを変える

Timelineでキャラクターのアニメーションの遷移によってuGUIのテキストの内容を切り替えたい。

TimelineにuGUIのテキストオブジェクトを追加してみたが、テキスト内容を変えるような選択肢は表示されなかった。

そんなに表示するテキストの種類が多いわけじゃないので、いったんテキストオブジェクトをセリフの個数分作ってActivationを切り替えるようにした

blog.sherpatimes.biz

DefaultPlayerbleという公式のアセットを使えばTimelineでテキスト内容を変えれるみたい

assetstore.unity.com

入れたら確かに設定できる項目が増えてる!

でもレガシーのテキストしか使えなかった;;TextMeshProは使えない><

TextSwitcherTrack

BlendShape

当然公式にBlendShapeをいじる機能はない。

カスタムして制作されている方がいた!

zenn.dev

スクリプトを使わせてもらったがエラーが出る

別の方も配布されていた。

maron.fanbox.cc

UniVRMのインポート(バージョンは0.xxxです、1.xxxでは動きません)って書いてたから、バージョン確認したけどまだ1.xxxは出ていない?

github.com

こちらからunitypackageを入れたがこっちもエラーが出て動かな><

github.com

UniVRMが0.XXじゃなくてVRMが0.xxxみたい

VRMのバージョンって何だっけ・・・

fbxをuniVRMでコンバージョンしてVRM化したとき、uniVRMがVRM1.0に対応してたら自然にVRM1.0になるのか?

www.moguravr.com

 

結局アセットなど使わなくても、普通にAnimationClipとしてBlendShapeの値を変更できた。

キャラにつけたTimelineのWindowをロックで固定。

その状態でFaceのメッシュなどBlendShapeがついているメッシュを選んで、AnimationTrackを追加して、あとは録画状態にしながら、Animationウィンドウで値を変更していく。

AnimationウィンドウはTimelineと連動しているので、Animationウィンドウで時間を動かすとTimelineも進んでいくので演出やモーションを確認しながら、表情付けができた

スクリプトと連携

セリフをしゃべっているときはカメラのほうを向くのと口パクをするようにしたい。LookAtコンポーネントを付けているがコンポーネントをオンオフする機能はデフォルトだとなさそう

公式チュートリアルにコンポーネントを制御するってあるけど私の思っている意味じゃなさそう

learn.unity.com

Signal

Signalというものを使えば特定のタイミングで特定のコンポーネントの関数を実行できそう

blog.unity.com

www.ame-name.com

なんでもいいけどオブジェクトをタイムラインにAddSignalTrackとして入れる

するとそのオブジェクトにSignalReceiverがつく。

SignalAssetというのをCreateSignalなどから作る。名前を付けて保存する。

Timelineに発動させたい場所にSignalAssetを配置。

SignalReceiverでなんかいい感じに設定するとSignalがきたとこで設定した関数が呼び出される

 

これを使えば上のほうでできなかったTextMeshProのテキスト内容を変えることもできるじゃん!って思ったけど、消えるタイミング操作できないし、2回目呼び出したはずが適用されなかったりうまくいかない・・・

 

マーカーを自作することもできるらしい

tsubakit1.hateblo.jp

この記事の中でもテキストを変えるマーカーを作っている。このスクリプトのText部分をTextMeshProにしたら使えそう。でも消すタイミングとか調整できなそうだしいいや。

 

あとLookAtコンポーネントもMonobehaviorを継承していないせいかよくわからないがEventのUIからは参照できなかった

しょうがないので自分でオンオフするスクリプトを書いてそれを呼び出すようにした。

    public LookAtIK lookAtIK;
    public void EnableLookAt(bool bl){
    lookAtIK.enabled = bl;

 

これで無事できた!

マーカーをTimelineで複製するとき、複製したい場所にバーを合わせておいて、他の場所のマーカーをCtrl+C,Ctrl+Vしたらバーの場所に複製されて便利

Playable Behaviour

PlayableTrackで専用のスクリプトを作ってなんかいろいろできるみたい

xr-hub.com

Timelineをループ

Timelineをループさせたり、Timelineを任意のタイミングで実行したい。

任意のタイミングで実行するのはTimelineを作る時にできたPlayableDirectorをスクリプトからオンオフしたらよさそう

そしてこの中のWrapModeでLoopが選べた

initialTimeはスタートした時にTimelineのどこから始めるか。

docs.unity3d.com

ちなみにTimelineの右上の歯車から秒数表示にできた。最初フレーム数表示だったのでわかりにくかった。

座標系

とあるオブジェクトの子オブジェクトとして、Timelineを設定したモデルを置いて実行すると、角度が自分の置きたい方向じゃなくなる。

tsubakit1.hateblo.jp

TimelineのAnimationTrackの一番左をクリックすると、何やら設定できる

これでApplySceneOffsetにすると、自分でヒエラルキー上で最初に設定した角度で始まった。

モーションの開始位置変更

他のモーションと組み合わせたとき、Tinelineに入れたmocopiのモーションの開始位置がぴゅーんて遠くに行ってしまう。(アニメーション内で一の変化は欲しいのでRootMotionはオン状態にはしたい)

Timeline内のモーションをクリックしてインスペクタのAnimationPlayableAssetのPositionを変更したらオフセットみたいなのがかかる。微調整して前のもモーションと同じ位置にした

Animationのループ

TimelineのAnimationをクリックしたインスペクタにLoopの設定があった。デフォルトはUseSourceAssetとある

これだと元のAnimationClipの設定でLoop設定してたら、トラックの時間を広げたときにループする。

TimelineのほうでLoopすることもできる。でもこれでループさせると切り替わりがきれいじゃなかった

パーティクルのオンオフ

パーティクルのオンオフはActivationTrackじゃなくてControlTrackを使う必要があった

パーティクルをドラッグでして、SourceGameObjectにパーティクルが入ってることを確認