为什么Unity RayCastHit不能比较标签



我想让游戏中的准星检测按钮,所以大多数教程建议使用RaycastHit.

我不能让RaycastHit检测比较标签无论我做了什么。我试着用Collider,结果还是一样的。

下面是代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
public class MainMenu : MonoBehaviour
{
private RaycastHit _hit;
public int distanceofRaycast = 10;
public Camera playerCamera;
void Update()
{
Ray ray = playerCamera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
if(Physics.Raycast(ray, out _hit, distanceofRaycast))
{
if(Input.GetButtonDown("Fire1") && _hit.transform.CompareTag("StartButton"))
{
Debug.Log("Start");
Play();                
}
else if(Input.GetButtonDown("Fire1") && _hit.transform.CompareTag("QuitButton"))
{
Debug.Log("Quit");
Quit(); 
}
}
}
public void Play()
{
SceneManager.LoadScene("set01");
}
public void Quit()
{
Application.Quit();
}
}

_hit.transform指向刚体,如果存在,hit.collider.transform是实际的转换,有Collider组件附加,这是命中(这可以是你的层次结构中的一个子)

。变换和hit.collider

你标记了正确的转换吗?

要调试你的问题,我建议添加这个调试日志,这样你就可以看到你的鼠标悬停:

if (Physics.Raycast(ray, out _hit, distanceofRaycast))
{
String tr_name = _hit.transform.name;
String tr_tag = _hit.transform.tag;
String col_name = _hit.collider.transform.name;
String col_tag = _hit.collider.transform.tag;
Debug.Log("hit this object:" + tr_name + " (tag: " + tr_tag + "), on this collider: " + col_name + "(tag: " + col_tag + ")");
}

不需要按下鼠标按钮就可以记录,这样你就可以看到你点击的对象是否打印了正确的标签。

最新更新