Unityに関連する記事です

ーSkyboxの自動変更処理の実装ー


<Skyybox 設定なし(Default)>



<Skyybox 設定あり>



 ・Skyboxの自動変更処理の実装


<実装動画 ゲームを実行するたびに Skybox がランダムに設定される>
https://gyazo.com/836b133d85f3fd88b3aa6ba7711f1745



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

 ・Skybox
 ・RenderSettings.skybox 変数


1.Skybox について


 Unity では Skybox という遠景に見える空の背景画像を設定できます。

 設定場所は Lighting というウインドウにあります。
Lighting ウインドウは、左上のメニューの中から、Window => Rendering => Lighting を選択することで開きます。


Lighting ウインドウ



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


Lighting ウインドウ Environment タブ



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

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

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


2.設計


 Skybox の設定を変更する場所は分かりました。

 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 0



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


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



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


フォルダ


フォルダ



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



 以上で Skybox 変更用の設定は完成です。
続いて、Skybox を変更するメソッドを呼び出す処理を GameManager スクリプトに追加します。


7.GameManager スクリプトの修正を行い、高度表示用のキャラのアイコンとキャラの位置とを同期させる


 宣言フィールドに SkyboxChanger 型の変数を用意します。SerializeField属性で宣言しておくことで、インスペクターより値の登録が可能になります。
SkyboxChanger スクリプトには Skybox を変更するメソッドが用意してありますので、この変数はその命令を実行させるために必要な情報です。

 新しいメソッドとして Awake メソッドを追加します。
  
 Awake メソッドは Start メソッドよりも早く実行される Unity が扱うメソッドです。
Start メソッドよりも処理が早いため、このメソッドの中で Skybox を変更する命令を実行します。
そうすることによってゲーム開始時には Skybox が設定されている状態になります。

 プログラムの処理の順番は非常に大切です。こういった、どのタイミングでどの処理をすればよいか、ということは
ロジックを組む際に一緒に考えておくことが重要です。


GameManager.cs(自分で作成しているスクリプトがある場合には、そのスクリプトを修正する)

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



 スクリプトの修正が終了したら、GameManager ゲームオブジェクトのインスペクターより、GameManager スクリプトを確認してください。
新しく宣言して追加した変数が表示されていれば問題ありません。


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



8.GameManager ゲームオブジェクトの設定を行う


 ヒエラルキーにある SkyboxChanger ゲームオブジェクトを選択して、skyboxChanger 変数へドラッグアンドドロップしてアサインしてください。
自動的に、SkyboxChanger スクリプトが登録されます。


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



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


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

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


<実行動画 Skybox に指定した要素番号のマテリアルが設定される>
https://gyazo.com/836b133d85f3fd88b3aa6ba7711f1745



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


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



<実行動画 ランダム設定にしてゲームを実行して確認する>
https://gyazo.com/cbbb207976860d57c4b0f8132c9e3222


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

 => 次は 発展5 ー設置型アイテムの実装ー です。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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