前回の記事「Unityゲーム制作研究(1):Third Person Character Controllerを使ってユニティーちゃんを動かす方法」では、無人島にユニティーちゃんを配置してキャラクターをコントロールする方法を考察しました。

無人島といっても、前回の状態のままだとゲームのステージは下図のようにただの荒野という状態です。無人島であるなら、最低でも周囲に海がなければなりませんし、樹木や岩などのオブジェクトがないと殺風景すぎてしまいます。

そこで今回は、ゲームの舞台である無人島に周囲の海(水面)を設定し、島内には、樹木、岩、灯台のような建物等を複数配置して、ゲームの舞台としてふさわしくなるよう拡充してみたいと思います。

この記事を書くにあたり使用した環境と必要となるスキルについて

この記事を書くにあたり、当方が使用した環境、及びこの記事の対象者のスキルを明記しておきたいと思います。

  • OS: macOS Monterey 12.5
  • Unity: 2021.3.5f1 Personal(バージョンが異なる場合、機能や画面の様子が異なる場合があります)
  • 対象者: 前回の記事「Unityゲーム制作研究(1)」を終えた方、もしくは同程度のスキルをお持ちの初心者の方

また、この記事は前回の記事の続きとなりますので、よろしければ「Unityゲーム制作研究(1):Third Person Character Controllerを使ってユニティーちゃんを動かす方法」もご覧ください。


© Unity Technologies Japan/UCL
※「ユニティーちゃん」はUnity-Chan License (UCL)の下に配布されており、当サイトでもこのライセンス条項に基づき使用させていただいております。

スポンサーリンク




目次

  1. 必要なFreeのアセットをUnity Asset Storeで入手
    1. Water Shaders V2.x
    2. Rock package
    3. Asset Storeでアセットを選ぶ際の注意点
  2. 周囲の海(水面)の配置と設定
  3. 椰子の木と灯台の設置
  4. 岩の配置
  5. メッシュコライダーの設定
    1. LOD Groupとは何か?
  6. GameViewでPlayしてみよう!
    1. ゲームコントローラーで操作したい場合
    2. ゲームコントローラーのキー操作について
  7. まとめ

1. 必要なFreeのアセットをUnity Asset Storeで入手

まずは今回使用するアセットを「Unity Asset Store」で入手してみましょう。すべてFreeのものを選んだので、気軽に入手してもらえるかと思います。

1-1. Water Shaders V2.x

https://assetstore.unity.com/packages/vfx/shaders/water-shaders-v2-x-149916

この記事では、このアセットに含まれる「水面」以外にも「Rock package」「Palms(椰子の木)」「Lighthouse(灯台)」のPrefabもシーンに取り込んで使用します。

1-2. Rock package

https://assetstore.unity.com/packages/3d/props/exterior/rock-package-118182

このアセットには「LOD Group」が設定された6種類のリアルな岩が含まれています。なお「LOD Group」については後述します。

1-3. Asset Storeでアセットを選ぶ際の注意点

Unity Asset Store」には実に数多くのアセットが販売されており、高品質にも関わらず無償で利用できる「Free」のものも少なくありません。もちろん、この記事で紹介しているアセット以外のものも使うことができますが、アセットを選ぶ際の注意すべき点を一つ挙げておきたいと思います。

それは、対応している「レンダーパイプライン」の種類を確認する必要があるという点です。この点を知らないと、購入後Sceneに配置した時にPrefabがピンク色になってしまって「ありゃりゃ、なんで???」となってしまいます。…自分も最初そうなりました(笑)

この「レンダーパイプライン」とは、簡単にいえばUnityのグラフィック描画方式のことで、大きく分けると「Built-in」「HDRP(High Definition Render Pipeline)」「URP(Universal Render Pipeline)」の3種類があります。

Unity2021では空のプロジェクトから作成した場合、最初の「Built-in(ビルトイン)」という方式になりますので、その他のものはそのままでは使用できないと考えてください。それで、今回使用するアセットはすべて「Built-in」に対応したアセットを選んでいます。

