【问题标题】:Trying to use raycasting for touch screen interactions (A mistake)光线投射总是命中
【发布时间】:2016-10-14 05:48:40
【问题描述】:

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

}

【问题讨论】:

  • 您的问题甚至没有描述您的问题。您是否正在尝试检测精灵的点击?在画布图像上?在 3D 网格上?您不喜欢目前正在发生的事情?
  • 我对其进行了编辑,希望能够澄清它。
  • 我提供了一个答案。成功了吗?
  • 是的,它工作得很好,或者看起来,无论如何。抱歉耽搁了,直到现在我才能检查。

标签: c# android unity3d raycasting


【解决方案1】:

无论我在哪里点击,甚至覆盖 UI 元素。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-10
    • 2018-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多