WebGL での AudioMixer のエフェクト
WebGL 書き出しだと音の再生が Web Audio API で使えるものに限定されるので、AudioSource の一部の機能のみ使える。
AudioMixer の Volume は制御できたけどエフェクトなんかは使えない。
WebGL 書き出しだと音の再生が Web Audio API で使えるものに限定されるので、AudioSource の一部の機能のみ使える。
AudioMixer の Volume は制御できたけどエフェクトなんかは使えない。
エディタ拡張を作ってボタン一つで、シーンにあるコンポーネントのパラメータを変更できるようにしてみた。でもやってみると変更はされるものの再生すると前の値に戻ってしまう…
調べたところEditorUtility.SetDirty()として、そのオブジェクトに変更があったという印をつけてあげる必要があった。
よく、Vector2 や Vector3 にまだ値が入れていない時に、negativeInfinity を入れていた。しかし比較してみると
Vector2.negativeInfinity == Vector2.negativeInfinity // false float.NegativeInfinity == float.NegativeInfinity // true
こんな感じになった。float なら true だけど、Vector2/3 だと false になる。調べてみると比較する段階で計算が発生し、NaN < 9.999999E-11 // false という計算になるよう。
Animation ウィンドウにて録画ボタンを押して子オブジェクトに対してアニメーション付しているときに、子オブジェクトにも Animator が付いていると Animation ウィンドウがそっちのアニメーションに切り替わってしまうのでそうしよかと思ったけど、Lock ボタンがあったので解決。
いままで Activation Track でパーティクルの表示を切り替えてたんですが、これだと Timeline で確認ができない。でもじつは Control Track を使うと確認ができるということを知った。Control Track の設定で、Random Seed というのもあるので、これを変えればランダムなが固定される。
こうなる。
カスタム Marker のところで Timeline を止めて、再度再生するときに再びその Signal が呼ばれてしまったので、MarkerではなくSignalEmitterを継承したマーカーを作ると、Emit Once という設定項目が出てきて1度だけ発行してくれるようになった。
ちょっとわかりづらいアニ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 がたくさんあるお仕事をしているので、ロック/アンロックの切り替えが面倒なので簡単な EditorScript 作りました。***/Editor などのフォルダに入れて、Cmd/Ctl + Lでトグルできます。
参考)
コガネブログ | ショートカットキーで Inspector をロックしたりデバッグモードに切り替えたりできるエディタ拡張「LockInspector.cs」紹介
コガネブログ | Alt + Q で Inspector のロック状態を切り替えるエディタ拡張
Timeline を WrapMode:Hold など使って、その Timeline に Activation Track があった場合、Timeline 終了後に別の Timeline を流して、そこに同じオブジェクトの Activation Track があった場合に挙動がおかしくなることがあった。
トラックを選択して出てくるインスペクタ
今回の場合こちらを、Inactive にしてあげたら直った。