Chrome(Win) で WebGL のりサイズをした際に UI が消える

条件がわからないですが、WebGL 書き出しで Windows の Chrome のみで WebGL 部分をリサイズさせると UI が表示されなくなることがありました。関係あるかわからないけど分かっている条件は

・Universal Render Pipeline
・UniversalRenderPipelineAsset の Anti Aliasing(MSAA) は Disabled
・Canvas は Screen Space – Camera
・指定している Camera の Anti-Aliasing が Fast Approximate Anti-alliasing 以外 で発生

Animator の Write Defaults の設定

Animator でアニメーションの状態を切り替える際に AimationClip でキーを打っていない値に対していステートの Write Defaults にチェックが入っている場合、配置してあるデフォルトの値とみなしてアニメーションのブレンディングが行われるようです。

On の場合

Off の場合

参考) テラシュールブログ |【Unity】知らないと面倒くさい事になるかもしれないAnimatorの「Write Defaults」の動作について

Timeline トラックに埋め込まれた Recorded の消し方

Timeline のトラックで直接アニメーションを録画刷る際にできる Recorded というクリップ。要らなくなったので消したいなと思い、消そうと思ったけど消えない…
しかたなく、Timeline を新たに作り、トラックをコピペすると Recorded クリップも増える。どうも使っていなくてもトラックに紐付いているようなので、そのトラックを作り直したら消えた。

uGUI で特定のオブジェクトの前後にレイヤーを移す

バリアントプレハブとか使ってるとなぜかレイヤーの順番がうまく変わらないことがあるので、無理やり変えてみた。
同じ階層限定。

public class SetLayerOrder : MonoBehaviour
{
    enum Order
    {
        Front,
        Back,
    }

    [SerializeField]
    private Order order;

    [SerializeField]
    private Transform targetObject;

    private void Start()
    {
        int myIndex = this.transform.GetSiblingIndex();
        int targetIndex = this.targetObject.GetSiblingIndex();

        if (myIndex < targetIndex && this.order == Order.Back) --targetIndex;
        else if (myIndex > targetIndex && this.order == Order.Front) ++targetIndex;

        this.transform.SetSiblingIndex(targetIndex);
    }
}

Quad や 5.1ch での3Dサウンドでのステレオ AudioClip の挙動

Quad や 5.1ch など3Dサウンドを Unity で作った際に、どうも挙動がおかしかった。
よく考えると3Dサウンド空間で AudioClip のステレオってなにって感じですね。右も左もなく、AudioSource がいるところが音の発信源なので。
ステレオのクリップっだと AudioListener から一定距離が離れると音が出なくなってしまったりした。
Inspector 上で AudioClip をモノラルに変えるチェックを入れれば解決。

Video Track でのコマ落ち

Default Playables にあるVideo Script Playable Trackで再生するときに、とあるビデオクリップだけコマ落ちした。
調べてみると音声が入っているとコマ落ちする。今回は音声は要らなかったので、ビデオから音声を取り除くか以下のように Audio Output Mode を None にしてあげることでコマ落ちしなくなった。

単純に Video Player で再生する分には問題なさそうなんだけど、なんでだろ。

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 は制御できたけどエフェクトなんかは使えない。