私の Unity アプリは、シーンの Skybox Material Exposure プロパティを経時的に (オーディオに基づいて) アニメーション化します。私のプロジェクト ファイルの Material アセットは Exposure=1 (初期値) です。これはうまくいきます。
Unity 内でアプリを再生すると:
- プレイする前に、プロジェクトでマテリアルを選択します (何が起こっているかを確認するため)。
- Unityでアプリを再生し、
- アプリが起動するとすぐに、マテリアルの露出が非常に低い値に設定されます (予想どおり)。
- Skybox Exposure は期待どおりにアニメーション化されます (つまり、Skybox が音楽に合わせて変化します)。
- (インスペクターの)露出値は、開始時の最初の変更後(#3)、プレイ中に変更されません(奇妙に思えます)、
- 再生モードを終了すると、(インスペクターの) 露出は再生中の最後の値に設定されます (実行中はインスペクターに表示されません)。
==>終了後、マテリアルがプレイ前の値に戻ることを期待していました。
重要: 球体の半径を指定して同じ実験を行い (スクリプトは作成しません)、再生中に手動で球体の半径を変更すると、再生モードを終了すると (予想どおり) 元の再生前の値にリセットされます。
明らかに、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);
}
}