Unityに関連する記事です

 ゲーム内の環境設定のうち、Skybox と Fog について設定を行います。
 以下の内容で順番に実装を進めていきます。


<Skyybox Fog 設定なし(Default)>






<Skyybox Fog 設定あり>






手順11 ーSkybox と Fog の設定ー

 新しい学習内容は、以下の通りです。

 ・Skybox
 ・Fog
 ・RenderSettings.skybox 変数



1.Skybox と Fog について


 Unity ではゲーム内の環境設定として Skybox という遠景に見える空の背景画像と、霧やもやを表現する Fog の設定が行えます。


参考サイト
Unity 公式マニュアル

https://docs.unity3d.com/ja/current/Manual/sky.htm...
Unity 公式マニュアル(現在は 2019.4 で更新停止中)
Deferred Fog
https://docs.unity3d.com/ja/2019.4/Manual/PostProc...



 どちらも設定場所は Lighting というウインドウにあります。

Lighting ウインドウは、左上のメニューの中から、Window => Rendering => Lighting を選択することで開きます。


Lighting ウインドウ



 Lighting ウインドウ内の Environment タブを押すと、Skybox と Fog の設定を行う内容に切り替わります。


Lighting ウインドウ Environment タブ



 Environment 項目内の Skybox Material という部分が Skybox の設定項目になります。Material という名前の通り、Skybox の設定にはマテリアルを使用します

 初期値は Default skybox というマテリアルが指定されています。
この部分を設定することで Skybox を変更できます。自由なものに設定してみてください。空の背景が変更になります。

 この手順では、この Skybox の設定をスクリプトから操作し、スクリプト内に事前に登録してあるマテリアルに変更する制御を行います。



 Other Settings 項目内にある Fog のチェックを入れることで Fog が有効になります。Skybox との境界線の色と合わせることでキレイなもやを表現できます
設定項目を操作して、どのように Fog が適用されるのかを確認してみてください。


2.設計


 Skybox は無料のアセットを利用してインポートすることが出来ますので、
まずは最初に、Skybox を Unity にインポートして、色々な Skybox に変更出来るようにします。

 その後、Skybox を変更するための SkyboxChanger スクリプトを作成し、その中に Skybox に利用したいマテリアルを登録します。
そして、 Skybox を変更するメソッドを用意します。このメソッドを外部のスクリプトから呼び出すことにより、
登録したマテリアルを Skybox に適用して変更を行います。

 SkyboxChanger スクリプトの Skybox を変更するメソッドを呼び出すのは、ゲームの管理を行っている GameManager スクリプトに行わせます。

 新しく Awake メソッドを用意し、その中で Skybox の変更を行うメソッドを呼び出して変更を行います。
Awake メソッドは Start メソッドよりも処理を行うのが早いメソッドとして定義されていますので、
ゲームを実行すると他の処理よりも早く、Skybox の変更が行われることになります。


3.Skybox のアセットをインポートする


 ここでは2種類の無料アセットを紹介します。
アセットストアを検索していただくと他にも無料の Skybox はありますので、他のアセットを利用していただいても構いません。

 1.SkySphere Volume 1
 2.Fantasy Skybox FREE



 アセットストアへ移動して、上記のアセットの名前で検索をしてください。対象のアセットが見つかります。


SkySphere Volume 1



 このアセットをクリックするとアセットの詳細が画面に表示されますので、 画面の右側にある Add to My Assets という青いボタンを押します。





 Unityのアカウントでのサインインを求められますので、自分のアカウントを利用してストアへサインインしてください。
 
 再度ページが読み込まれて、先ほどのボタンのメッセージが変わり、 Open in Unity となりますので、またこの青いボタンを押します。
あるいは、画面の上部にウインドウが表示されて、その中に Open in Unity のボタンがありますので押します。

 自動的にUnityのエディター画面に遷移します。サイトはまた後で他のアセットのダウンロードに利用するので、そのままにしておいてください。



 エディターのPackageManagerビューが開いて、対象のアセットが表示されますので、右下にある Download ボタンを押します。

PackageManagerビュー Download



 Download が終了すると左隣にある Import というボタンが押せるようになりますので、そちらを押します。

PackageManagerビュー◆Import


 
 インポートするアセットの一覧がポップアップウインドウとして表示されますので、そのまま右下にある Import ボタンを押します。


Import確認のポップアップ



 待機するようにプログレス表示が出て、しばらくするとアセットのインポートが終了します。


 Project内を確認しましょう。AlignedGames という新しいフォルダが追加されていれば無事にインポートされています。
