SteamVR2.0 --- UGUI交互

查了很多UI交互的资料,除了官方案例之外,大多都写的很乱。于是自己写了一个十分简单的方法实现UI的交互,今天发出来共享一下。

大体思路:
第一步:画一条人眼可见的射线(使用LineRenderer,起点是手柄的中心点,方向是手柄的前方,射线长度可以自定义)

第二步:射线碰撞UI上的碰撞器(使用Physics.RaycastAll(),这个函数自身会发射一条人眼不可见的射线跟UI碰撞,并返回RaycastHit[] 数组,UI在最前面,raycasthit[0]就是UI)

第三步:得到raycasthit[0]后就可以写自己的UI业务代码了。

具体代码如下:

private RaycastHit[] hits;//UI必须要有碰撞器可以没有刚体

 private  LineRenderer m_Line;

    private void Start()

    {

 if (m_Line == null)

        {

            m_Line = gameObject.AddComponent<LineRenderer>();

            Keyframe[] ks = new Keyframe[2];

            ks[0] = new Keyframe(0, 0.007f);

            ks[1] = new Keyframe(1, 0.007f);

            m_Line.widthCurve = new AnimationCurve(ks);

            m_Line.material = new Material(Shader.Find("Unlit/Color"));

            m_Line.material.SetColor("_Color", new Color32(0, 255, 0, 255));

            m_Line.SetPosition(0, Vector3.zero);//启动时候先生成射线,然后在update中实时刷新

                                                                       //0代表射线的起点

            m_Line.SetPosition(1, Vector3.zero);//1代表射线的终点

            }

        }

    void Update()

    {

      m_Line.SetPosition(0, transform.position);//不停刷新手柄的射线

        m_Line.SetPosition(1, transform.forward * 1000);//长度可以自己修改

        hits = Physics.RaycastAll(transform.position, transform.forward, 100.0F);//系统和人均不可见的射线 ,长度可以自己修改 

            for (int i = 0; i < hits.Length; i++)

        {

            RaycastHit hit = hits[i];

            print("碰撞物体是:" + hit.transform.name.ToString();

    }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值