2016-06-13 76 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元素,不管我在哪里挖掘。

此问题及其他问题可以通过而不是使用raycast解决。只需执行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); 
    } 
}