ニュース

Top  >   15. C#とMonoBehaviour  >   Q, 物がぶつかった瞬間にスクリプトを動かしたい

Q, 物がぶつかった瞬間にスクリプトを動かしたい

2026/03/18

メインコンテンツへスキップ
< すべてのカテゴリに戻る

A,結論

OnCollisionEnter メソッドを使用します。

原因 / 背景

  • Collider同士が物理的に接触した瞬間にUnityから自動で呼ばれるイベントだからです。
  • Transform の直接書き換えと物理演算を混ぜると不安定になりやすい点にも注意してください。

実装 / 手順

  1. void OnCollisionEnter(Collision collision) { } 内に処理を書きます。
  2. Collider、Rigidbody、FixedUpdate の関係を意識して設定を見直します。

サンプルコード

using UnityEngine;

public class CollisionEventReceiver : MonoBehaviour
{
    [SerializeField] private string targetTag = "Player";
    [SerializeField] private bool disableAfterHit;

    private void OnCollisionEnter(Collision collision)
    {
        if (!string.IsNullOrEmpty(targetTag) && !collision.collider.CompareTag(targetTag))
        {
            return;
        }

        Debug.Log($"衝突を検知: {collision.collider.name}");

        ContactPoint contact = collision.GetContact(0);
        Debug.DrawRay(contact.point, contact.normal, Color.red, 1.0f);

        if (disableAfterHit)
        {
            enabled = false;
        }
    }
}

※ 実機確認が必要な項目は、Editor だけで判断せず対象デバイスでも必ず動作確認してください。

難易度:Level 2(初心者)
対象プラットフォーム:PC,Android,iOS,Visual Studio,Unity
関連キーワード:スクリプト,判定,検知,衝突

Level 1-2 向けバナー