前回と前々回でTerrain Toolsと、それをインポートすることによってTerrainに追加された機能について見てきました。
そこで今回はそれらを使ってゲーム用のフィールドを作成してみたいと思います。
Terrain Toolsと追加された機能についてまだ知らない!という方は以下の記事を参照してみてください。
わたくしには芸術の才能が皆無なので、とりあえず作ってみるだけです。(^_^;)
今回作成したゲームフィールドは以下のような感じになりました。
まったく同じ地形は作れないので同じような操作でご自分の思うとおりに作ってみてください。
今回使用しているUnityのバージョンは2021.2.0f1、Terrain Toolsのバージョンは4.0.3を使用しています。
バージョンによっては多少違いが出てきます。
地形を作る
それでは地形を作っていきましょう。
地形のサイズを決定する
あまりに大きい地形を作るのは大変なので正方形に四分割した50m×50mのサイズの地形を作ります。
UnityメニューのWindowsからTerrain→Terrain Toolboxウインドウを開き、Create New Terrainタブを選択してTotal Terrain WidthとTotal Terrain Lengthを50にし、下のCreateボタンを押して作成します。
これで一つのタイルが25m×25mの正方形の地形が出来ました。
キャラクターを配置し、規模を確認する
地形を作ったところで、次は実際に使うキャラクターを配置しキャラクターと地形のサイズのバランス等が合っているかを確認する必要があります。
地形はシーンビューで全体像を見ながら変形させていくので元のサイズがどれほど大きかったかを忘れがちです。
そこで実際にゲームで使用するキャラクターを配置して動かして、作った地形がキャラクターのサイズと合っているかどうかや、地形の凸凹にはまって動けなくなる箇所がないか?等調べる必要があります。
今回はUnityのスタンダードアセットのサードパーソンキャラクターを配置し、動きを確認することにします。
今回は以下のような感じになりました。
ちょっと狭い感じもしますが、とりあえず地形を作るというのが目的なので良しとしましょう。(^^)/
歩く場所や山等の作成
次はインスペクタウインドウを開き、TerrainGroup_0の子要素に出来たTerrainのタイルのどれかひとつを選択して地形にデコボコを付けていきます。
地形にデコボコを付ける為にインスペクタのTerrainのPaint Terrainメニューを選択し、Raise or Lower Terrainを使って盛り上げと盛り下げをしていきます。
上は適当にブラシを選択し、強さやサイズを選択しました。
他のブラシを選択したり設定を変更して試してみてください。
シーンビューでは
Aキーを押しながらマウスの移動で強さの変更。
Sキーを押しながらマウスの移動でサイズの変更。
Dキーを押しながらマウスの移動で回転の変更。
マウスの左クリックで地形の盛り上げ、Ctrlキーを押しながらクリックすると地形を盛り下げます。
が出来ます。
あとは自由に山を作ったり道を作ったりしてみてください(Raise or Lower Terrain以外も使って)。
テクスチャのペイントのテストの為に少し山がある地形を作成してください。
わたくしが作成した地形は以下のような感じになりました。
うーん・・・・微妙な出来ですね。(´Д`)
地形全体にテクスチャを塗る
とりあえず地形にデコボコを付けたので、次は地形全体に草のテクスチャを塗ることにします。
テクスチャはスタンダードアセットに含まれている物やTerrain Toolsのサンプルに含まれている物、またはアセットストアのテクスチャをダウンロード&インポートした物等、お好きな物を使用してください。
ヒエラルキーでTerrainのタイルのどれかを選択し、インスペクタのPaint TerrainメニューからPaint Textureを選択します。
Layer PalletのAdd Layerボタンを押し、塗りたいテクスチャを選択します。
するとヒエラルキーで選択していたTerrainの一つのタイルがこのテクスチャで全体が塗られます。
シーンビューに移動してテクスチャが塗られていない他の3つのタイルを左クリックすると同じテクスチャが全体に塗られます。
塗られない場合は最初に選択したタイルのインスペクタでLayer Palletteの先ほど追加したテクスチャのレイヤーを選択し、改めて他の3つのタイルを左クリックしてください。
以下のように全体が一つのテクスチャで塗られました。
他のタイルとLayer Palletteを共有する
先ほど一つのタイルを選択したあとにLayer Palletteのレイヤーにテクスチャを追加し、他の3つのタイルを選択することで同じレイヤーを他のタイルのLayer Palletteにも追加出来ました。
しかし、4つのタイルのLayer Palletteは別になっているので1つのタイルにレイヤーを追加しても他のタイルには追加したタイルのLayer Palletteのレイヤーを選択した状態で他のタイルをクリックしないとLayer Palletteに追加されません。
個別に追加するのが面倒な場合はTerrain ToolboxウインドウのTerrain Utilitiesタブを選択し、Terrain Layersにレイヤーを追加し、All Terrains in Sceneにチェックを入れる事でシーン内の全てのTerrainにこのLayer Palletteを反映させるようにし、Add To Terrain(s)を押します。
こうすることでシーン内の全てのTerrainのタイルのLayer PalletteにこのLayer Palletteが反映されます。
レイヤーパレットとスプラットマップ
Layer Palletteにレイヤーを追加していくとレイヤーはスプラットマップにそのレイヤーを上塗りしているという感じになります。
試しに元の緑のレイヤーの上に以下のように他のレイヤーを選択して塗ると、
タイルのスプラットマップは以下のように元のレイヤーの上に上塗りされているのがわかります。
このことからもわかるようにLayer Palletteのレイヤーの左のハンドルをドラッグして入れ替えると地形に塗られたテクスチャの塗られ方も変わります。
以下の画像は先ほど塗ったものとは別物ですがレイヤーの順番を入れ替えたのはわかると思います。(^_^;)
Layer Palletteには後から追加するよりも最初に使いたいテクスチャをあらかじめパレットとして用意しておいて、それを全てのTerrainのタイルに反映するのが良さそうですね。
今回地形を塗るのに使用するテクスチャは以下の4つにしました。
山の部分に岩のテクスチャを塗る
レイヤーパレットをTerrainの全てのタイルに適用したので、次は山の部分に岩のテクスチャを設定したレイヤーで塗っていきます。
地形の高さが高い部分だけに岩のテクスチャを塗りたいのでPaint TerrainメニューをPaint TextureにしてBrush MaskにHeightマスクフィルターを追加し、Remap Curveのグラフを変更します。
今回のRemap Curveのグラフは以下のような感じにしました。
新たにキーを追加する場合はグラフの線上で右クリックからAdd Keyを選択することで追加出来、グラフの形状はキーをドラッグして移動したり、キーのハンドルの角度を変える事で出来ます。
シーンビューでどの部分にマスクフィルターの効果があるかを黄色い部分の表示を見て判断し、Remap Curveのグラフを変更し、山の部分(高い部分)に岩のテクスチャを塗っていきます。
岩のレイヤーを選択し、シーンビューの地形をクリックして岩のテクスチャを塗っていきます。
以下のように少し高い部分に岩のテクスチャを塗りました。
通り道のテクスチャを塗る
次は人の通り道や通った後のテクスチャを塗っていきます。
先ほどとは違って人が通る道なのでデコボコがなるべく少な目の所を塗っていきます。
そこでBrush Mask FilterにSlopeマスクフィルターを追加し、一定の角度以下の時だけテクスチャが塗られるようにします。
SlopeのRemap Curveでは以下のような感じのグラフを作成し、斜面の角度がほとんどない場合のみにテクスチャが塗られるようにします。
人の通り道の辺りをマウスクリックまたはドラッグして塗っていきます。
以下のような感じになりました。
細かい部分を塗っていく
ここまでは大雑把にテクスチャを塗ってきましたが、うまく塗られていない部分やテクスチャのブレンドしている部分などに修正を入れていきます。
通り道と山の間に別のテクスチャで塗ったりして以下のような感じになりました。
なんとなく出来ました。(^_^)v
木を生やす
次は木を生やしてみます。
Terrainのタイルを選択し、インスペクタでTerrainコンポーネントのPaint Treesタブを選択し、Edit TreesからAdd Treeで木のプレハブを選択し、生やす木を追加します。
今回は狭いフィールドなので木は一本ずつ生やすのでBrush Sizeは1にして、地形をクリックして一本ずつ木を生やします。
既に配置した木を削除する場合はCtrlキーを押しながら木をクリックします。
Tree Densityは木の密度ですが今回の場合は一本ずつ生やすのであまり意味はありません。
Tree HeightのRandom?にチェックを入れ、木のランダムな高さの範囲を指定します(左右をドラッグして範囲を広げる事が出来る)。
フィールドが大きい時や大雑把に木を生やしたい時はMass Place Treesを使うと便利です。
ここら辺は以下の記事を参照してみてください。
木を何本か追加して以下のようになりました。
草を生やす
木を生やしたので次は草を生やしたいと思います。
Terrainのタイルの一つを選択し、インスペクタのTerrainコンポーネントのPaint Detailsタブを選択し、DetailsのEdit Detailsボタンを押したらAdd Grass Textureを選択します。
草のテクスチャを追加し、Min Heightで最低の高さ、Max Heightで最高の高さを設定し、Billboardのチェックを外して常に草がカメラの方向を向くのを防ぎます。
Brushesの設定を調整しながら草を生やしたい部分をクリックし、草を生やしていきます。
草を生やして以下のようになりました。
木や草を風でなびくようにする
木や草を生やしたので次は風を吹かせてなびくようにします。
草をなびかせる
Terrain ToolboxウインドウのTerrain Settingsタブを選択し、Wind for Grassにチェックを入れ、Speed、Size、Bendingの数値を変更しApply to All Terrain(s) in Sceneボタンを押してシーン内の全てのTerrainのタイルに適用します。
これで草がなびくようになりました。
木をなびかせる
次は木の葉をなびかせます。
ヒエラルキー上で右クリックから3D Object→Wind Zoneを選択します。
インスペクタでWind ZoneのModeをDirectionalにすると全体に風が吹きます。
これで木の葉がなびくようになりました。
終わりに
これで地形を作り、木や草を生やして風でなびくように出来ました。
草があまりきれいに生やせませんでしたが、まぁ機能に助けられてなんとなくゲームフィールドが出来ました。
あまり急激にデコボコを加えるとよくないので、地味に盛り上げと盛り下げをして緩やかな地形を作るのがいいのかもしれません。
あまりにもフィールドが小さいのと、キャラクターが行ってはいけない場所にも行けてしまったり、移動先は空間が丸見えになっているのでそこら辺は修正が必要ですね。(^_^;)
参考サイト
以下の動画はかなり参考になります。(^^)/