前回の爆弾を避けよ!~6~の続きです。
前提条件
前回のおわりまでです。
この記事の「爆弾を避けよ!」の作成の流れ
- 当たり判定のはなし
- 当たり判定を作る
こちらを行っていきます。
当たり判定のはなし
このさき【Bakudann】と【Player】がぶつかったときに【Player】が破壊される処理を行っていきます。でもぶつかったことがわからないといつ破壊するかわかりません。
そのぶつかったこと検出する仕組みのことを当たり判定といいます。当たり判定がなければ、オブジェクトは当たったときの処理を実行できません。
当たり判定を【Bakudan】と【Player】につけて、ぶつかったことを検出します。当たり判定をつくるために【Physics】を使います。
【Physics】を使えば、Colliderコンポーネントをアタッチしたオブジェクト同士が衝突したときに、【Physics】が当たり判定をしてくれます。
【Physics】を使った当たり判定にはCollisionモードとTriggerモードがあります。
- Collisionモード(衝突)
- Triggerモード(すり抜ける)
Collisionモードだと物理的な当たり判定で、オブジェクト同士がぶつかり、衝突検出+衝突応答をも実行されます。Triggerモードだとは検出だけ行い、あとはすり抜けます。
今回は爆弾にぶつかったプレイヤーを消します。爆弾はそのまますり抜けさせます。Triggerモードを使います。
【Physics】の当たり判定を作るには必要な条件があります。
- 判定したいオブジェクトすべてにColliderコンポーネントがアタッチされている
- 当たり判定したいオブジェクトのどちらか一方には最低限Rigidbodyコンポーネントがついている(両方でもOK)
この2つの条件がなければ、Triggerモードが使えません。
また物理挙動を(Collisionモード)させたい場合は、判定したいオブジェクトすべてにCollisionコンポーネントとRigidbodyコンポーネントがアタッチしてある状態でなければなりません。
当たり判定のもっと詳しい説明の記事書きます。
当たり判定をつくる
【Player】に【Rigidbody 2D】をつける
【Hierarchy】→【Player選択】→【Inspector】→【Add Component】→【Rigidbody 2D】
当たり判定するにはぶつかるオブジェクトすべてにColliderコンポーネントと、どちらか片方にRigidbodyコンポーネントをつけることが条件でした。
【Player】と【Bakudan】にはすでにColliderコンポーネントはついているので、残りのRigidbodyコンポーネントをつけていきます。
【Bakudan】をTriggerモードにする
【Hierarchy】→【Bakudan選択】→【Inspector】→【Circle Collider 2D】→【Is Triggerにチェックをする】
これで爆弾がすり抜けます。
ぶつかる2つのオブジェクトに【IsTrigger】をチェックしなくても、OnTriggerは実行されるそう。この辺の当たり判定の話は他の記事にまとめます
【PlayerController】スクリプトに記述する
【PlayerController】スクリプトを開いて記述してください。【Scripts】ファイル内の【PlayerController】スクリプトをダブルクリックすれば開けます。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
// 右矢印ボタンを押したら移動するメソッド
public void RightArrowDown()
{
transform.Translate(2, 0, 0);
}
// 左矢印ボタンを押したら移動するメソッド
public void LeftArrowDown()
{
transform.Translate(-2, 0, 0);
}
// 衝突した瞬間にオブジェクトを破壊
void OnTriggerEnter2D(Collider2D collision)
{
Destroy(gameObject);
}
}
OnTriggerEnter2D | 衝突開始時 |
// 衝突した瞬間にオブジェクトを破壊
void OnTriggerEnter2D(Collider2D collision)
{
Destroy(gameObject);
}
衝突した瞬間にオブジェクトを破壊しています。衝突したら【Player】を破壊するってことです。
ゲームを実行してみる
【Bakudan】が【Player】に衝突した瞬間に、破壊されました。こうなっていればOKです。
おわりに
では次の爆弾を避けよ!~8~に行きましょう。
コメント