前回Terrainを使ってゲーム用のフィールドを作成したので、今回はそこに草や木を生やしてみます。
まずは草をAsset Storeからダウンロードしてきます。
3Dモデル→植物→草木→Yughues Free Bushes
これを草のテクスチャとして指定します。
草のマークをクリックし、Edit Details→Add Grass Textureをクリックする。
Detail Textureの右のマークをクリックしインポートしてきた草のテクスチャを指定します。
検索窓にbushと入れると探しやすいです。
テクスチャの設定が終わったら地面を盛り上げた時と同じように筆のサイズ等を変更し地面に塗ります。
草の幅と高さを最小と最大で設定しNoise Spreadで変化の度合いを指定します。
ブラシサイズ等を調整し地面に塗っていきます。
地面と草のテクスチャの色が近い場合は実際に塗られてるのかどうか分かりづらいです。
塗り終わったら実行ボタンを押して確認してみます。
「masasi」君がfieldから外れた状態から始まるといけないので上のように少し中ほどに移動しておきます。
実行すると上のように草が表示されているのが確認出来ます。
実際のプレイ画面では草が揺れているのも確認出来ると思います。
地面の枠を作ってキャラクターが枠外へ行かないようにしていなかったので、地面の端に行くと「masasi」君はどんどん何もない空間に落ちていきます。
普通であれば枠を盛り上げキャラクターが登れない角度にして到達出来ないエリアとしておかなければいけません。
または透明な通れない壁を作っておくといった方法もあります。
とりあえずこれはサンプルなので無視していきます・・・・。
フィールドに木を生やす
次は木を生やしてみます。
Asset Storeから
3Dモデル→植物→木→Forester Pro Sycamore
をインポートしました。
草の時と同じように草のアイコンのとなりの木を選択し、Edit Tree→Add Treeを選択します。
木のプレハブを選択したら、Treesから生やす木を選択します。すると下にパラメータが表示されます。
Brush Sizeで生やす範囲、Tree Densityで木の密度を調整出来ます。
Brush Sizeを1にすると1本ずつ生やす事が出来ます。
Tree Heightを左右に伸ばせるバーを動かして、高さが違う木のバリエーションを増やせます。
TreeWidthも変更出来ますが、チェックボックスで高さを合わせる事も出来ます。
ある一定の範囲毎に木を生やしたい場合はこれでOKですが、とりあえずTerrain全体に木を生やしたい場合は、
上のようにMass Place Treesをクリックします。
Number Of Treesで何本生やすかの数を指定します。
今回はとりあえず100本生やしてみます。
Keep Existing Treesのチェックを入れておくとすでに生やした木に追加する形で増やせます。
チェックを外すとまっさらな状態に生やす感じになります。
あまり木を生やし過ぎると動作が重くなってしまいます。(特に古い機種のパソコン)
それではUnityの実行ボタンを押して木がちゃんと生えているか確認してみます。
↑のように実行されました。
木はちゃんと生えているんですが、「masasi」君が木をすり抜けていきます・・・・(+_+)
この原因は木にコライダ(当たり判定の機能)が設定されていない為です。
せっかく木を生やしたのに100本も無駄になりました・・・。
というわけで木にコライダを設定します。
木にコライダを設定しキャラクターがすり抜けないようにする
選択していた木を見つけます。今回は「sycamore」なのでProjectタブのAssetsフォルダの検索窓に「sycamore」と入力するとすぐに見つかります。
見つかったらその木を一旦ヒエラルキー上にドラッグ&ドロップし、インスペクタから
Add Component→Physics→Capsule Colider
とします。
調整値を上のようにすると
このようにコライダ(当たり判定範囲)を設定出来ました。
出来上がったらヒエラルキーにある木を今度はProjectウインドウのAssetsフォルダにドラッグ&ドロップします。
それがプレハブ(木を量産する時の元となるオブジェクト)としてAssetsフォルダに保存されます。シーン上に配置した木のインスタンス(元のオブジェクトから作成した量産品)はいらないので削除します。
Assetsフォルダのプレハブを間違って削除しないよう気を付けてください。
上のようにAssetsフォルダにコライダを持つ木のプレハブが出来ました。それではTerrainの「field」を選択し、木のアイコンを選択してください。
Edit Trees→Edit Treeを選択しTree Prefabの所に今作った木のプレハブを指定します。
そうすると先ほど地面に生やした木がコライダを設定した木に変更されます。
生やした木が無駄になりませんでした・・・(^。^)
さっそくUnityの実行ボタンを押して確認してみましょう。
今度は「masasi」君が木にめり込むことはなくなりました!
これでゲームのフィールドに草や木を生やす事が出来るようになりました。
わたしのように古いパソコンですと、草や木を生やしすぎると処理が重くなるので、密林を作るのはやめたほうがいいかもしれません。(リアルタイムシャドウの影響だと思いますが)
当たり判定に他のコライダ形状を使う
Unityのマニュアルでは木にCapsule Colliderを使うとありますが、Box Collider等も使えます。
ただし、木の形状をそのままコライダにしたMesh Colliderを取り付けた木はTerrainの木を生やす機能では今のところ(2019/04/06)使えないみたいですね。
もしMesh Colliderの木を使いたい場合はTerrainの機能を使って気を生やすのではなくヒエラルキー上に直接配置していくといいかもしれません。
Terrainに生やした草が風でなびく為の設定
Terrainで生やした草はTerrainの設定で風になびかせる事が出来ます。
Speedは風のスピード、Sizeは風の波のサイズ、Bendingはしなる角度です。
それぞれ0~1の間の数値を指定します。
木をなびかせるにはWind Zoneというコンポーネントを追加する事で実現出来ます。
を参照してください。
終わりに
だんだんゲームっぽくなってきましたが、主人公「masasi」君のみ存在する世界なので、次回は敵キャラクターを登場させようかと思います。
あとはいらなくなったシーン上に配置しているオブジェクトは整理していかないとなぁ・・・・・ブツブツ