【Unity】ゴルフっぽいゲームを作るチュートリアルの紹介

【Unity】ゴルフっぽいゲームを作るチュートリアルの紹介

このブログではチュートリアルを作っているのですが、ここではゴルフっぽいゲーム『GolfPoi』を作るチュートリアルについて紹介。

初心者向けのチュートリアルで、全30回のコースとなっています。

毎日1回ずつ進めれば、1ヶ月の間はお金を使わずに時間を潰せます。素敵。

1回あたり10分程度で終わる回もあるので、実際には「30回!?」というインパクトほどの時間はかからないと思います。

 

環境

macOS 10.13 High Sierra

Unity2017.4.0f1

私が普段使っているのがMacなのでこの環境になっていますが、Unity内の操作はWindowsでも同じなのでご安心ください。

基礎的な操作が中心なので、Unityのバージョンも厳密に同じバージョンにする必要はないと思います。

バージョン依存っぽい記述があったらご一報くださいな。

完成予想図

チュートリアルを通して手を動かしていただくと、Unityの物理演算を使用した3Dのゴルフっぽいゲームが出来上がります。

WebGLとしてビルドしたものがこちらの『GolfPoi』。

画面左の上下ボタンでボールを飛ばす角度を変更でき、画面右下の「Boost!」ボタンでボールを飛ばします。

超簡易なゲームですが、Unityの機能をざっくりと覚えられるように色々とテクニックを詰め込んでいます。

全体の構成

チュートリアルでは、大まかに以下の機能を扱っています。

  • Unityの物理演算
  • UIの配置と動作
  • Prefabのインスタンス化
  • Colliderの使用
  • スクリプティング
  • ゲーム全体の制御

これらの機能を組み合わせるだけでもゲームが作れたりするので、実際に触ってみてもらえるといいかも。

各回の紹介

第1回-第5回

記念すべきチュートリアルの1回目はプロジェクトの作成と自由落下がテーマ。

Unityの物理演算に触れるのがこの回の目的です。

 

続いてもUnityの物理演算機能についての話題。

物理特性マテリアルで跳ね返りを表現します。

 

第3回にして早速スクリプトを書きます。

RigidbodyのAddForceメソッドを使って、ボールに対して斜めに力を与える斜方投射を行います。

 

次はキー入力がテーマ。ゲームである以上、プレイヤーの入力を受け付ける必要がありますし、その入力を適切に処理する必要があります。

この回ではPCのキーボードからの入力がメインです。

 

キーボードからの入力の他に、スマホでは画面タップで操作を行います。

この回では画面からの入力を処理する準備として、UIの配置を行います。

第6回-第10回

第5回で作成したUIのボタンに対して、ボタンを押された時に呼び出すメソッドを実装します。

ボタンからの入力も、キーボードからの入力に対応するようにしておくのが大事です。

 

スクリプトのハードコードを防ぐために、『Inspector』ウィンドウからパラメータを変更できるようにします。

[SerializeField]のAttributeはよく使うので覚えておくと吉。

 

角度から力の大きさを計算するという、Unityの機能というよりは物理の考え方のような回。

力の大きさと向きを分けて規格化すると値を扱いやすいので、その方法を記載しています。

 

『Inspector』ウィンドウでの入力値を制限する方法と、AngularDragを使ってボールに働く摩擦力を表現する回です。

1つの記事に2つのネタを入れてしまったのを今になって後悔。

Sphereオブジェクトだと物理特性マテリアルの摩擦力が働きにくいので、AngularDragを使って速度を減衰させています。

 

RigidbodyのIsSleepメソッドを使用して、ボールが止まったかどうかを判断します。

初期位置との比較を行うことで、停止時の飛距離を計算してみましょ。

第11回-第15回

UIテキストの値を更新して画面に表示させるチュートリアルです。

画面に情報を表示するのはほとんどのゲームで使われる機能なのでしっかりと押さえておくべし。

 

第11回の応用編で、毎フレームUIテキストを更新して距離が分かるようにします。

メンバ変数にハイスコアを保持することで、止まった時に飛距離の比較を行い、大きければ更新するようにしています。

 

Unityで衝突を検知するために使うColliderの紹介です。

アクションゲームなどではコースから落ちたことを検知する必要もあるので、そのためにColliderを使っています。

 

第13回で配置したColliderを使って、実際にコースアウトを検知する処理を実装します。

ColliderのIsTriggerを使うのもよく使われるテクニックなのでぜひ。

 

ゲーム画面を映し出すカメラの位置を動かして、操作キャラを追いかける処理を実装します。

操作キャラがいるゲームではほぼ必須となる処理で、どのチュートリアルでもカメラの移動は扱っていると思います。

