2016-06-13 2 views
0

Donc, je ne suis pas habitué à raycasting, c'est la première fois que je l'utilise. Fondamentalement, j'essaie de l'utiliser pour imiter un clic de souris, car ce programme est destiné aux écrans tactiles, et les éléments de l'interface utilisateur ne sont pas une option. Le code est attaché à un objet de jeu 3D dans le monde, et quand je tape sur l'écran tactile où je le vois, j'en ai besoin pour déclencher et charger une scène différente. Cependant, le code semble toujours déclencher, même en remplaçant les éléments de l'interface utilisateur, peu importe où je tape. La plupart des gens semblent avoir des problèmes avec les raycasts ne pas frapper, mais j'ai le problème inverse. Toute aide serait appréciée.Raycasting toujours frapper

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

Votre question ne décrit même pas votre problème. Essayez-vous de détecter le clic sur l'image-objet? sur l'image de la toile? sur un maillage 3D? qu'est-ce qui se passe actuellement que vous n'aimez pas? – Programmer

+0

Je l'ai édité et j'espère l'a clarifié. – MechaScoots

+0

Et j'ai fourni une réponse. Ça a marché? – Programmer

Répondre

1

éléments d'interface utilisateur, même prépondérants, peu importe où je tape.

Ce problème et le reste de vos problèmes peuvent être résolus par pas en utilisant à-tout raycast. Il suffit d'implémenter IPointerClickHandler et de surcharger la fonction OnPointerClick. Après cela, attachez PhysicsRaycaster à l'appareil photo.

Le code ci-dessous fera tout cela pour vous, y compris la pièce jointe PhysicsRaycaster. Il suffit de joindre le script à l'objet 3D que vous voulez détecter le clic et c'est tout.

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); 
    } 
}