その他の「HDRP」はPCゲーム向けの高精細レンダリングのため、「URP」ではモバイル端末向けに最適化されたレンダリングを実現するために用意されたものです。これらは「Built-in」に対して、ひとまとめに「SRP(Scriptable Render Pipeline)」と表記される場合もあります。

さらに詳しい説明は他のサイトに譲りたいと思いますので、興味があればググってみてください!

2. 周囲の海(水面)の配置と設定

では、最初に無人島周囲の海(水面)を整えていきましょう。メニューバーの「Window > Package Manager」を開いて、タブのすぐ下の「」の横をクリックし「My Assets」を選択してください。

購入済みのAssetの一覧から先ほど紹介した「Water Shaders V2.x」をダウンロードしてインポートします。

Projectにインポートしたら、早速HierarchyにPrefabをドラッグ&ドロップしてみましょう。このFreeアセットでは種類の異なる4つの水面を提供していますが、今回は「NVJOB Water Shaders V2 > Examples Water > Prefabs」内にある「Water Surface Mirror」を使用してみたいと思います。この水面はキラキラしていて南国の海にぴったりです。

ここではHierarchyに「Sea」を「Create Empty」しておき、そこにドラッグすることにしたいと思います。

ドラッグしたらPositionScaleを調整します。前回の記事で紹介した無人島に合わせるため以下のように数値入力してみてください。

Position : X : -929.8555 , Y : -6.904938 , Z : -44.62378
Scale : X : 250 , Y : 1 , Z : 250

PositionScaleを調整するとこのようになります。お〜、海が現れましたね!

このままでもいいのですが、個人的には海の色がちょっとイメージと異なりました。それでもっと南国の無人島にふさわしくエメラルドグリーンにしてみたいと思います。他にもやり方はあると思いますが、ここでは、3Dオブジェクトの平面を作成して、半透明のエメラルドグリーンを設定してみたいと思います。

まずマテリアルを作成しましょう。Projectに空のフォルダを作成して「Materials」と名付けます。そして、その中に新規「Material」を作成します。名前ですが、ここでは「Sea Color Material」としてみます。

Inspectorの「Rendering Mode」を「Fade」に設定した上で、色を設定します。色はお好みで良いかと思いますが、自分の場合は下記のようにしてみました。

ちなみに、半透明にしないと五色沼のようになってしまい、海としては不自然になってしまうので「A(透過)」も設定しましょう。

今度はHierarchyに「3D Object > Plane」を作成して「Water Surface Color」とします。そして、先ほど作成したマテリアル「Sea Color Material」をそこにドラッグしてみてください。マテリアルが平面に適用されるはずです。

この平面を海面と同一に設定するため「Water Surface Color」のPositionScaleを下記のように設定します。

Position : X : -929.8555 , Y : -6.904938 , Z : -44.62378
Scale : X : 250 , Y : 1 , Z : 250

加えて「Mesh Collider」のチェックは外しておくか、三点リーダーのメニューから「Delete Component」しておきましょう。これを外しておかないとユニティーちゃんが水面を歩いてしまいます。その理由は後述します。

どうでしょうか?海の色がエメラルドグリーンになりました!これで南国の海のようになりました。

3. 椰子の木と灯台の設置

海面を配置できたら、今度は椰子の木を植えて、灯台も設置してみたいと思います。

今回入手した「Water Shaders V2.x」には「Palms(椰子の木)」「Lighthouse(灯台)」も含まれていますので、それらを活用してみたいと思います。まずProjectに「Prefabs」というフォルダを予め作成しておきましょう。

今度は、椰子の木と灯台のパーツを取得するため一旦シーンを切り替えます。「NVJOB Water Shaders V2 > Example Scenes > Scenes > Example 0」を開いてください。さらにHierarchyの「Island > Palm Trees」をダブルクリックしてもらうと下図のように表示されますので、その中の「Palm 1」〜「Palm 4」を先ほど作成した「Prefabs」というフォルダにドラッグしておきます。同様に「Lighthouse」もドラッグしておきます。

今度は元のシーンに切り替えて、先ほどの「Palm 1」〜「Palm 4」および「Lighthouse」をHierarchyにドラッグします。その場合、Positionをユニティーちゃんの近くに配置するようにしてください。Sceneに直接ドラッグすることもできます。

