提问人:Kevin 提问时间:9/28/2023 更新时间:9/28/2023 访问量:68
Unity - 将鼠标悬停在对象上时显示十字准线
Unity - Make crosshair appear when hovering over object
问:
我已经这样做了几个小时,我试图让它成为这样,在拍摄光线投射时,它与带有特定标签的物体碰撞,十字准线被启用,如果没有击中带有标签的物体,它就会消失。这似乎比我预期的要难得多,我得到了奇怪的结果。
如果我先单击,则会出现十字准线,或者它确实有效并且十字准线不会再次禁用。下面是对象交互脚本的代码。请让我知道我做错了什么,谢谢!
public Collider clickObject;
public Animator m_Animator;
[SerializeField] public GameObject Crosshair;
private Ray _ray;
private RaycastHit _hit;
private bool _opened;
void Start()
{
m_Animator = gameObject.GetComponent<Animator>();
Crosshair.SetActive(false);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Click();
}
}
private void Click()
{
if (!clickObject) return;
if (!m_Animator) return;
_ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(_ray, out _hit))
{
if (_hit.collider.CompareTag("InteractObject"))
{
Crosshair.SetActive(true);
}
else
{
Crosshair.SetActive(false);
}
if (_hit.collider == clickObject)
{
if (_opened)
{
m_Animator.SetBool("isOpen", true);
_opened = false;
}
else
{
m_Animator.SetBool("isOpen", false);
_opened = true;
}
}
}
}
}
答:
2赞
Geode
9/28/2023
#1
好吧,似乎您只是在函数中进行光线投射并更新十字准线,只有在按下鼠标左键时才能调用该函数:Click()
private void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Click();
}
}
我认为,如果您希望十字准线在没有任何用户输入的情况下出现和消失,则希望将其称为每一帧。
评论
0赞
Kevin
9/28/2023
比如我应该创建一个名为“Active Cross Hair”的函数,当单击鼠标按钮时,它就会显示出来?但我也想让它在看物体时出现
0赞
KiynL
9/28/2023
#2
为此,我建议您在 RaycastPro 中使用 PointerRay。在这种情况下,您将可以很好地控制相机的图章和光线。
辅助事件,用于关闭或使用 Stamp 自动隐藏,无论您想要哪个。
将您的 CrossHair 作为图章添加到光线中,并按如下方式进行设置。确保已启用 AutoHide 和 stampOnHit。
评论