SkyBox の切り替えを専門に行うクラスとして、SkyBoxChanger スクリプトを作成します。
メソッドは3つ用意していますが、今回利用するのは SetSkyBox メソッドのみです。
このメソッドでは、現在のシーンの名称を取得し、SkyBox のマテリアルを登録する用の配列と照合して SkyBox の変更を行っています。
他の2つのメソッドについてですが、ChangeSkyBox メソッドは、引数で受け取った番号の情報をそのまま配列の index 番号として利用する設定になっています。
そのため、指定した番号の SkyBox に設定されることになります。
SetSkyBoxFromGameScene メソッドは引数で受け取る情報がシーン名となっており、SceneName の番号と同期させて利用する場合に利用します。
その場合、シーンの数と同じ数の配列を用意し、シーンの順番と対応した並び順でマテリアルを設定しておきます。
SkyBoxChanger.cs
<= クリックすると開きます
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SkyBoxChanger : MonoBehaviour
{
[SerializeField]
private Material[] skyBoxMaterials;
/// <summary>
/// SkyBox の変更
/// </summary>
public void SetSkyBox() {
RenderSettings.skybox = SceneStateManager.instance.currentSceneName switch {
SceneName.Search => skyBoxMaterials[0],
SceneName.InvasionAndEscape => skyBoxMaterials[1],
_ => skyBoxMaterials[0]
};
}
/// <summary>
/// SkyBox の変更(引数の情報を配列に利用する場合)
/// </summary>
/// <param name="index"></param>
public void ChangeSkyBox(int index) {
RenderSettings.skybox = skyBoxMaterials[index];
}
/// <summary>
/// SkyBox の設定(Scene の名称から配列の index を参照する場合)
/// </summary>
public void SetSkyBoxFromGameScene() {
RenderSettings.skybox = skyBoxMaterials[(int)SceneStateManager.instance.currentSceneName];
}
}