最近在想激光与UGUI怎么互交,我脑袋的第一反映是射线与UI添加collider碰撞,获取UI的Button组件,执行相应事件。我也这样写了,但效果确实不咋的。没办法只能重写了。我在社区看见有人说可以用UI系统自带的PointerEventData可以实现功能,于是就花时间看了看,有点收获在此记录一下。
1.创建玩家可以看见的激光
这个我就不写了,与网上搜出来的也差不多,
2.创建UICamrea
因为Canvas 的World Space 需要一个Event Camrea 来出来UI的事件
定义一个相机UICamrea,具体的代码如下
3.创建射线
定义 :
private PointerEventData[] pointEvents;
并在Start初始化
pointEvents = new PointerEventData[2];
需要添加
using UnityEngine.EventSystems;
同时创建的类需要继承BaseInputModule
同时 要提醒重写Process()
public override void Process()
{
print(GUIRaycast(0));//测试
}
GUIRaycast的具体代码
需要把画布上的标准接收器给禁用掉
以上就可以用VR手柄的射线检测到UI。
网友评论