第16回-第20回

UIコンポーネントのひとつであるSliderを使って、カメラの拡大率を操作するチュートリアルです。

Unityで拡大・縮小を実装する場合、カメラを物体に近づけるという簡単な発想で実装が可能です。

 

この回から第20回まで、ボールの軌道予測を行うチュートリアルとなっています。

第17回では、その準備として軌道予測を表示するオブジェクトで使うマテリアルを準備しています。

オブジェクトの見え方に関する部分はまず間違いなくみんな触る部分のはず。

 

シーンの中で使うオブジェクトをいちいち手で作成するのは大変。

なので、オブジェクトのテンプレートのようなものであるPrefabを作成します。

 

第18回で作成したPrefabをスクリプトからインスタンス化します。

自動でオブジェクトを作れるようになると、動的にステージを生成したりなんてことも可能になります。

ここでは予想経路を示すためのオブジェクトをインスタンス化して動作確認をしています。

 

第19回で作成したスクリプトを拡張して、いよいよ予想経路に沿ってオブジェクトを配置します。

Unityの物理エンジンによる動作をシミュレーションするのもなかなかシュール。

高校物理の斜方投射の式も出てきますが、めんどくさかったらスクリプトコピペで動作確認するだけでもいいかも。

ただ物理的なシミュレーションを元にスクリプトを書けるようになると、表現できることの幅が広がります。

第21回-第25回

ボールを打ち出す強さを決めるメーターを実装します。

ここで使うのはUIのSlider。

体力ゲージにも使えるので、Sliderの動作は覚えておくとベネ。

 

ボールを打ち出す角度を変更するボタンを実装する前に、UI配置を行います。

ゲーム画面全体の配置についても扱っている回です。

 

第23回で配置したUIのボタンに処理を実装します。

1回押して処理を呼ぶのではなく、押した時、離した時のイベントを読み取って、ボタンを押しっぱなしにしていることを検知します。

ここで使うのはEventTriggerと呼ばれる機能。初心者向けのチュートリアルで扱うのもなぁ……と思いつつも、覚えておくと非常に便利なので使ってしまいました。

 

Textureも多分みんな使います。

ここではコース用オブジェクトにTextureを貼って、よりゲームらしい見た目にしていきます。

 

第24回で作成したコース用オブジェクトをシーンに配置していきます。

第20回でスクリプトからPrefabをインスタンス化する方法を扱いましたが、ここでは手動でPrefabを配置。

コースの起伏など、スクリプトだけで配置するのは難しい部分もあるので、手動でもPrefabからオブジェクトを作れる様子も扱っています。

第26回-第30回

コースにゴールを配置し、ゲーム全体の進行を管理します。

ボールを飛ばしたら、止まったところからまたボールを飛ばせるようにします。

ゴールにたどり着いたら画面に「GOAL!!」の文字を表示させ、よりゲームらしさを出せるようにしています。

 

RigidbodyがIsSleepでtrueを返すまで、つまりオブジェクトが止まるまでは案外時間がかかります。

その間、ゲームのプレイヤーが何もせず画面を眺めていることになり、ストレスに繋がってしまう可能性が……。

そこで早送りボタンを追加して、スムーズに次のショットに移れるようにします。

 

コースから落下した際、画面に「Miss…」と表示させ、落下時の演出を行います。

プレイヤーが今どういう状態なのかを把握できるようにするのは大切。

 

出来上がったゲームをビルドする方法を扱っています。

作ったゲームは誰かに遊んでもらいたいですし、配布可能な形式でビルドしちゃいましょ。

また、ビルドを行うことでそれまで出ていなかったエラーが出ることがあるので、配布する予定がなくてもビルドしてエラーを潰しておくといい感じ。

 

チュートリアル全体の振り返りです。

このチュートリアルを通してあなたができるようになった39のことをまとめているので、是非ともこれを見て自信をつけて欲しいです。

まとめ

このブログで扱っている初心者向けチュートリアルのコースについて紹介しました。

ステップバイステップで画像と一緒に手順を載せているので、手を動かして操作しやすくしています。

気になった部分だけでも実際に手を動かすと身につきやすいのでぜひ。手を動かした時間だけ経験値が上がります。

アセット作ってます!

CTA-IMAGE

Unityでの開発に役立つアセットを作っています。

3DダンジョンRPGを開発するスピードを200%加速するAssetや、ファンタジーRPGのダンジョンを彩るパーツを取り揃えています。

特に3DダンジョンRPGのゲームを1から作るのは結構時間がかかります。ダンジョン部分の作成はこうしたアセットを使って、開発をブーストさせてみませんか?