【第25回】ゴルフっぽいゲームのコースを作るUnityチュートリアル

【第25回】ゴルフっぽいゲームのコースを作るUnityチュートリアル

前回のチュートリアルでは、Texture画像をインポートして、オブジェクトに設定しました。これにより、ボールや地面、背景にTextureを貼ることができ、だんだんとゲームらしさが増してきました。

今回は、前回作成したオブジェクト達をPrefab化し、それをインスタンス化してコースを作ります。インスタンス化と言ってもスクリプトからではなく、手動でぽんぽこ配置していきます。

前回のチュートリアルはこちらから。

 

今回の目的

コースに配置するオブジェクトをPrefab化し、それを使って実際にコースを作ります。

プロジェクトの準備

前回のチュートリアルで作成したプロジェクトをそのまま使います。

このページに先にたどり着いた方は、チュートリアルの初回から追っていただけるといいかもしれません。

Prefab化する

上の記事でPrefabについて扱いましたが、今回もこの手順を使ってPrefabを作ります。『Hierarchy』ウィンドウからドラッグ&ドロップするだけなのでお手軽。

まずはPrefab化するオブジェクトの準備から。

地面の表面と側面はひとつのPrefabにまとめたいので、『Hierarchy』ウィンドウで整理します。何も選択していない状態で、右クリックまたは二本指タップでコンテキストメニューを開き、[Create Empty]を選択します。

空オブジェクトの作成
空オブジェクトを作成するのだポッター

 

名前は『GroundParent』にしました。Transformは歯車アイコンから[Reset]しています。

GroundParentのTransform
GroundParentのTransform

 

『GroundParent』オブジェクトの子オブジェクトとして、『GroundSurface』オブジェクトと『Ground』オブジェクトをドラッグ&ドロップします。

GroundParentの子オブジェクトにする
GroundParentの子オブジェクトにする

 

これで地面パーツがひとまとまりになったので、『GroundParent』オブジェクトをPrefab化しましょ。親オブジェクトがPrefab化されるときには、子オブジェクトも一緒にPrefab化されます。

Prefab化
ドラッグ&ドロップでPrefab化

 

無事Prefab化されました。なお、『Resources』フォルダ内の『Prefab』フォルダに入れていますが、いつかスクリプトからインスタンス化することを想定してここに置いています。

Prefab化された
Prefab化された

 

同じように背景オブジェクトもPrefab化しますが、その前にちょっといじりましょ。

せっかく森っぽい画像を作ったので、もう少し大きくします。『Background』オブジェクトのTransformコンポーネントで、ScaleのX, Y, Z全て[20]にします。地面2マス分ですね。位置を地面に合わせるため、PositionのXを[5]に、Yを[10]にします。

BackgroundのTransform
BackgroundのTransform

 

同様に、『BackgroundLeft』オブジェクトでもTransformコンポーネントからScaleをX, Y, Z全て[20]にします。PositionのXは[-15]にしていますが、あとで変えるかも。つまり任意の値でOKです。

BackgroundLeftのTransform
BackgroundLeftのTransform

 

もう一方の『BackgroundRight』オブジェクトもTransformコンポーネントからScaleをX, Y, Z全て[20]にします。

BackgroundRightのTransform
BackgroundRightのTransform

 

Scaleを変更したら、背景オブジェクト三兄弟もPrefab化します。

背景をPrefab化
背景をPrefab化

 

コースの親オブジェクト作成

これからPrefabをどんどん『Hierarchy』ウィンドウに持っていくのですが、その前に整理用オブジェクトを作りましょ。

最上位の階層にどんどこオブジェクトを作ると大変なことになるので、コース用オブジェクトの親オブジェクトを作ります。

いつものようにコンテキストメニューから[Create Empty]を選択します。名前は[CourseObjects]にしました。Transformコンポーネントでは歯車アイコンのメニューから[Reset]を行います(重要)

このオブジェクトがずれてると、子オブジェクト全部がずれます。

また、『CourseObjects』オブジェクトを選択した状態で、[Create Empty]を選択。新規空オブジェクトの名前は[BackgroundParts]で、ここに背景用オブジェクトを入れます。

もう一度『CourseObjects』オブジェクトを選択した状態で、[Create Empty]を選択。名前は[GroundParts]で、こちらは地面用オブジェクトを入れます。

この時点で下のようになっていればOK。

コース用親オブジェクト
コース用親オブジェクト

 

コースの配置

背景は『BackgroundParts』オブジェクトの下に、地面は『GroundParts』オブジェクトの下に配置します。

『Hierarchy』ウィンドウにいるPrefab化したオブジェクトたちもそれぞれ移しておきましょ。

背景の配置

まずは背景を並べてみます。

『Project』ウィンドウから[Resources] -> [Prefabs]を開き、『Background』を『Hierarchy』ウィンドウにドラッグ&ドロップします。

