コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity 入門】【チュートリアル】玉転がしゲームを作る 6. 玉と収集アイテムの当たり判定

目次

前回のチュートリアル

はじめに

前回は、収集アイテムの配置が完了しました
今回は、玉が収集アイテムにぶつかったら収集アイテムを消すようにしていきます

タグの作成

当たり判定を実装する時は、
どのオブジェクトとどのオブジェクトがぶつかったかを検出できるようにするために
オブジェクトに「タグ」と呼ばれる識別名を設定します

ここでは収集アイテムの「Pick Up」プレハブにタグを設定していきます

f:id:baba_s:20171208160808p:plain

「Pick Up」プレハブを選択して、「Tag」のプルダウンメニューを押して
「Add Tag...」を選択します

f:id:baba_s:20171208160820p:plain

「Tags」の右下の「+」ボタンを押します

f:id:baba_s:20171208160840p:plain

「New Tag Name」の入力欄に「Pick Up」と入力して「Save」ボタンを押します

f:id:baba_s:20171208160910p:plain

「Pick Up」という名前のタグの準備ができたので
もう一度「Pick Up」プレハブを選択して、「Tag」のプルダウンメニューを押して
「Pick Up」タグを選択します

f:id:baba_s:20171208161044p:plain

これで、「Pick Up」オブジェクトに「Pick Up」タグを設定できました

衝突時の挙動の調整

現状、玉が収集アイテムにぶつかると、跳ね返るようになっているので、
玉が収集アイテムにぶつかっても跳ね返らないようにしていきます

f:id:baba_s:20171208161803p:plain

「Pick Up」プレハブを選択して、「Is Trigger」をチェックします

これで、ゲームを再生して玉を動かしてみると
収集アイテムにぶつかっても跳ね返らない(すり抜ける)ようになりました

衝突時の判定をプログラムで実装

ここまでで、玉と収集アイテムの当たり判定を実装する準備ができたので
玉を動かすプログラムが書かれた「PlayerController」スクリプトに、
玉と収集アイテムがぶつかった時のプログラムを実装していきます

f:id:baba_s:20171208162231p:plain

「PlayerController」をダブルクリックします

f:id:baba_s:20171208162258p:plain

すると、お使いの環境に合わせて Visual Studio や MonoDevelop などの、
プログラムを書くためのエディタが起動するので、
下記のプログラムをコピーして貼り付けて
Ctrl + S を押すなどしてスクリプトを保存します

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float speed; // 動く速さ

    private Rigidbody rb; // Rididbody

    void Start()
    {
        // Rigidbody を取得
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        // カーソルキーの入力を取得
        var moveHorizontal = Input.GetAxis("Horizontal");
        var moveVertical = Input.GetAxis("Vertical");

        // カーソルキーの入力に合わせて移動方向を設定
        var movement = new Vector3(moveHorizontal, 0, moveVertical);

        // Ridigbody に力を与えて玉を動かす
        rb.AddForce(movement * speed);
    }

    // 玉が他のオブジェクトにぶつかった時に呼び出される
    void OnTriggerEnter(Collider other)
    {
        // ぶつかったオブジェクトが収集アイテムだった場合
        if (other.gameObject.CompareTag("Pick Up"))
        {
            // その収集アイテムを非表示にします
            other.gameObject.SetActive(false);
        }
    }
}

もともとの「PlayerController」スクリプトのプログラムに対して
玉が他のオブジェクトにぶつかった時に呼び出される処理が
28行目以降に追加されています

f:id:baba_s:20171208162717p:plain

これで、エディタ上部の再生ボタンを押してゲームを再生してみます

そして、カーソルキーを入力して玉を動かすと
収集アイテムにぶつかった時に、収集アイテムが消えるようになりました

f:id:baba_s:20171207224204p:plain

Unity メニューの「File>Save Scenes」を選択するか、
Ctrl + S を押して、ここまでの作業内容を保存しておきましょう

次回は、玉と収集アイテムがぶつかったらスコアを増やし、
すべての収集アイテムを獲得したら画面に「You Win!」と表示されるようにしていきます

次のチュートリアル

備考

この記事は上記のチュートリアルの翻訳になります