質問: **Unity3D** ``` if (Physics.Raycast(Ray ray, out RaycastHit hit, float distance)){} else { Debug.Log("Exit"); } ``` これでRaycastが外れたときに*Exit*と表示されるようになったのですが、このコードだと 外れたときに別のオブジェクトにRayが当たると実行されません。 Exitされる状況になったとき、ほかのオブジェクトに触れても前のオブジェクトと違っていたらExitをしっかり実行するようにしたいです。 どうすればいいのか見当もつきませんorz どなたかいい案はありますか?
回答: ### Raycastが外れたときにExitと表示したいオブジェクトが1つの場合 一番シンプルでコストが低いのはタグを見る方法だと思います。 まず、Raycastが外れたときにExitと表示したいオブジェクトにタグを設定します。 ここでは`Character`としました。 !Charactor あとは、コード内で判定するだけです。 下記コードではタグが`Character`ではない場合、常にExitと表示されるのでそこはうまく処理してください。 ``` if (Physics.Raycast(Ray ray, out RaycastHit hit, float distance)) { //タグがCharactorでない場合もExitとする if (hit.collider.tag != "Character") { Debug.Log ("Exit"); } } else { Debug.Log("Exit"); } ``` ### Raycastが外れたときにExitと表示したいオブジェクトが複数の場合 上記コードの`RaycastHit`ですが`hit.collider.gameObject`といった形でヒットしたオブジェクトの情報を取得できるのでそれを利用すると良いと思います。一番楽なのがキャッシュしておいて比較するといいと思います。 ``` GameObject ForcusObj; (省略) if(ForcusObj != hit.collider.gameObject) { Debug.Log ("違うオブジェクト"); } ForcusObj = hit.collider.gameObject; ``` あとは、タグとオブジェクトチェックを合体させると実現できると思います。