Unity 6で障害物を配置する方法|CubeとMaterialでゲームエリアを作る

Unity 6で障害物とMaterialを使ってゲームエリアを作る初心者向け記事のアイキャッチ画像 Unity

前回は、Unity 6でGroundの周囲に4つの壁を作成し、Playerがゲームエリアの外へ出ないようにしました。

さらに、PlayerMovementをRigidbodyを使った移動方法へ変更し、Playerが壁にぶつかって停止することも確認しました。

今回は、そのゲームエリアの中に障害物を配置していきます。

障害物にはUnityのCubeを使用し、Playerが障害物を通り抜けず、避けながら移動できる状態を作ります。

また、Ground・壁・障害物にMaterialを設定し、これまでほぼ同じ色だったゲームエリアの見た目も少し分かりやすくしていきます。

前回の壁とゲームエリアの作り方についてはこちらの記事で解説しています。

Unity 6で壁とゲームエリアを作る方法|CubeとColliderで移動範囲を作成

今回作るもの

現在のゲームエリアには、

Player

Ground

Walls

があります。

今回はさらに、ゲームエリアの中に複数の障害物を配置します。

障害物にはCubeを使用し、

Obstacle_01

Obstacle_02

Obstacle_03

という名前で管理します。

PlayerをW・A・S・Dキーで操作し、障害物にぶつかると停止することを確認します。

さらにMaterialを使って、Ground・壁・障害物の色を変更します。

ゲームの内容自体はまだシンプルですが、見た目にも少しずつ「ゲームのステージ」らしくしていきます。

障害物を管理するためのObstaclesを作成する

前回は4つの壁をWallsという親GameObjectの中にまとめました。

今回も同じように、障害物を整理するための空のGameObjectを作成します。

名前は、

Obstacles

にします。

これから作成する障害物は、すべてObstaclesの子GameObjectとして配置します。

Hierarchyは最終的に、

Obstacles
├─ Obstacle_01
├─ Obstacle_02
└─ Obstacle_03

のような状態を目指します。

GameObjectが増えてきた段階から整理する習慣を付けておくと、後からSceneの内容を確認しやすくなります。

最初の障害物をCubeで作成する

まずは1つ目の障害物を作ります。

Hierarchyから3D ObjectのCubeを作成します。

作成したCubeの名前を、

Obstacle_01

に変更します。

今回はゲームエリア中央から少し右側に配置してみます。

例えばTransformを、

Position X = 4

Position Y = 1

Position Z = 2

Scale X = 2

Scale Y = 2

Scale Z = 2

に設定します。

これで、Playerより少し大きな箱型の障害物がゲームエリア内に配置されます。

Unity 6でゲームエリア内にObstacle_01を配置した画面
CubeをObstacle_01に変更し、ゲームエリア内に配置します。

障害物にもBox Colliderが付いている

Obstacle_01はCubeから作成しているため、最初から

Box Collider

が設定されています。

UnityのObstacle_01にBox Colliderが設定されている画面
Cubeには最初からBox Colliderが設定されているため、障害物の当たり判定として使用できます。

そのため、今回も新しくColliderを追加する必要はありません。

PlayerにはBox ColliderとRigidbodyがあり、Obstacle_01にもBox Colliderがあります。

この状態でPlayerをObstacle_01へ移動させると、Collider同士が接触してPlayerが障害物を通り抜けないようになります。

前回作成した壁と同じ仕組みを、今度はゲームエリア内の障害物として利用します。

障害物を複製して配置する

1つだけでは少し寂しいため、Obstacle_01を複製して複数の障害物を配置します。

今回は3つ作成します。

例えば、次のような位置と大きさに設定します。

Obstacle_01

Position = X 4 / Y 1 / Z 2

Scale = X 2 / Y 2 / Z 2

Obstacle_02

Position = X -4 / Y 1 / Z 5

Scale = X 3 / Y 2 / Z 1

Obstacle_03

Position = X 0 / Y 1 / Z -5

Scale = X 1 / Y 2 / Z 4

同じCubeでもScaleを変えることで、形の異なる障害物として利用できます。

すべての障害物をObstaclesの子GameObjectとして整理しておきます。

Unity 6のゲームエリア内に3つの障害物を配置した画面
Obstacle_01を複製し、位置と大きさの異なる3つの障害物をゲームエリア内に配置します。

Playモードで障害物との当たり判定を確認する

障害物を配置したら、Playモードで動作を確認します。

Unity上部のPlayボタンを押し、Gameビューをクリックします。

W・A・S・DキーでPlayerをObstacle_01まで移動させます。

Playerが障害物に接触したところで停止し、そのまま障害物を通り抜けなければ成功です。

UnityでPlayerが障害物のBox Colliderに当たって停止した画面
Playerを障害物まで移動させ、Box Colliderによって通り抜けないことを確認します。

Obstacle_02やObstacle_03についても同じように確認します。

さらに、障害物を避けながらゲームエリア内を移動できるか試してみます。

壁だけだったときよりも、どこを通るかを考えながらPlayerを操作する必要があるため、少しゲームらしい空間になります。

Materialを使ってゲームエリアを見やすくする

現在はGroundや壁、障害物が似たような見た目になっているため、どれが何なのか少し分かりにくい状態です。

そこでMaterialを使って色を変更します。

Materialは以前Playerの色を変更するときにも使用しました。

