にしのクエスト2

情報処理技術者試験と資格学校講師の日常

20221224103753

Unityで学ぶプログラミング TIPS (13)OnCollisionExitが反応しない問題

OnCollisionEnterが衝突した時の処理。

OnCollisionExitは衝突がなくなったらの処理・・・をするの
ですが、ある条件のときにExitが反応しないで泣いたので、
その対処法を書きたいと思います。

失敗例です

モンスターが歩いてきて、センサーに触れるとモンスターが
消える。で、メッセージが出るプログラムです。
すげえ簡略化してるので申し訳ないですが、うまく行かない
例です。

//モンスター側.cs
//2 フラグが立ったらモンスター消滅
Update(){
if(flag==1){
Destroy(gameObject);
}
}


//センサー側.cs

//変数は両側で読めることにしてくだせえ
public int flag=0;

//1 衝突したらフラグを立てる
OnCollisionEnter(){
flag=1;
}


//3 センサーに触れるものがいなくなったらメッセージ
OnCollisionExit(){

DebugLog("いなくなったよ!");

flag=0;

}

さて、これだと消えはするんですが。
メッセージが出てきません。また、フラグも戻りません。
なんででしょうか?

修正したもの

結局、デストロイしちゃうとOnCollision Exitが反応しな
いっぽいです。なので、一旦どっかに移動させてから消す
ようにしました。

//モンスター側.cs
//2 フラグが立ったらモンスター消滅
Update(){
if(flag==1){

transform.position=new Vector3(0,99,0);
Destroy(gameObject);
}
}


//センサー側.cs

//変数は両側で読めることにしてくだせえ
public int flag=0;

//1 衝突したらフラグを立てる
OnCollisionEnter(){
flag=1;
}


//3 センサーに触れるものがいなくなったらメッセージ
OnCollisionExit(){

DebugLog("いなくなったよ!");

flag=0;

}

こんな単純なことなんですが、かなり困惑しました。


今日も小ネタですいません。

それではよきプログラミングライフを!
またね。