もともと作ってあった『Background』オブジェクトは、TransformコンポーネントのPositionでXが[5]、Yが[10]、Zが[5]になっているので、新しい方ではTransformコンポーネントのPositionでXを[25]、Yを[10]、Zを[5]にします。

BackgroundのTransform
BackgroundのTransform

 

インスタンス化したBackground
インスタンス化したBackground

 

Scaleが20なので、隣のオブジェクトから20ずらすとちょうどいいです。

実際やってみると、『Scene』ウィンドウでは綺麗に並んでいるように見えますが、実は『Game』ウィンドウで見るとちょっとだけ隙間ができちゃうんですよね。Quadの端の部分って、若干隙間ができるのです。

これを解消するために、PrefabのScaleを少し大きくして、境目がわからないようにしちゃいましょ。

最初からいた『Background』オブジェクトを選択し、TransformコンポーネントのScaleをX, Y, Zとも[20.05]にします。値を変更したら上の方にある[Apply]をクリック。こうする事で、『Background』のPrefabから作ったオブジェクト全体の設定を一度に変えることができます。

Prefabの設定変更
Prefabの設定変更

 

ついでなので、『BackgroundLeft』オブジェクトと『BackgroundRight』オブジェクトでもScaleを変更します。

Prefabの設定変更
BackgroundLeftも

 

Prefabの設定変更
BackgroundRightも

 

BackgroundPartsに関しては、以下のように配置しています。

オブジェクト名 Position X Position Y Position Z
BackgroundLeft -15 10 5
Background 5 10 5
Background (1) 25 10 5
Background (2) 45 10 5
Background (3) 65 10 5
BackgroundRight 85 10 5

 

(1)とか(2)はPrefabをドラッグ&ドロップした時の名前です。特に変える必要もないかと思い、そのまま使っています。

 

地面の配置

BackgroundPartsと同様に、『Ground』のPrefabについてもインスタンス化しましょ。

『Project』ウィンドウから[Resources] -> [Prefabs]を開き、『Ground』を『Hierarchy』ウィンドウにドラッグ&ドロップします。

『Ground』については隙間ができないので、Scaleの変更は必要ありません。

私は以下のように配置してみました。

オブジェクト名 Position X Position Y Position Z
GroundParent (2) -20 0 0
GroundParent (1) -10 0 0
GroundParent 0 0 0
GroundParent (3) 10 0 0
GroundParent (4) 20 1.5 0
GroundParent (5) 30 3 0
GroundParent (6) 40 0 0
GroundParent (7) 50 0 0
GroundParent (8) 60 0 0
GroundParent (9) 70 0 10
GroundParent (10) 80 0 0
GroundParent (11) 90 0 0

 

PositionのXは10ずつ増やすようにしています。

『GroundParent (4)』オブジェクトはPositionのYを[1.5]に設定、『GroundParent (5)』オブジェクトはPositionのYを[3]に設定し、ちょっと段差を作ってみました。

また『GroundParent (9)』オブジェクトはPositionのZを[10]に設定することで、落ちるとコースアウトとなる穴を用意しています。背景の下に地面の側面を表示したかったので、単純にオブジェクトを配置しないでおくのではなく、画面奥側に配置するようにしています。

落下判定オブジェクトの配置

忘れてはいけないのが落下判定を行うオブジェクトのこと。このチュートリアルでは落下判定オブジェクト『FallChecker』を既に作成していますが、この大きさをコースに合わせて変える必要があります。

PositionのXが[50]、Yが[-10]、Zが[0]となるように設定。ScaleはXが[300]、Yは[1]、Zは[50]です。

FallCheckerの設定
FallCheckerの設定

 

『Ground』オブジェクトの大きさが10になっているので、それに合わせて落下判定オブジェクトも動かしています。Scaleに関してはコースがすっぽり入る大きさにしておけばOKです。気持ち大き目にしておけば安心かも。

全体の確認

コースのオブジェクトを配置するとこんな感じになります。

コースの配置後
コースの配置後

 

これでコースのオブジェクトを配置することができました。

ここまでやってから気付きましたが……ゴールがない!

なので、次回はゴールの作成を行います。また、Boost! ボタンの動きも変えていきましょうか。現状、1打しかできませんもんね。

まとめ

今回はコースの配置を行いました。どのようなコースを作るかはオリジナリティの出る部分なので、思うがままに作ってみてくださいな。

次はゴールの作成、ボタンの動作変更と、またまた山盛りな予感。

     

ゲーム開発の攻略チャートを作りました!

CTA-IMAGE

「ゲームを作ってみたいけど、何から手を付けていいか分からない!」


そんなお悩みをお持ちの方向けに、todoがアプリをリリースした経験を中心に、ゲーム作りの手順や考慮すべき点をまとめたe-bookを作成しました。ゲーム作りはそれ自体がゲームのように楽しいプロセスなので、「攻略チャート」と名付けています。


ゲームを作り始めた時にぶつかる壁である「何をしたら良いのか分からない」という悩みを吹き飛ばしましょう!