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