i-school - VRアクションゲーム SkyBox の変更
 シーン開始時にシーンに応じた SkyBox を設定する機能を追加します。
合わせて、ゲームの途中での SkyBox の変更処理についても追加します。


<実装動画>
動画ファイルへのリンク




設計


 ゲーム世界の雰囲気つくりの一環として SkyBox の設定と、シーンの状況に応じた切り替え機能を実装します。

 SkyBox の設定は Rendering 内の Environment の設定で行いますが、この部分はスクリプトからゲーム中に動的に変更が可能になっています。
その機能を利用し、ゲームシーンの開始時に、シーンの名前から SkyBox を自動的に設定する設計にします。


SkyBoxChanger スクリプトを作成する


 SkyBox の切り替えを専門に行うクラスとして、SkyBoxChanger スクリプトを作成します。
 
 メソッドは3つ用意していますが、今回利用するのは SetSkyBox メソッドのみです。
このメソッドでは、現在のシーンの名称を取得し、SkyBox のマテリアルを登録する用の配列と照合して SkyBox の変更を行っています。

 他の2つのメソッドについてですが、ChangeSkyBox メソッドは、引数で受け取った番号の情報をそのまま配列の index 番号として利用する設定になっています。
そのため、指定した番号の SkyBox に設定されることになります。

 SetSkyBoxFromGameScene メソッドは引数で受け取る情報がシーン名となっており、SceneName の番号と同期させて利用する場合に利用します。
その場合、シーンの数と同じ数の配列を用意し、シーンの順番と対応した並び順でマテリアルを設定しておきます。


SkyBoxChanger.cs

<= クリックすると開きます



SkyBoxChanger ゲームオブジェクトを作成して、スクリプトをアタッチする


 ヒエラルキーにある GameSceneManager ゲームオブジェクトに SkyBoxChanger スクリプトをアタッチします。

 SkyBoxMaterials変数には、設定したい SkyBox 用のマテリアルをドラッグアンドドロップしてアサインしておきます。
Element 0 には探索シーン、Element 1 には侵入・逃走シーン用のマテリアルをドラッグアンドドロップしてアサインしてください。

 Size を 2 以上にして Element 2 以降を作成する場合には、適宜なマテリアルをドラッグアンドドロップしてアサインしてください。
例えば、ゲームのシーンの途中で SkyBox を変更したいようなケースで利用します。


インスペクター画像


 以上でこのゲームオブジェクトは完成です。


GameSceneManager スクリプトを修正する


 UniRX を利用したケースでの修正方法を提示しておきます。

 SkyBoxChanger スクリプトの参照を変数で用意しておき、Start メソッドで SkyBox の変更を行うことにより、
シーンに応じた SkyBox を設定する機能を実装しています。


GameSceneManager.cs

<= クリックすると開きます



GameSceneManager ゲームオブジェクトの設定を行う


 SkyBoxChanger 変数に、GameSceneManager ゲームオブジェクトにアタッチしている SkyBoxChanger スクリプトを
ドラッグアンドドロップしてアサインします。


インスペクター画像


 以上で設定は完了です。


ゲームを実行して動作を確認する


 以上で完成です。SkyBox 用のマテリアルなどをアサイン情報を変更しながら、シーン開始時に SkyBox が変更されるかを確認してください。


<実装動画>
動画ファイルへのリンク



 以上でこの手順は完成です。