UGUI事件系统重构过程中出现NAN导致界面某些位置无法被触发的问题

        在做VR/AR的开发 ,在AR项目中,2D的UI是不支持的,即便是需要2D的,也只能通过3D的方式实现,即Canvas 要选择World Space 模式。 这时候UI上的事件也不能用默认的事件系统来响应了。  VR/AR 中,基本是没办法触摸屏幕来响应鼠标事件。基本都是使用的射线。

        使用射线要能够触发UGUI的事件系统,就要重构它的事件系统。这个不多介绍。。主要碰到的问题是一些坐标数据,通过  EventSystem调用之后,就变成了NAN 数据。 结果导致界面上某个角度区域的按钮不会被选中以及触发。

        NAN的错误不会爆红,导致不容易发现 。

       通常出现 NAN的方式为除以了0。

        比如在代码里除以了Time.deltaTime。 又恰好设置了 TimeScale 为0。

         NAN与其他数做运算,就会一直传递,比较烦人。

        平常写代码其实也不容易出现这个问题,很少会写出 除以0 这种情况,很多时候会从其他地方传递过来。 比如做局域网游戏时,使用Mirror类似的插件,一些数据经过服务器传递一次之后,回来就变成了NAN.   等等

      如果遇到了这种情况,但是源头的位置 又不在自己能处理的范围内,就只能在适合的位置进行截断。将NaN数据尽早剔除出去。

       可以用float.IsNaN(num)来判定。或者判定 num!=num  .因为NAN 跟NAN 用等号连接不会成立。不过这种写法会被脚本 误认为写错,给出警告

       

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值