複数の Timeline での ActiveTrack

ちょっとわかりづらいアニgifですが…
タイムラインの WrapMode は両方とも Holde で、中身はパーティクルが最初に Active になり終わりの方で Inactive になる。Cube は Active になったり Inactive になったりする。そして片方が終わったらもう片方を流し、終わったらまた最初の Timeline を流す。Cube の方は問題なくアニメーションしているように見えるけど、パーティクルは2つめの Timeline からおかしくなる。
ログを出してみると OnEnable と OnDisable が毎フレーム連続して呼ばれている状態になってしまう。Cube の方はとくに Active/Inactive が交互になってもレンダリング段階で Active になっているので点滅とかはしない。でもパーティクルの方は、Active になるとエミットされるようになっているので、毎フレームエミットしようとしては消えてを繰り返しておかしくなる…
以前の記事みたいにバインドを外せば直るはず。もしくは、WrapMode を None にしてあげても問題ない。けど、Hold にしたいケースは多々あるし、Cube のように問題なさそうに見えても Active/Inactive が切り替わってしまうのもどうなのかという感じ… Timeline を再度流す際にバインドを外すっていうのもなんだかメンドウだし…

Timeline ウィンドウのロック/アンロック

Timeline がたくさんあるお仕事をしているので、ロック/アンロックの切り替えが面倒なので簡単な EditorScript 作りました。***/Editor などのフォルダに入れて、Cmd/Ctl + Lでトグルできます。

参考)
コガネブログ | ショートカットキーで Inspector をロックしたりデバッグモードに切り替えたりできるエディタ拡張「LockInspector.cs」紹介
コガネブログ | Alt + Q で Inspector のロック状態を切り替えるエディタ拡張

Activation Track での挙動がおかしいとき

Timeline を WrapMode:Hold など使って、その Timeline に Activation Track があった場合、Timeline 終了後に別の Timeline を流して、そこに同じオブジェクトの Activation Track があった場合に挙動がおかしくなることがあった。
トラックを選択して出てくるインスペクタ

今回の場合こちらを、Inactive にしてあげたら直った。

Timelineのバインドを解除

タイムラインで WrapMode を Hold にした際に、その後 Animator でアニメーションが制御できなくなってしまう。例えばオープニングアニメーションのあとにスタートボタンだけボタンを押されたときに Animator でボタンのアニメを再生させたいとかそんな場合、ボタンを包む GameObject でコンテナを作って、Timeline ではそっちを制御するなんかの工夫が必要になってくる。

Timeline を流した後、別の Timeline を流す分には問題なくアニメーションが流れるけど、Animator での制御が効かない。

Continue…

Meshの数が増える

vertex shader を触って波のような感じで動かしていたら、頂点がずれる問題に気づいた。通常の Plane なんかでは大丈夫だけど、なぜか隙間ができる。どうも三角形を形成する頂点が隣接するものの頂点と繋がっている訳ではなく、三角形ごとに作られている感じになってる(二倍の頂点がある)。

Continue…

Vector Graphic (SVGの利用)

Package Manager より提供される Vector Graphic にて uGUI でも扱える、SVGImage を試してみました。まったく知識がなかったので、どういった処理をしているのか気になっていた。

Continue…

Shader Graph でのノイズ

Shader Graphで Perlin Noise 的なものを使って、テレビのノイズみたいなものを作りたかった。ノイズを作るのには Gradient Noise を使用。Gradient Noise の方で時間的なパラメータがあってそれを高速に進めればできるのかなと思ったらそうではないっぽい。検索してみると、Rotate ノードを使って高速に回すとそれっぽくなったよ的なものを見つけたのでそれと同じようにやってみた。

Rotate じゃなくて、Combine と Tiling And Offset でもそれっぽくできた。こっちの方が単調かもしれないけど軽い(?)

参考) StackExchange | Game Development | Old tv effect in shader graph

Timeline の wrapMode が Hold の際の Animator での操作

Timeline の WrapMode を Hold にすると最後のフレームの状態でオブジェクトが停止してくれる。それはいいのだけど、その後 Timeline で使ったオブジェクトを Animator で操作しようとしても、状態遷移はされているっぽいけど、AnimationClip に従った動きがされない。とくに最後で使ったクリップで使っているプロパティが入っていると動かなくなる。


(ここでは Rotate が最後なので、Rotate が Animator で動かせない)

ここで、再生後に WrapMode を None に戻すときちんと再生ができる。

None にできる状況ならいいですが、そうでない場合は一工夫必要そうな気がします。

Timeline で同じオブジェクトを動かす分には問題なく動く。

ただ、2つのタイムラインで、Rotate/Scale ともにロックされてしまうので、Animator からは再生がされなくなってしまう。