web-dev-qa-db-ja.com

OnCollisionEnterはUnityで呼び出されません

私はこれについてほぼすべての答えをチェックしましたが、それらはほとんど単純なエラーと間違いでした。私の問題は、他のリジッドボディと衝突してもOnCollisionEnterが呼び出されないことです。

これが呼ばれない部分です:

 void OnCollisionEnter(UnityEngine.Collision col) {
        Debug.Log("collision!!!");
        foreach(ContactPoint contact in col.contacts) {
            //checking the individual collisions
            if(contact.Equals(this.target))
            {
                if(!attacking) {
                    Debug.Log("hitting target");
                } else {
                    Debug.Log("dying");
                    //engage death sequence
                }
            }
        }
    }

「衝突!!!」すらありませんメッセージが表示されます。使い方が間違っているのか、何か忘れてしまったのでしょうか?

9
Erik Putz

2Dコライダーとリジッドボディを使用していますか?その場合は、OnCollisionEnterの代わりにこの関数を使用してください

void OnCollisionEnter2D(Collision2D coll)
    {
        Debug.Log(coll.gameObject.tag);

    }
42
Khayam Gondal

これが私がすることです:

  1. ターゲットと衝突させたいオブジェクトに、非キネマティックリジッドボディとメッシュコライダーがあることを確認してください。私の打者オブジェクトは立方体であり、そのコライダーをメッシュコライダーに変更するだけです
  2. メッシュコリダーインスペクターでは、凸面を有効にしていることを確認してください。メッシュコライダーインスペクターの詳細をご覧ください こちら

これで、OnCollisionEnterが機能します。これがお役に立てば幸いです。

1
rudy

衝突マトリックス([編集]-> [プロジェクト設定]-> [物理])で、オブジェクトが属するレイヤー間の衝突が除外されていないことを確認する必要があります。

nity Docs

また、他のオブジェクトにコライダー、リジッドボディがあり、オブジェクト自体またはこれらのコンポーネントのいずれかが無効になっていないことを確認する必要があります。

1
Alex

これを試して

http://docs.unity3d.com/Documentation/ScriptReference/Collider.OnCollisionEnter.html

using UnityEngine;
using System.Collections;

public class Example : MonoBehaviour {
  void OnCollisionEnter(Collision collision) {

    foreach (ContactPoint contact in collision.contacts) {
        Debug.DrawRay(contact.point, contact.normal, Color.white);
    }

    if (collision.relativeVelocity.magnitude > 2){
        audio.Play();        
    }

  }
}
1
Julio Contreras

パラメータのクラス名を入力し忘れたためです。これはエラーを発生させず、機能しません。例えば:

OnCollisionEnter(Collider other) //this is wrong
OnCollisionEnter(Collision other) //this is correct
0
Kursat Turkay

同じオブジェクトにスクリプトをアタッチするだけで、そのオブジェクトが衝突を検出します。

0
strangedk