LoginSignup
2
1

More than 3 years have passed since last update.

【UE4】タグによる当たり判定

Posted at

タグによる衝突判定のつけ方

ゲームにおいて攻撃が命中したかどうか、といったことを判定したい場合、衝突したかどうかの判定だけでなく何が衝突したのかを判定する必要があります。そうしないと壁にぶつかってはダメージを食らい、仲間同士でぶつかっては傷ついていくキャラクターができてしまいます。

衝突したオブジェクトが何であるかを判定する方法はいくつか考えられると思いますが、一つに「タグ」を利用する方法があります。
攻撃の例でいえばダメージを与えるようなオブジェクト(剣や弾丸など)に共通のタグを与え、衝突したオブジェクトがそのタグを持っていたらダメージを食らう、という方法です。

Unityでいう所の以下のような処理です。

Hit.cs
// 何かがぶつかったら呼ばれる。
void OnCollisionEnter(Collision collision){

    // ぶつかった相手のタグを取得
    string tag = collision.gameObject.tag;

    // タグが"Bullet"なら攻撃を食らったと判定
    if(tag == "Bullet"){

        // 攻撃を食らった際の処理
        Destroy(this.gameObject);
    }
}

上の例でいえば"Bullet"というタグを持つオブジェクトと衝突するとダメージを食らったものと判定します。
これで拳銃やライフルの弾に"Bullet"タグをつけ、壁や床には別のタグをつければ弾に当たった時だけダメージを食らうようになります。

先日UnrealEngine4でBlueprintを使用して同様の処理を作ろうとしたらあんまり情報が無かったのでご紹介します。

1.Actorにタグをつける

こちらのチュートリアルを例に話をします。

まずダメージを与えるオブジェクトである弾丸にタグをつけます。UE4のデフォルトのFPSプロジェクトに含まれている弾丸のActorはFirstPersonProjectileという名前です。
1.png

こちらをダブルクリックすると別ウインドウが開きます。 左上の"FirstPersonProjectile(self)"をクリックしてください。
2.png

右のdetailsタブを下にスクロールしていくと"Actor"という項目が出てきます。その項目の下部にある下矢印をクリックすると追加の設定項目が表示されます。
3.png

Tagsという項目が表示されますのでその項目の「+」をクリックするとタグが一つ追加されます。
タグの値を"Bullet"に編集しましょう。
4.png

編集出来たらCompileしてSaveしましょう。これでタグの追加は完了です。

2.ダメージを食らう側の判定

ダメージを食らう側の処理を作りましょう。
動画で紹介されているEvilCubeを基に改造していきます。
以下のようにしましょう。
5.png
Actor Has Tagは衝突したActorが特定のTagを持っているかどうかを判定するノードでBranchはif-else文に相当するノードです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1