今回は、

GroundMaterial

WallMaterial

ObstacleMaterial

の3つを作成します。

それぞれ異なる色にして、ゲームエリアの役割が見た目でも分かるようにします。

例えば、

Ground = 緑系

Wall = グレー系

Obstacle = オレンジ系

のようにすると、Playerや背景とも区別しやすくなります。

色は完全に同じでなくても問題ありません。

自分が見やすいと思う色を選んで大丈夫です。

GroundMaterialを作成する

Projectウィンドウ内に、

Materials

というフォルダを作成します。

今後Materialが増えても管理しやすいように、Materialはこのフォルダにまとめていきます。

Materialsフォルダ内で新しいMaterialを作成し、

GroundMaterial

という名前にします。

色を緑系に変更したら、HierarchyのGroundへMaterialを設定します。

Ground全体の色が変われば成功です。

UnityでGroundMaterialを作成してGroundの色を変更した画面
GroundMaterialを作成し、Groundに設定して地面の色を変更します。

WallMaterialを作成する

次に、

WallMaterial

を作成します。

今回はグレー系など、Groundとは違う色にします。

作成したWallMaterialを、

Wall_North

Wall_South

Wall_East

Wall_West

の4つへ設定します。

4つすべての壁が同じ色になれば、ゲームエリアの境界が分かりやすくなります。

同じMaterialを複数のGameObjectで使うことができるため、壁ごとに新しいMaterialを作る必要はありません。

UnityでWallMaterialを4つの壁に設定した画面
同じWallMaterialを4つの壁に設定し、ゲームエリアの境界を分かりやすくします。

ObstacleMaterialを作成する

最後に、

ObstacleMaterial

を作成します。

今回は障害物が目立つように、オレンジ系などGroundや壁とは異なる色にしてみます。

作成したObstacleMaterialを、

Obstacle_01

Obstacle_02

Obstacle_03

へ設定します。

これでPlayer、Ground、壁、障害物を見た目でも区別できるようになります。

UnityでObstacleMaterialを3つの障害物に設定した画面
ObstacleMaterialを3つの障害物に設定し、Groundや壁と見分けやすくします。

同じMaterialを複数のGameObjectで使える

Unityでは、1つのMaterialを複数のGameObjectに設定できます。

例えば今回のWallMaterialは、4つすべての壁に使用しています。

その状態でWallMaterialの色を変更すると、そのMaterialを使用しているすべての壁の見た目も変更されます。

ObstacleMaterialについても同じです。

3つの障害物へ同じMaterialを設定しておけば、後から一括で見た目を変更できます。

GameObjectごとに必要以上にMaterialを作らず、同じ見た目にしたいものは同じMaterialを共有すると管理しやすくなります。

HierarchyとProjectを整理する

ここまで進めると、Scene内のGameObjectとProject内のAssetが少しずつ増えてきます。

Hierarchyでは、

Main Camera
Directional Light
Ground
Player
Walls
├─ Wall_North
├─ Wall_South
├─ Wall_East
└─ Wall_West
Obstacles
├─ Obstacle_01
├─ Obstacle_02
└─ Obstacle_03

のような状態になります。

Project側でも、

Assets
├─ Materials
└─ Scripts

のように種類ごとにフォルダを分けておくと管理しやすくなります。

ゲーム制作が進むと、スクリプト・Material・3Dモデル・画像・音声など大量のAssetを扱うようになります。

最初の段階から分かりやすい名前とフォルダを使って整理することが大切です。

ゲームエリアを実際に歩いて確認する

最後にPlayモードにして、完成したゲームエリアを実際に操作して確認します。

PlayerをW・A・S・Dキーで移動させ、

壁を通り抜けないか、

障害物を通り抜けないか、

障害物の間を移動できるか、

ゲームエリアの見た目が分かりやすくなっているか、

を確認します。

設定画面だけを見るのではなく、実際にゲームを操作して確認することが重要です。

問題があれば、障害物のPositionやScaleを変更して調整できます。

Unity 6でGround・壁・障害物にMaterialを設定した完成ゲームエリア
Materialを設定したゲームエリアをPlayモードで確認し、Playerが障害物の間を移動できることを確認します。

今回のまとめ

今回はUnity 6のゲームエリア内にCubeを使った障害物を配置しました。

障害物にはCubeのBox Colliderをそのまま利用し、Playerが障害物を通り抜けないことを確認しました。

また、Ground・壁・障害物用のMaterialを作成し、それぞれ色を変更しました。

これによって、これまでよりもゲームエリアの各GameObjectを見分けやすくなりました。

さらに、HierarchyではWallsやObstaclesを使ってGameObjectを整理し、ProjectではMaterialsフォルダを作成しました。

ゲーム制作では機能を追加するだけでなく、GameObjectやAssetを整理しながら進めることも重要です。

次回はアイテムを配置する

ゲームエリアと障害物ができたので、次はPlayerが触れることのできるアイテムを作成します。

例えばゲームエリア内にアイテムを配置し、

Playerがアイテムに触れる

アイテムを取得する

アイテムが消える

という簡単な仕組みを作ります。

ここではColliderの

Is Trigger

についても確認します。

さらに、AIに相談しながらアイテム取得用のC#スクリプトを作成し、これまで作ってきたゲームエリアに最初のゲームらしい機能を追加していきます。

タイトルとURLをコピーしました