尝试使用光线投射进行触摸屏交互(一个错误)

Trying to use raycasting for touch screen interactions (A mistake)

所以,我不习惯光线投射,这是我第一次使用它。基本上我试图用它来模拟鼠标点击,因为这个程序是为触摸屏设计的,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);
            }
        }
    }

}

even overriding UI elements no matter where I tap.

这个问题和你的其他问题可以通过 而不是 完全使用光线投射来解决。只需实现 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);
    }
}