【第25回】ゴルフっぽいゲームのコースを作るUnityチュートリアル
- 2018.04.30
- Unityチュートリアル
- Unity, チュートリアル
前回のチュートリアルでは、Texture画像をインポートして、オブジェクトに設定しました。これにより、ボールや地面、背景にTextureを貼ることができ、だんだんとゲームらしさが増してきました。
今回は、前回作成したオブジェクト達をPrefab化し、それをインスタンス化してコースを作ります。インスタンス化と言ってもスクリプトからではなく、手動でぽんぽこ配置していきます。
前回のチュートリアルはこちらから。
今回の目的
コースに配置するオブジェクトをPrefab化し、それを使って実際にコースを作ります。
プロジェクトの準備
前回のチュートリアルで作成したプロジェクトをそのまま使います。
このページに先にたどり着いた方は、チュートリアルの初回から追っていただけるといいかもしれません。
Prefab化する
上の記事でPrefabについて扱いましたが、今回もこの手順を使ってPrefabを作ります。『Hierarchy』ウィンドウからドラッグ&ドロップするだけなのでお手軽。
まずはPrefab化するオブジェクトの準備から。
地面の表面と側面はひとつのPrefabにまとめたいので、『Hierarchy』ウィンドウで整理します。何も選択していない状態で、右クリックまたは二本指タップでコンテキストメニューを開き、[Create Empty]を選択します。
名前は『GroundParent』にしました。Transformは歯車アイコンから[Reset]しています。
『GroundParent』オブジェクトの子オブジェクトとして、『GroundSurface』オブジェクトと『Ground』オブジェクトをドラッグ&ドロップします。
これで地面パーツがひとまとまりになったので、『GroundParent』オブジェクトをPrefab化しましょ。親オブジェクトがPrefab化されるときには、子オブジェクトも一緒にPrefab化されます。
無事Prefab化されました。なお、『Resources』フォルダ内の『Prefab』フォルダに入れていますが、いつかスクリプトからインスタンス化することを想定してここに置いています。
同じように背景オブジェクトもPrefab化しますが、その前にちょっといじりましょ。
せっかく森っぽい画像を作ったので、もう少し大きくします。『Background』オブジェクトのTransformコンポーネントで、ScaleのX, Y, Z全て[20]にします。地面2マス分ですね。位置を地面に合わせるため、PositionのXを[5]に、Yを[10]にします。
同様に、『BackgroundLeft』オブジェクトでもTransformコンポーネントからScaleをX, Y, Z全て[20]にします。PositionのXは[-15]にしていますが、あとで変えるかも。つまり任意の値でOKです。
もう一方の『BackgroundRight』オブジェクトもTransformコンポーネントからScaleをX, Y, Z全て[20]にします。
Scaleを変更したら、背景オブジェクト三兄弟も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]にします。
Scaleが20なので、隣のオブジェクトから20ずらすとちょうどいいです。
実際やってみると、『Scene』ウィンドウでは綺麗に並んでいるように見えますが、実は『Game』ウィンドウで見るとちょっとだけ隙間ができちゃうんですよね。Quadの端の部分って、若干隙間ができるのです。
これを解消するために、PrefabのScaleを少し大きくして、境目がわからないようにしちゃいましょ。
最初からいた『Background』オブジェクトを選択し、TransformコンポーネントのScaleをX, Y, Zとも[20.05]にします。値を変更したら上の方にある[Apply]をクリック。こうする事で、『Background』のPrefabから作ったオブジェクト全体の設定を一度に変えることができます。
ついでなので、『BackgroundLeft』オブジェクトと『BackgroundRight』オブジェクトでもScaleを変更します。
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]です。
『Ground』オブジェクトの大きさが10になっているので、それに合わせて落下判定オブジェクトも動かしています。Scaleに関してはコースがすっぽり入る大きさにしておけばOKです。気持ち大き目にしておけば安心かも。
全体の確認
コースのオブジェクトを配置するとこんな感じになります。
これでコースのオブジェクトを配置することができました。
ここまでやってから気付きましたが……ゴールがない!
なので、次回はゴールの作成を行います。また、Boost! ボタンの動きも変えていきましょうか。現状、1打しかできませんもんね。
まとめ
今回はコースの配置を行いました。どのようなコースを作るかはオリジナリティの出る部分なので、思うがままに作ってみてくださいな。
次はゴールの作成、ボタンの動作変更と、またまた山盛りな予感。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【第24回】ボールやコースにTextureを貼るUnityチュートリアル 2018.04.27
-
次の記事
【第26回】ゴルフゲームの進行を制御するUnityチュートリアル 2018.05.02
コメントを書く