Unity

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

投稿日:

概要

親子関係を持つオブジェクトの親と子で異なる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

執筆者:


comment

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

関連記事

【Unity】 キーボードでキャラクターを操作する

Contents1 概要2 環境3 目的4 Step1 : コンポーネント類の追加4.1 Rigidbodyの追加4.2 Colliderの追加5 Step2 : Main Cameraの設定6 St …

UnityでPostProcessManager.cs(425,66): error CS0117: ‘EditorSceneManager’ does not contain a definition for ‘IsGameObjectInMainScenes’が出た時の対処法

Contents1 概要2 環境3 発生状況4 対処方法5 まとめ 概要 UnityのAsset StoreからParticle Packageをダウンロードしてimportしたところ、以下のエラーが …

【Unity】 Standard Assetsのダウンロードとインポート

Contents1 目的2 環境3 Step1 : Asset Storeを開く4 Step2 : Standard Assetsのインストール5 まとめ 目的 UnityでStandard pack …

【Unity】ゲームパッド(logicool F310)でキャラクターを操作する

Contents1 概要2 環境3 使用したゲームパッドについて4 Step1 : PCへのF310の接続5 Step2 : UnityのInput Managerの設定5.1 「走る」の設定5.2 …

【Unity】キャラクター操作その5 – レーザーソードで攻撃する

Contents1 概要2 Step1 : 攻撃Animationの調達3 Step2 : Animationの設定4 Step3 : SimpleAnimationへの紐づけ5 Step4 : 制御 …

言語切り替え

カテゴリー