2017-08-31 10 views
0

それを打っていないことを検出しますそして、そのフレーム "私はRayに打たれました"というメッセージを印刷します。 今、私はレイクキャストがもうそれに当たらないというゲームオブジェクトを知らせる必要があります。は、レイキャストが、私はレイキャストに見舞われたされたオブジェクトを知らせるためのSendMessageを使用し、もう

+0

新しいオブジェクト!=最後のオブジェクト、またはレイ・キャストが今度は何かをヒットしなかった場合、オブジェクトにもうヒットしないことを伝えてください。 – Eddge

答えて

0

@Eddgeが正解です。ヒットしたゲームオブジェクトへの参照を格納することが最善の方法です。次のコードを確認してください:

public class Raycaster : MonoBehaviour 
{ 
    private bool hitting = false; 
    private GameObject hitObject; 

    void Update() 
    { 
     RaycastHit hit; 
     if (Physics.Raycast(transform.position, transform.forward, out hit)) 
     { 
      if(hit.transform.tag == "MyGameObject") 
      { 
       GameObject go = hit.transform.gameobject ; 

       // If no registred hitobject => Entering 
       if(hitObject == null) 
       { 
        go.SendMessage ("OnHitEnter"); 
       } 
       // If hit object is the same as the registered one => Stay 
       else if(hitObject.GetInstanceID() == go.GetInstanceID()) 
       { 
        hitObject.SendMessage("OnHitStay"); 
       } 
       // If new object hit => Exit last + Enter new 
       else 
       { 
        hitObject.SendMessage("OnHitExit"); 
        go.SendMessage ("OnHitEnter"); 
       } 

       hitting = true ; 
       hitObject = go ; 
      } 
     } 
     // No object hit => Exit last one 
     else if(hitting) 
     { 
      hitObject.SendMessage("OnHitExit"); 
      hitting = false ; 
      hitObject = null ; 
     } 
    } 
} 
+0

ありがとう、それはひどかった。しかし、私は何とかWHILEループでそれを行うことができます、私はそれがはるかに少ないコードを必要と思いますか?たとえば、オブジェクト "ヒット"にメッセージを送信し、そのオブジェクトにスクリプトを置く、(私は "ヒット"メッセージを受信する){do something} –

+0

私はそれが少ないコードを必要とは思わない。私は3つの関数 'OnHitEnter'、' OnHitStay'と 'OnHitExit'を柔軟に使うことを提案しました。レイ・キャストの可能なターゲットに付けるスクリプトに、指定された関数を実装するだけです。必要ならば、 'OnHitEnter'では' true'に、 'OnHitExit'では' false'に設定した変数 'hit'をターゲットオブジェクト上に置くことができ、' Update'関数では 'if (ヒット){doSomething(); } ' – Hellium

+0

ええ、私はすでにそれを行う、それはうまく動作します。ありがとう! –

関連する問題