Unity

【Unity】OnCollisionEnterで子オブジェクトのTagを認識しない場合の対処法

投稿日:2020年10月26日 更新日:

概要

親子関係を持つオブジェクトの親と子で異なるTagをつけて、子が他のオブジェクトと衝突した場合にタグ検知するとなぜか親のタグしか認識されたなかったので、子のタグが認識される方法についてメモする。

検証の状況

  • CubeにBoxColliderが付けてある
  • 棒(Cylinder)にCapsuleColliderが付けてある
  • 棒はキャラクター(RobotKyle)の子オブジェクトとして設定
  • キャラクターにはTagとして”Player”を設定
  • 棒にはTagとして”Stick”を設定
  • キャラクターと棒にRigidbodyを設定

CubeにonCollisionEnterとして以下のスクリプトをアタッチして、衝突したタグを表示させる。

using System.Collections.Generic;
using UnityEngine;

public class CollisionTagTest : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    private void OnCollisionEnter(Collision collision)
    {
        Debug.Log(collision.gameObject.tag);
    }
}

結果

stickが衝突しているはずなのにPlayerTagを検知してしまう。

原因と対処法

原因は子オブジェクトであるCylinderにRigidbodyをつけ忘れていた。改めてCylinderにRigidbodyをつけたところ、Stickを認識するようになった。

なお、PlayerからもCylinderからもRigidBodyを取り外したところ、Stickと認識された。

親子関係を持つオブジェクトに対し、OnCollisionEnterで検出されるTagはRigidBodyがついているオブジェクトが優先されるのかも。

つまり、親も子もRigidBodyがついていれば、実際に衝突しているオブジェクトのTagが読まれれるっぽい。

以上

Unityを一から学ぶのにおすすめの本はコチラ

-Unity

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

【Unity】オブジェクトを周回させるスクリプト

Contents1 目的2 環境3 Step1 : 必要AssetのDownload&Import4 Step2 : オブジェクトの配置5 Step3 : 周回スクリプトの作成6 Step4 …

【Unity】mixamoのアニメーションが動かない場合の対処

Contents1 概要2 環境3 最初にやったこと3.1 FBXのダウンロード3.2 インポートとRigの設定4 困ったこと5 原因と対処方法6 分かったこと 概要 ハイクオリティな3Dキャラクター …

【Unity】キャラクター操作その4 –  レーザーソードを持たせてON/OFFする

Contents1 概要2 環境3 Step1 : レーザーソードの調達4 Step2 : レーザーソードを持たせる5 Step3 : レーザーソードをON/OFFする6 まとめ 概要 前回はRobo …

【Unity】キャラクターが近づいたら自動ドアが開閉するようにする

Contents1 概要1.1 実現例2 使用アセット3 Step 1 : Doorオブジェクトの配置4 Step2 : Colliderの設定5 Step3 : アニメーションとスクリプト 概要 U …

【Unity】キャラクターにSimpleAnimationでアニメーションをつける

Contents1 概要2 環境3 使用するキャラクタオブジェクト4 Step1 : Animationの 入手5 Step2 : SimpleAnimationの取得6 Step3 : Inspec …

言語切り替え

カテゴリー