フォルダを順番に開いていくと、SkySphere_V1 フォルダがあり、その中にたくさんのフォルダとファイルが追加されています。


SkySphere_V1



 これで1つ目のアセットのインポートは完了です。



 2つ目のアセットも同じ手順でダウンロードし、インポートを行ってください。


Fantasy Skybox FREE



 インポート後のフォルダは以下の通りです。


Fantasy Skybox FREE



 以上でアセットのインポートは完了です。

 先ほどの Lighting ウインドウを開いて、インポートした Skybox 用のマテリアルを設定してみましょう。

 色々なマテリアルを試しておいてください。次の手順で Skybox のマテリアルを変更するスクリプトを作成しますが
そこに、変更したいマテリアルを数個登録することになります。

 設定した Skybox はそのままでもよいですし、Default skybox に戻していただいても構いません。


4.SkyboxChanger スクリプトを作成する


 新しい SkyboxChanger スクリプトを作成します。

 このスクリプトではメソッドを用意し、そのメソッドを実行することにより、Lighting ウインドウの Skybox Material の項目を、スクリプトから変更して制御を行います。

 Skybox Material にはマテリアルを指定するため、Material 型の配列変数を用意し、事前に登録をしておき、この値を利用して変更するマテリアルを指定します。
SerializeField属性で宣言しておくことで、インスペクターから好きな数のマテリアルを登録できるように設計しておきます。


SkyboxChanger.cs

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



5.<RenderSettings.skybox 変数>


 Skybox はマテリアルによって設定されているため、適用するためのマテリアルを用意して RenderSettings.skybox 変数を利用することで、
スクリプトから動的に Skybox の変更が可能になっています。

  // Skybox を指定された要素番号のマテリアルの Skybox に変更
  RenderSettings.skybox = skyboxMaterials[skyboxMaterialsIndex];


参考サイト
Unity公式スクリプトリファレンス
RenderSettings.skybox
https://docs.unity3d.com/ja/2018.4/ScriptReference...


6.SkyboxChanger ゲームオブジェクトを作成して、SkyboxChanger スクリプトをアタッチし、設定を行う


 ヒエラルキーの何もない場所で右クリックをしてメニューを開き、Create Empty を選択します。
新しい空のゲームオブジェクトが作成されますので、名前を SkyboxChanger に変更します。


ヒエラルキー画像



 作成してある SkyboxChanger スクリプトをドラッグアンドドロップして、SkyboxChanger ゲームオブジェクトにアタッチします。


SkyboxChanger ゲームオブジェクト インスペクター画像




 SkyboxChanger スクリプトの skyboxMaterials 変数の Size を 0 から好きな数に変更します。
この値の分だけ、Skybox 用のマテリアルの登録が出来ます。ここでは 4 に設定しています。

 Size を変更すると、配列の要素を登録するための Element が追加されます。
要素番号は 0 から始まります。


Size 4 に変更 Element が表示される



 各 Element にインポートした Skybox のアセットに含まれているマテリアルを自由に設定してください。


フォルダ


フォルダ



登録例 SkyboxChanger ゲームオブジェクト インスペクター画像



 以上で Skybox 変更用の設定は完成です。


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


 すべての手順が完成しましたので、ゲームを実行してください。
Skybox の設定が、SkyboxChanger スクリプトで指定している要素番号のマテリアルに変更されれば成功です。

 要素番号は Element の番号と対応していますので、0 〜 3 までの値を順番に入れて、
その番号のマテリアルになるかどうかを確認してください。



 続いて、SkyboxChanger ゲームオブジェクトの SkyboxChanger スクリプトを確認し、skyboxMaterilasIndex 変数の値を 999 に変更します
この値が 999 に設定された場合には、スクリプトの制御により、Skybox の設定がゲーム実行のたびに、skyboxMaterilas 変数に登録されている範囲内でランダムに変更されます。
今回の場合であれば、4種類のマテリアルのうちの1つに変更されます。何回かゲームを実行して確認してください。


SkyboxChanger ゲームオブジェクト インスペクター画像



<実行動画 ゲーム実行に合わせて Skybox を切り替える>
動画ファイルへのリンク


 なお、ゲーム実行のたびに Skybox を変える必要がない場合には、
SkyboxChanger スクリプト内の Start メソッドの処理をコメントアウトしてください。

 どの処理によって変更する機能が実行されているのかを把握しておけば、自分で自由にデバッグが行えるようになります。



 以上でこの手順は終了です。

 => 次は 手順12 ーポストプロセッシングの実装ー です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます