6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Unityマルチシーン運用時のSkyboxの動的設定

Posted at

Qiita初投稿。

マルチシーン運用時のSkyboxの動的設定

環境はUnity 2017.2.0f3

RenderSettings.skyboxの設定先

skyboxの設定自体はRenderSettingsクラスにあるんで普通にsetすればいいだけ。

Unity - スクリプトリファレンス: RenderSettings

public void SetupSkybox(Material skybox) {
    if (RenderSettings.skybox != skybox) {
        RenderSettings.skybox = skybox;
    }
}

ただこれ、マルチシーン運用しているときに非常に困りました。なんとシーンの指定がない。
これどこのシーンに設定されるのだろうかと思ったら、Activeなシーンのskyboxに設定されるんですね。強制的に。

つまりこれは「non activeなシーン(またはまだload中のシーン)のskyboxを編集してからactiveにしたい」ということが出来ない。

例えばシーンAを開いた状態でシーンBを動的にLoadScene(Additive)したとき、シーンBのhierarchy上にあるobjectのStart()でシーンBのskyboxを動的に設定ようとしても、まだシーンBはloadが完了しておらずactiveになっていないので、その時点でactiveなシーンAのskyboxに設定されてしまうという、非常に面倒くさいことが起きた。

解決策:遅延設定

つまるところ、シーンがActiveになったら設定するようにしておくしかないのかなと。
本当に? っていう感じ……。

private string TargetSceneName = "設定したいシーン名";

// activeになったときに呼ばれるコールバック
private void OnActivedSetupSkybox(
        UnityEngine.SceneManagement.Scene prev,
        UnityEngine.SceneManagement.Scene next) {
    if (next.name == TargetSceneName) {
        // 改めてskyboxを更新
        SetupSkybox();
        // コールバック登録を解除
        UnityEngine.SceneManagement.SceneManager.activeSceneChanged -= OnActivedSetupSkybox;
    }
}

// skyboxの設定処理
public void SetupSkybox(Material skybox) {
    if (UnityEngine.SceneManagement.SceneManager.GetActiveScene().name == TargetSceneName) {
        // 所望のシーンがactiveだったら素直にskyboxを更新する
        if (RenderSettings.skybox != skybox) {
            RenderSettings.skybox = skybox;
        }
    }
    else {
        // 所望のシーンがactiveでなかったら、activeになったときに更新するように
        // コールバックを登録しておく。
        UnityEngine.SceneManagement.SceneManager.activeSceneChanged += OnActivedSetupSkybox;
    }
}

なんでこれ標準でシーン指定できないんだろうなあ。
この事について軽く検索してみたところ、他に記事を見かけなかったということは、こういうマルチシーンでのskybox動的設定はあまり推奨されないということなんですかね……。

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?