2017-07-02 10 views
1

私はオブジェクトを破壊するためにイベントOnTriggerStay2Dを使用しています。なぜなら、私はOnTriggerEnter2Dの代わりにこれを使用している理由は、私がオブジェクトをタッチスクリーンでドラッグしているからです。 、私が持っている問題はOntriggerStay2Dは、常にそれが解放された後、その時々のオブジェクトが破壊されていない、と呼ばれていませんし、それが動作するように再び移動させなければならないということですが、私はOnTriggerStayがある Unity3D onTriggerStayを使用して

ユニティ

からdocummentationを読みましたトリガーに触れている他のすべてのColliderのほぼすべてのフレームを呼び出しました。

public void OnTriggerStay2D(Collider2D other) 
{ 
     if (gameObject.tag == other.tag) { 

      Destroy (other.gameObject); 

    } 
} 

私は私がオブジェクトを解放毎回OntriggerStay2D呼び出すためにどのような方法がありますかどうかを知りたいと思います。おかげさまで

編集 コード

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

    public class Drag : MonoBehaviour { 

     private bool draggingItem = false; 
     private GameObject draggedObject; 
     private Vector2 touchOffset; 

     void Update() 
     { 
      if (HasInput) 
      { 
       DragOrPickUp(); 
      } 
      else 
      { 
       if (draggingItem) 
        DropItem(); 
      } 
     } 

     Vector2 CurrentTouchPosition 
     { 
      get 
      { 
       Vector2 inputPos; 
       inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); 
       return inputPos; 
      } 
     } 

     private void DragOrPickUp() 
     { 

      var inputPosition = CurrentTouchPosition; 

      if (draggingItem) 
      { 

       draggedObject.transform.position = inputPosition + touchOffset; 

      } 
      else 
      { 

       RaycastHit2D[] touches = Physics2D.RaycastAll(inputPosition, inputPosition, 0.5f); 
       if (touches.Length > 0) 
       { 
        var hit = touches[0]; 
        if (hit.transform != null && hit.rigidbody != null) 
        { 
         draggingItem = true; 
         draggedObject = hit.transform.gameObject; 
         touchOffset = (Vector2)hit.transform.position - inputPosition; 
        } 
       } 
      } 
     } 

     private bool HasInput 
     { 
      get 
      { 

       return Input.GetMouseButton(0); 
      } 
     } 

     public void DropItem() 
     { 
      draggingItem = false;  

     } 

    } 
+0

オブジェクトをドラッグすると「OnTriggerStay2D」は何をする必要がありますか? – Programmer

+0

私はオブジェクトを別のものに衝突させるためにオブジェクトをドラッグしていますが、衝突したときにそれを破壊したくないので、まだ触っていたら解放したいと思います。 –

+0

これは今や理にかなっています。ドラッグコードも追加してください。それはあなたに答えを与えるのに役立ちます。 – Programmer

答えて

2

をドラッグこのためOnTriggerStay2Dを使用しないでください。 OnTriggerEnter2DOnTriggerExit2D関数で真と偽に設定するブール変数を使用できます。

bool isTouching = false; 

void OnTriggerEnter2D(Collider2D collision) 
{ 
    Debug.Log("Entered"); 
    if (collision.gameObject.CompareTag("YourOtherObject")) 
    { 
     isTouching = true; 
    } 
} 

void OnTriggerExit2D(Collider2D collision) 
{ 
    Debug.Log("Exited"); 
    if (collision.gameObject.CompareTag("YourOtherObject")) 
    { 
     isTouching = false; 
    } 
} 

オブジェクトが解放されたときあなたは今isTouching変数を確認することができます。私はあなたがあまりにもモバイルデバイス上で、これを使用しているので、レイキャストを使用し、Input.GetMouseButton(0);あなたの現在のコードを放棄示唆

if(isTouching){ 
.... 
} 

注意。あなたはこれもモバイルフレンドリーに作られているので、Unityの新しいEventSystemを使用するべきです。

2Dコライダーを使用しているので、#7からthis答えを参照してください。

Hereは、新しいEventSystemでスプライトをドラッグする方法の完全な例です。上記の答えと組み合わせると、もっと良い解決策が得られます。

+0

おかげさまで、OnTriggerStay2Dを削除し、完全に機能すると言ったようにブール値を使用するだけですが、改善するための推奨事項を検討していますが、本当にありがとうございます。 –

+0

ニース。私が助けてくれたことをうれしく思っており、私が言及したEventSystemを確実に使用しています。 – Programmer

関連する問題