海辺の適当な位置に配置できたでしょうか?なんだか南国の無人島のイメージに近づいてきましたね!

4. 岩の配置

今度は岩を配置しておきたいと思います。やり方は基本的に椰子の木や灯台と一緒です。予めインポートしておいたアセットをSceneに直接ドラッグしてみてください。岩はProjectの「Rock Package > Prefabs」の中に入っています。

お好みの位置、サイズ、角度を考慮して配置してみてください。

配置が完了したら、今回シーンに取り込んだ椰子の木、灯台、岩はすべて、Unpackしておきましょう。

ここまでお疲れ様でした!それでは、ユニティーちゃんを動かして確認してみましょう!画面上部中央の「▶︎」をクリックしてみてください。

5. メッシュコライダーの設定

あれあれ?ユニティーちゃんが岩をすり抜けてしまいます!大切なことを忘れていました。コライダーの設定をしていなかったため、今回配置したオブジェクトが物体として認識されていません!

椰子の木、灯台、岩を物体として認識させるにはコライダーの設定が必要ですが、これらはプリミティブな形状ではなく複雑な形状をしているため「Mesh Collider」を使います。

まずは手始めに岩から設定してみましょう。一つの岩を選択して「*_LOD0」を選択します。そのメッシュを選択した状態でInspectorの最下部「Add Component > Physics > Mesh Collider」を適用します。そうするとキャラクターがすり抜けなくなります。

どうでしょうか?これで岩が物体として認識されたので、すり抜けなくなりました!

同様のやり方で他の岩の「*_LOD0」に「Mesh Collider」を適用してください。また、全ての椰子の木、灯台のメッシュにも適用してみてください。

5-1. LOD Groupとは何か?

Mesh Collider」を適用していて気づかれたと思いますが、岩だけ「*_LOD0」「*_LOD1」「*_LOD2」のようにメッシュがネスト構造(入れ子)になっていました。なぜこのようになっているのでしょうか?これは「Rock package」の作者さんが「LOD Group」の設定をしていてくれたからです。

LOD Group」とはゲームの負荷を軽減するために、カメラが捉える大きさによって、レンダリングされるメッシュを変更すための仕組みです。

カメラの中に大きく描画されている時、つまり近景の時はリアルなメッシュを使用し、カメラの中で小さく描画されている時、つまり遠景にある時は、よりシンプルなメッシュでレンダリングするよう自動で切り替えてくれる便利な機能なのです。

Unity Asset Store」で提供される全てのアセットに設定されているわけではありませんが、今回入手した「Rock package」にはそれが設定されていたというわけです。今回使用している岩では、近景で使用されるメッシュが「*_LOD0」であるため、このメッシュのみに「Mesh Collider」が設定されていればOKです。

6. GameViewでPlayしてみよう!

さて、様々なオブジェクトを配置し、より無人島らしくなったゲームのステージで思い切りユニティーちゃんを動かしてみましょう!

6-1. ゲームコントローラーで操作したい場合

キーボードでも操作できますが、「Starter Assets – Third Person Character Controller」は、市販のゲームコントローラーにも対応しています。以下の製品で問題なく動作することを確認できました。

※上記のリンクはamazonへのリンクとなっています。

6-2. ゲームコントローラーのキー操作について

左スティック:ユニティーちゃんの操作
右スティック:カメラの操作
L2ボタン:左スティックと併用で走る動作
Aボタン:ジャンプ動作

7. まとめ

今回は、前回の記事の続きとして、無人島内に様々なオブジェクトを配置して、より無人島らしくデコレーションしてみました。同時に「レンダーパイプライン」の種類に関する知識、「Mesh Collider」の設定方法、「LOD Group」についても概要を理解することができました。

これらの知識があれば「Unity Asset Store」からさらに沢山のアセットを入手して、さらに賑やかなゲームステージにブラッシュアップすることができると思います。是非、ゲームステージ作りを楽しんでみてください。

次回はさらにゲームを作り込んでいきたいと思っています!

この記事の続き:


© Unity Technologies Japan/UCL
※「ユニティーちゃん」はUnity-Chan License (UCL)の下に配布されており、当サイトでもこのライセンス条項に基づき使用させていただいております。