私はこれについてほぼすべての答えをチェックしましたが、それらはほとんど単純なエラーと間違いでした。私の問題は、他のリジッドボディと衝突しても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
}
}
}
}
「衝突!!!」すらありませんメッセージが表示されます。使い方が間違っているのか、何か忘れてしまったのでしょうか?
2Dコライダーとリジッドボディを使用していますか?その場合は、OnCollisionEnterの代わりにこの関数を使用してください
void OnCollisionEnter2D(Collision2D coll)
{
Debug.Log(coll.gameObject.tag);
}
これが私がすることです:
これで、OnCollisionEnterが機能します。これがお役に立てば幸いです。
衝突マトリックス([編集]-> [プロジェクト設定]-> [物理])で、オブジェクトが属するレイヤー間の衝突が除外されていないことを確認する必要があります。
また、他のオブジェクトにコライダー、リジッドボディがあり、オブジェクト自体またはこれらのコンポーネントのいずれかが無効になっていないことを確認する必要があります。
これを試して
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();
}
}
}
パラメータのクラス名を入力し忘れたためです。これはエラーを発生させず、機能しません。例えば:
OnCollisionEnter(Collider other) //this is wrong
OnCollisionEnter(Collision other) //this is correct
同じオブジェクトにスクリプトをアタッチするだけで、そのオブジェクトが衝突を検出します。