それを打っていないことを検出しますそして、そのフレーム "私はRayに打たれました"というメッセージを印刷します。 今、私はレイクキャストがもうそれに当たらないというゲームオブジェクトを知らせる必要があります。は、レイキャストが、私はレイキャストに見舞われたされたオブジェクトを知らせるためのSendMessageを使用し、もう
答えて
@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 ;
}
}
}
ありがとう、それはひどかった。しかし、私は何とかWHILEループでそれを行うことができます、私はそれがはるかに少ないコードを必要と思いますか?たとえば、オブジェクト "ヒット"にメッセージを送信し、そのオブジェクトにスクリプトを置く、(私は "ヒット"メッセージを受信する){do something} –
私はそれが少ないコードを必要とは思わない。私は3つの関数 'OnHitEnter'、' OnHitStay'と 'OnHitExit'を柔軟に使うことを提案しました。レイ・キャストの可能なターゲットに付けるスクリプトに、指定された関数を実装するだけです。必要ならば、 'OnHitEnter'では' true'に、 'OnHitExit'では' false'に設定した変数 'hit'をターゲットオブジェクト上に置くことができ、' Update'関数では 'if (ヒット){doSomething(); } ' – Hellium
ええ、私はすでにそれを行う、それはうまく動作します。ありがとう! –
- 1. レイキャスト用にnp.einsumを使用するベクトル化された範囲
- 2. CSGツリーを使ったレイキャスト
- 3. レイキャストはオブジェクトにヒットしません
- 4. レイキャスト検出は
- 5. レイキャストの問題を伴う移動オブジェクト
- 6. ユニティ5:レイキャストがブロックを見つけられない
- 7. Three.jsを使用して顔にレイキャスト
- 8. Unityは:パスは、レイキャスト
- 9. 、私のレイキャストは常に(0,0,0)の世界を指していることは、私は車のエンジンのスクリプトを研究開発をしていると私は障害物を避けるために、レイキャストを使用したい
- 10. Three.js:レイキャストは私のWebGLパノラマキューブのため、この例を使用していますと交差する
- 11. ユニティ - レイキャストの距離は変更されません
- 12. ユニティ:レイキャストがチャイルドオブジェクトのコライダーに当たらない
- 13. は、インタプリタは私たちがこのバグに見舞われたデーモン・スレッド
- 14. レイヤーマスクを使用して一時的にレイキャストを無視する
- 15. レイキャストまたはコライダーはUnity3Dの未レンダリングメッシュを検出しますか?
- 16. クリックまたはレイキャストを特定のアイテムにのみ許可する
- 17. レイキャストの仕組みを教えてもらえますか?
- 18. レイキャストはオブジェクト上の適切な場所を検出しません
- 19. レイキャストは、私は私のレイキャストが私のプレイヤーを無視するか、グランドのみを検出するために、どちらかの取得問題を抱えてい
- 20. 特定のポイントのThree.jsレイキャスト
- 21. レイキャスト、transform.forwardとの競合
- 22. スウィフト・ユニティ・レイキャスト相当物
- 23. レイキャストの位置を取得しても何もヒットしない場合でも
- 24. Python:ネストされたループは、私がそれらを望むように振舞いません
- 25. Unityの特定のレイヤーにレイキャスト
- 26. SendMessageまたはPostMessageコールの使用方法がわかりません
- 27. コアデータ:店を開くために使用されるモデルは、ストアを作成するために使用したものと互換性がありません
- 28. トピックに送信されたFCM通知はもう受信されません
- 29. 私はオブジェクトを格納し、管理するために配列を使うように頼まれました。
- 30. 誰がSendMessageを呼び出したのかを知るにはどうすればいいですか?
新しいオブジェクト!=最後のオブジェクト、またはレイ・キャストが今度は何かをヒットしなかった場合、オブジェクトにもうヒットしないことを伝えてください。 – Eddge