【プログラミングのススメ】Unityでゲーム開発その4!簡単な玉転がしゲームを作ってみよう(前編)
>> 関連記事 :【プログラミングのススメ】Unityでゲーム開発その3!アセットストアから素材をゲット!
玉転がしゲームの挙動を決めよう
今回取り上げる玉転がしゲームの開発を進める前に、ゲーム全体の挙動と今回説明すること、やっていくことを整理しましょう。まずゲームの仕様は以下の通りです。
<ゲームの仕様>
・玉は1つ
・床に配置されたポールを全部消したらクリア
・当たってはいけない障害物に当たったらゲーム終了
今回の記事ではゲームのメインとも言えるオブジェクト、玉とポールの挙動を設定します。挙動の部分はスクリプトを使いますが、今はサンプルを紹介しますので、それを取り込んで動かしてください。これらの作業は、動きのあるゲームオブジェクトを作る基本となるので覚えましょう。
コンポーネントの追加と玉の移動、カメラワーク
まずは、第1回と第2回で作成したプロジェクトをそのまま流用し、そこに玉に動きを付けるコンポーネントを追加して、プレイヤーの移動とカメラワークを設定するところまで進めていきましょう。
- 玉を設置してコンポーネントの追加
第1回で作成したプロジェクトをUnityで開き、作成していた玉「Player」を選択してください。ヒエラルキービューでPlayerを選択して、インスペクタービューの一番下にある「Add Component」を選択します。その中から「Physics」-「Rigidbody」を選択すると、Playerに物理演算が加わります。
Playerが落下するかどうかを確認するために、Playerを床から少し離れた場所に設置してください。この時点で一度ゲームビューに遷移し、画面中央上部にある再生ボタンでゲームを動かしてみます。第2回で設定したBGMが流れ始め、Playerがぼたっと落ちる動作が確認できたら成功です。
- 玉の移動
次に、玉(Player)の移動とカメラワークの設定を行います。Playerを転がすにはスクリプトが必要です。第3回でプロジェクトに取り込んだスクリプト3つをプロジェクトビューで「Assets」-「Script」に移動させておいてください。
ヒエラルキービューのPlayerに対して、ドラッグ&ドロップで「」というスクリプトを重ねるとPlayerのコンポーネントに「」が追加されます。このままでは一部動かないので不要な部分を削除し、玉の移動に加える力の強さを「speed」で調整できるようにした、以下のソースをスクリプトのソースと入れ替えてください。
using UnityEngine;
// Include the namespace required to use Unity UI
using UnityEngine.UI;
using System.Collections;
public class PlayerController : MonoBehaviour {
// Create public variables for player speed, and for the Text UI game objects
//クラスのパブリック変数にするとインスペクタービューから入力できるようになる
public float speed = 10;
// Create private references to the rigidbody component on the player, and the count of pick up objects picked up so far
private Rigidbody rb;
// At the start of the game..
void Start ()
{
// Assign the Rigidbody component to our private rb variable
rb = GetComponent<Rigidbody>();
}
// Each physics step..
void FixedUpdate ()
{
// Set some local float variables equal to the value of our Horizontal and Vertical Inputs
float moveHorizontal = Input.GetAxis (“Horizontal”);
float moveVertical = Input.GetAxis (“Vertical”);
// Create a Vector3 variable, and assign X and Z to feature our horizontal and vertical float variables above
Vector3 movement = new Vector3 (moveHorizontal * speed, 0, moveVertical * speed);
// Add a physical force to our Player rigidbody using our ‘movement’ Vector3 above,
// multiplying it by ‘speed’ – our public player speed that appears in the inspector
rb.AddForce (movement);
これを導入すると、キーボードの上下左右キー(Pgupなど)でボールを自在に動かせるようになります。速さはデフォルトで10にしていますが、このままだととても遅いのでゲームとして楽しくなるよう、自分で速さを調節してください。
- カメラワークの設定
ここまでできたら、次はカメラを動かします。方法はいろいろあるのですが、ここではシンプルにカメラワーク用のスクリプトをMain Cameraのコンポーネントとして追加して、Playerとの相対距離を決めてPlayerを追尾させる方法で進めます。
まず、ヒエラルキービューでMain Cameraを選択して、インスペクタービューから「FollowController.cs」という新しいスクリプトを作成しましょう。このスクリプトをプロジェクトビューで「Assets」-「Scrpt」の中に入れて、以下のコードをコピーしてください。
using UnityEngine;
using System.Collections;
public class FollowPlayer : MonoBehaviour
{
public Transform target;
private Vector3 offset;
void Start()
{
offset = GetComponent<Transform>().position – target.position;
}
void Update()
{
GetComponent<Transform>().position = target.position + offset;
}
}
こうするとインスペクタービューの「FollwController」に「Target」という入力項目ができます。右の〇をクリックすると現在作成しているゲームオブジェクトがすべて見えますので「Player」を選んでください。
これで、Main CameraがPlayerを追尾するようになりました。距離や角度は、Main Camera側で調整して、ゲームビューで確認するようにしてくださいね。
ポールの設置と動きの設定
次はポール(以下Poleと呼称)の設置とPlayerに当たったら消えるという動きの設定です。Poleはひとつだけでなく、同じ性質のものを複数置きたいので、prefab(プレハブ)というものも利用していきます。順番にすすめていきましょう。
- ポールの作成と設置
玉を作ったときと同じように、Poleも作成しましょう。3DobjectのCapsuleを選択すると、カプセル状のゲームオブジェクトが作成されます。大きさなどをこれまで作ったステージや玉のサイズを見ながら相対的に決めてください。完成したら、次にprefabを作成します。プロジェクトビューの「Create」でFolderを作成し、「Prefab」という名前にします。そこに、先ほど作成したPoleをコピーしてください。これでPoleのprefabが完成です。
プロジェクトビューの「Pole」をシーンビューにドラッグ&ドロップして、Poleを6本にしましょう。なおこれからPoleに動きを付けますが、最初のPoleに動きを追加したら、後はボタンひとつですべてのPoleに反映できるようになります。
- 玉が当たったらポールが消えるように動きを追加
Poleがひと通りできあがったら、新しいスクリプトを追加します。「Pole」という名前でOKです。作成したスクリプトに、以下を貼り付けてください。
using UnityEngine;
using System.Collections;
public class Pole : MonoBehaviour
{
void OnTriggerEnter(Collider hit)
{
if (hit.CompareTag(“Player”))
{
Destroy(gameObject);
}
}
}
このスクリプトは、Playerが自分に当たってきたらそれをトリガーにして自分を消すという処理です。Playerと認識させるために、Playerに「Player」という「タグ」を付けておく必要があります。
このスクリプトを有効にするために、以下の2つを実行しておきましょう。
・Playerを選択してインスペクタービューから「Tag」を「Player」にする
・Poleを選択してインスペクタービューから「Capsule Colider」コンポーネントの「Is Tregger」にチェックを入れる
ここまでを動かしてみると、動きを設定したPoleのみがPlayerに接触して消えるようになります。
- すべてのポールに同じ動きを追加
ここまで完成したらすべてのPoleに同じ動きを追加しましょう。方法はとても簡単です。ヒエラルキービューでPoleを選択してからインスペクタービューの上部右側にある「Apply」をクリックするだけで、他のprefabのPoleにもスクリプトの設定や属性の変更が反映されます。ここまでで、玉転がしゲームで使用するゲームオブジェクトは作り終わったことになります。お疲れ様でした!
>> 関連記事 :【プログラミングのススメ】Unityでゲーム開発その5!簡単な玉転がしゲームを作ってみよう(後編)
動きのあるゲームオブジェクト作成の基本をマスターしよう
今回は、動きのあるゲームオブジェクト作成の基本を説明しました。あえてスクリプトは細かく解説しておりません。というのもオブジェクトの作成や設定を覚えてもらうことが重要で、スクリプトは徐々に勉強していけるからです。prefabやトリガーの設定は、他のゲームを作成する際にも役立ちますので、ぜひ色々と試してみてくださいね。
次回はUnity入門の最終回。ゲームの仕上げに入りましょう。最後までやり遂げることで自信にもなりますので、ぜひゲームを完成させてください。