2016-06-13 3 views
0

だから私はレイキャスティングに慣れていない、これまでに使ったのは初めてのことだ。基本的には、このプログラムはタッチスクリーン用であり、UI要素はオプションではないため、マウスクリックを模倣するために使用しようとしています。コードは世界の3Dゲームオブジェクトに添付されています。私はそれを見るタッチスクリーンをタップすると、別のシーンをトリガーしてロードする必要があります。しかし、このコードはどこでタップしてもUI要素をオーバーライドしても、常に発火しているようです。ほとんどの人は、レイキャストに問題はないようですが、私は反対の問題があります。どんな助けもありがとう。レイキャスティングはいつもヒット

void Update(){ 
foreach (Touch touch in Input.touches) { 
     if (touch.phase == TouchPhase.Began) { 
      Ray ray = Camera.main.ScreenPointToRay (touch.position); 
      RaycastHit hit; 
      if (Physics.Raycast (ray, out hit)) { 
       if (hit.collider.gameObject) 
       SceneManager.LoadScene (buttonIdentifier); 
      } 
     } 
    } 

}

+0

あなたの質問にはあなたの問題については説明されていません。スプライトのクリックを検出しようとしていますか?キャンバスイメージで? 3Dメッシュで?あなたが好きではない現在起こっていることは何ですか? – Programmer

+0

私はそれを編集し、うまくいきました。 – MechaScoots

+0

そして私は答えを出しました。それは動作しましたか? – Programmer

答えて

1

でも上書きUI要素Iはタップどんなに。

この問題とあなたの問題の残りの部分はで、すべてのレイキャストを使用してないによって解決することができます。単にIPointerClickHandlerを実装し、OnPointerClick関数を上書きします。その後、カメラにPhysicsRaycasterを添付してください。

PhysicsRaycasterを含む以下のコードはすべてあなたのために行います。クリックを検出したい3Dオブジェクトにスクリプトを添付すれば、それだけです。

using UnityEngine; 
using System.Collections; 
using UnityEngine.UI; 
using UnityEngine.EventSystems; 
using UnityEngine.SceneManagement; 

public class Clicker : MonoBehaviour, IPointerClickHandler 
{ 

    void Start() 
    { 
     Camera.main.gameObject.AddComponent<PhysicsRaycaster>(); 
    } 

    public void OnPointerClick(PointerEventData eventData) 
    { 

     Debug.Log("Clicked!"); 
     SceneManager.LoadScene(buttonIdentifier); 
    } 
} 
関連する問題