Unity Raycast UI按钮并在点击事件时调用它[重复]

Posted

技术标签:

【中文标题】Unity Raycast UI按钮并在点击事件时调用它[重复]【英文标题】:Unity Raycast UI button and call its on click event [duplicate] 【发布时间】:2018-03-16 13:26:37 【问题描述】:

有没有办法从光线投射中调用 onclick 事件? 我将世界比例画布附加到一个带有按钮的图像的对象上。 当我用鼠标选择按钮时,我的事件函数被调用。 但是现在我正在尝试调整代码,这样我就可以避免一起使用鼠标了。

[SerializeField]
private Image cursor;
[SerializeField]
private LayerMask uI;

if (Input.GetButtonDown("Fire1"))
    
        Ray ray = Camera.main.ScreenPointToRay(cursor.transform.position);
        RaycastHit hit;
        if (Physics.Raycast(ray, out hit, 100,uI))
        
            Debug.Log(hit.collider); 
        
          

这是我用来将光线投射到世界空间画布的代码,它可以工作并返回图像,但我不确定现在如何调用 onclick 事件,因为我没有使用鼠标而是使用图像

有没有办法调用附加到我投射到的图像的 onclick 事件,还是我必须重做整个脚本而不是在点击事件上使用?

【问题讨论】:

你的问题的标题和正文似乎在说不同的东西。您只想检测对 UI 图像的点击?如果那是您要尝试做的(我怀疑),那么请查看副本。如果没有,请告诉我并解释您的问题 【参考方案1】:

当你点击一个 GameObject,获取它的实现 OnPointerClick 事件的组件列表

IPointerClickHandler clickHandler=collider.gameObject.GetComponent<IPointerClickHandler>();

一旦你有了那个引用(它不为空),你就可以调用

PointerEventData pointerEventData=new PointerEventData(EventSystem.current);
clickHandler.OnPointerClick(pointerEventData)

这应该做的工作

【讨论】:

【参考方案2】:

我相信 Button 组件也能满足您的需求。

但是要回答你关于光线投射的问题。

有没有办法从光线投射中调用 onclick 事件?

//Example raycast code
//Variables
public RayCastHit _Hit;
public LayerMask _RaycastCollidableLayers; //Set this in inspector, makes you able to say which layers should be collided with and which not.
public float _CheckDistance = 100f;

//Method
void PerformRaycast()
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    Physics.Raycast(ray, out _Hit, _CheckDistance + 0.1f, _RaycastCollidableLayers);
    if (_Hit.collider == null)
    
        Debug.Log("Raycast hit nothing");
        return null;
    
    GameObject go = _Hit.collider.gameObject;

您的光线投射击中一个对象并存储对该对象的引用。正如您在我的示例中看到的,您可以通过 RaycastHit 获取游戏对象。

当您拥有游戏对象时,您可以通过 GetComponent() 访问其上的任何脚本,这意味着您可以说。

GameObject go = _Hit.collider.gameObject;
OnClickScript ocs = go.GetComponent<OnClickScript>();
ocs.OnClick();

如果我误解了您的问题,请告诉我。

【讨论】:

以上是关于Unity Raycast UI按钮并在点击事件时调用它[重复]的主要内容,如果未能解决你的问题,请参考以下文章

unity区分点击在3D物体还是2D UI上

通过 RayCast Unity 与 UI 交互

Unity 在运行时更改 UI 图像颜色

Unity UI按钮不对点击或悬停做出反应

unity如何在事件被触发后在屏幕上显示text

Unity 射线检测(RayCast)