Unityのスカイボックスや環境光をスクリプトで変える

投稿者: | 2019-12-08

ゲーム中に空の画像や太陽光を変えてみます。

if (Input.GetKeyDown(KeyCode.Alpha1))
{
    RenderSettings.ambientIntensity = 0.77f; // 空の明るさを設定
    RenderSettings.skybox = skyboxes[0]; // 空の画像
    directionalLightObject.transform.rotation = Quaternion.Euler(34.1f, -289f, 30.5f); // 日差しの角度
    directionalLight.color = new Color(241f / 255f, 143f / 255f, 96f / 255f, 1.0f); // 日差しの色
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
    RenderSettings.ambientIntensity = 1f; // 空の明るさを設定
    RenderSettings.skybox = skyboxes[1]; // 空の画像
    directionalLightObject.transform.rotation = Quaternion.Euler(70f, -289f, 30.5f); // 日差しの角度
    directionalLight.color = new Color(1f, 244f / 255f, 241f / 255f, 1.0f); // 日差しの色
}

スカイボックスのマテリアルや環境光の強さは、Window -> Rendering -> Lighting Settings から変えられますが、RenderSettings.ambientIntensity やRenderSettings.skybox に値を入れることでスクリプトから簡単に変えられます。

リアルタイムのライトだと簡単ですね。

でも、Baked Global Illuminationを使いたいときは、静的なライトの光や影がライトプローブやライトマップに事前に焼き付けられるので、同じように見た目を変えることはできません。
特にブラウザ向けにビルドする場合など、Realtime GIが使えないときはBaked Global Illuminationを使いたいですね。

Baked Global Illuminationをオンにしてみます。

すると、Lightmappingの設定が有効になります。

WebGLではDirectional ModeのDirectionalも使えないので、Non-Directionalにします。

環境光もリアルタイムでなく、Bakedモードに変更してみます。

また、太陽光を表現しているDirectional Lightも Bakedモードにします。

Lighting SettingsのGenerate Lightingを押してライトを焼き付けます。

Assetsフォルダの中の Scenes フォルダにシーン名と同じ名前のフォルダがあり、そこにライトマップが作られます。

これで同じようにライトの設定を変えてみます。

スカイボックスや太陽光の設定が変わっても、岩などのオブジェクトはまだ暗いオレンジのライトを受けているような見た目のままです。
これを解決するには、スクリプトからライトマップやライトプローブを差し替える必要があります。

コメントを残す

メールアドレスが公開されることはありません。