Unity Raycast UI按钮并在点击事件上调用它

时间:2018-03-16 13:26:38

标签: unity3d onclick raycasting

有没有办法从光线投射中调用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事件,或者我是否必须重做我的整个脚本而不是用于点击事件?

2 个答案:

答案 0 :(得分:0)

我相信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();

如果我误解了您的查询,请告诉我。

答案 1 :(得分:0)

你打了一个GameObject,得到了实现OnPointerClick事件的组件列表

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

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

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

那应该做的工作