Timeline 上での VideoPlayer の再生

Video をタイムラインで再生したいときには Unity が公式に配布している Default Playables にあるVideo Script Playable Trackを使えば再生できる。
シーンに配置した VideoPlayer と、タイムライン上でクリップを作成して、クリップの設定で動画をしていして終わり。
注意点としては、クリップ毎に VideoPlayer が必要
トラックは1つでもいいけど、VideoPlayer はその分必要になる。
なんででしょ…?クロスフェードの関係?

ProjectSettings > Audio > Global Volume

ProjectSettings の Audio には、オーディオのボリュームを調整できる Global Volume がある。一方ランタイムで操作できるボリュームには static 変数の、AudioListener.volume がある。
この両方はどうやら一緒っぽい。
AudioListener.volume が再生する度に Global Volume の値にリセットされているっぽい。
Unity での音が大きい場合ここを下げておくと便利なので、それを Editor 拡張からどうやればいいか調べてみました。

Continue…

WebGL での AudioMixer のエフェクト

WebGL 書き出しだと音の再生が Web Audio API で使えるものに限定されるので、AudioSource の一部の機能のみ使える。
AudioMixer の Volume は制御できたけどエフェクトなんかは使えない。

エディタ拡張からのパラメータ変更

エディタ拡張を作ってボタン一つで、シーンにあるコンポーネントのパラメータを変更できるようにしてみた。でもやってみると変更はされるものの再生すると前の値に戻ってしまう…
調べたところEditorUtility.SetDirty()として、そのオブジェクトに変更があったという印をつけてあげる必要があった。

うら干物書き | EditorUtility.SetDirtyのなく頃に

Vector2.positiveInfinityの比較

よく、Vector2 や Vector3 にまだ値が入れていない時に、negativeInfinity を入れていた。しかし比較してみると

Vector2.negativeInfinity == Vector2.negativeInfinity // false
float.NegativeInfinity == float.NegativeInfinity // true

こんな感じになった。float なら true だけど、Vector2/3 だと false になる。調べてみると比較する段階で計算が発生し、NaN < 9.999999E-11 // false という計算になるよう。

参考) stackoverflow | Why does this evaluate to False?

Animtorを持つ子オブジェクトに対するアニメーション付

Animation ウィンドウにて録画ボタンを押して子オブジェクトに対してアニメーション付しているときに、子オブジェクトにも Animator が付いていると Animation ウィンドウがそっちのアニメーションに切り替わってしまうのでそうしよかと思ったけど、Lock ボタンがあったので解決。

Timeline でパーティクルを再生


いままで Activation Track でパーティクルの表示を切り替えてたんですが、これだと Timeline で確認ができない。でもじつは Control Track を使うと確認ができるということを知った。Control Track の設定で、Random Seed というのもあるので、これを変えればランダムなが固定される。


こうなる。

複数の 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 を再度流す際にバインドを外すっていうのもなんだかメンドウだし…