1

私の Unity アプリは、シーンの Skybox Material Exposure プロパティを経時的に (オーディオに基づいて) アニメーション化します。私のプロジェクト ファイルの Material アセットは Exposure=1 (初期値) です。これはうまくいきます。

Unity 内でアプリを再生すると:

  1. プレイする前に、プロジェクトでマテリアルを選択します (何が起こっているかを確認するため)。
  2. Unityでアプリを再生し、
  3. アプリが起動するとすぐに、マテリアルの露出が非常に低い値に設定されます (予想どおり)。
  4. Skybox Exposure は期待どおりにアニメーション化されます (つまり、Skybox が音楽に合わせて変化します)。
  5. (インスペクターの)露出値は、開始時の最初の変更後(#3)、プレイ中に変更されません(奇妙に思えます)、
  6. 再生モードを終了すると、(インスペクターの) 露出は再生中の最後の値に設定されます (実行中はインスペクターに表示されません)。

==>終了後、マテリアルがプレイ前の値に戻ることを期待していました。

重要: 球体の半径を指定して同じ実験を行い (スクリプトは作成しません)、再生中に手動で球体の半径を変更すると、再生モードを終了すると (予想どおり) 元の再生前の値にリセットされます。

明らかに、Unity の核となる何かが欠けています。見つけたものはすべて読みましたが、まだ紛失しています。(問題は、シーンのスカイボックスのデフォルトの非表示フラグか、または同様のものであるかどうか疑問に思っています。)

フレームごとに skybox.material.exposure を変更するシーン コントローラ スクリプト:

public class AnimateSkyboxFromAudio : BaseAnimateFromAudio {
    protected override void Start() {
         base.Start ();
    }

    protected override void MyUpdate () {
        float rms = GetAttrByName (AudioAnalyzer.RMS);
        RenderSettings.skybox.SetFloat ("_Exposure", rms * 5);
    }
}
4

1 に答える 1