Terrain
Unityは強力な地形作成機能が備わっている。今回はそれを使ってみよう。
[作成手順]
準備
1.新規にプロジェクトを作成したら、インポートパッケージよりEnvironmentを選択。以下のようにEnvironmentのみにチェックを入れインポートする。
2. ヒエラルキーのクリエイト->3DオブジェクトよりTerraiを作成する。
大地の作成
まずは感覚をつかもう。
左端のRaise/Lowerを押して、ペン先や、ブラシサイズ、鋭さ(Opacity)を変更しながら雰囲気をつかもう。マウスドラッグで盛り上がりShiftを押しながらドラッグで押し下げることができる。まずは細かいことを気にせずに色々ためそう。
3.PaintHeightモードにして下にあるFlattenボタンを押そう。これで全体が高さ0で初期化される。
4.PaintHeightモードで大まかな地形を作る。PaintHeightモードに値を入れて操作を行うとその高さに近づけてくれる。
今は50をいれてペイントしたので高さ50の丘が出来ている。
5.Raise/LowerやPaintHeightモードを駆使してお気に入りの大地を作ろう。尖り過ぎてしまった場所や周辺と違和感のある部分は下図のSmoothHeightツールを使ってなぞるとなだらかになる。
表面材質の設定
6.PaintTextureモードを選択し、下のEditTexturesボタン->add Textureを選択する。
7.ポップアップ画面左のselectからGrassHillAlbedoを選択し、下にあるAddボタンを押す。
8.再びEditTextureボタンを押し、今度はGrassRockyAlbedoをAddする。
9.2つのテクスチャを切り替えながらペイントをしていこう。Altキーを押しながら色々な角度から眺めて不自然な部分がないようにしていく。
木を植えよう
10.PlaceTreesモードを選択して下のEditTrees->add Treeを選択する。
11.Broadleaf-desktopを選択し、addを押す。
12.BrushSizeで塗る範囲を決め(TreeDensityは密度)木を配置していこう。植えすぎたところはShiftを押しながらで削除できる。
13.Altキーでの画面調整やズームなども利用してバランス良く配置していく。
海の設定
以前はpro版限定だった海の機能だが、現在は無料版でも使える。配置してみよう。
14.水のプレファブは以下の所にある。今回はAdvanceを使う。これをterrainの真ん中あたりに配置する。
15.Y軸で水面の高さ、X軸とZ軸で広さを設定できる。自分のマップに合わせて水面を設定する。
キャラの配置
せっかくなのでキャラを配置してみよう。ここではデフォルトで用意されているものを使う。
15. 下図インポートパッケージからcharacterを選択。
16.charactersからallを選択してインポートする。
17.以下のプレファブをヒエラルキーに配置する
18.transformを設定し、キャラが地形の上にいるように設定する。
カメラコントローラーの作成
14.プレイヤーにカメラを追従させよう。CameraController.csを作成しカメラに付与する。
ページ最下部参照
15.インスペクターからThirdPersonControllerを登録しよう。
実行
上下左右の矢印キーで移動。スペースでジャンプをする。自分で作ったフィールドを探検してみよう。
フルサイズ画像ダウンロード
Panther4Full
使用アセット
Pz.Kpfw IV (H)
https://assetstore.unity.com/packages/3d/vehicles/land/pz-kpfw-iv-h-81247
Windridge City
https://assetstore.unity.com/packages/3d/environments/roadways/windridge-city-132222
Old Soviet Shop
https://assetstore.unity.com/packages/3d/environments/urban/old-soviet-shop-54767
CameraController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
public Transform player;
public float pointX = -3.0f;
public float pointY = 1.0f;
public float rotX;
public float rotY;
void LateUpdate(){
transform.position = player.position + (player.forward*pointX) + (player.up * pointY);
Vector3 dir = player.forward;
dir.x += rotX;
dir.y += rotY;
transform.rotation=Quaternion.LookRotation(dir);
}
}
コメント