3.7.2 xr 插件摄像机坐标角度

最近在做xr相关的内容。

以下是节点结构
image
其中XR HMD是摄像机。

我们有个需求,就是可能突然间需要摄像机变到某个位置,某个角度。
在web,我直接设置摄像机的坐标和角度,都是对的。
但是在xr设备里,这样设置根本不生效。
加了日志看了下,就算我设置了相机的属性,但是属性值仍回被某个不知名的地方改回去。
【摄像机的本地坐标一直在变化,不知道是哪里控制的】
【看ContinuousTurner,ContinuousMover,控制的节点明明都是xragent啊】

所以我只能用控制xr agent来控制摄像机了,通过知道相机的本地矩阵的逆矩阵C,然后把最终位置的属性乘以C,来求得xragent的属性。可是本地矩阵是undefine的值。。。。

求大神帮忙看看 @iwae

相机的本地坐标是由头显控制的,所以每帧都会更新。
如果需要改变相机角度和坐标,是需要改xr agent的,XR HMD的本地位姿是由头显控制的。
本地矩阵undefine是不是调用错了?这个应该是可以正常获取的

您说的头显控制是指ContinuousMover吗??

image
反正mover这个控制的好像也是xragent的坐标呢?

本地矩阵undefined是因为引擎没有提供get方法,只提供了set。

咱们xr插件没提供直接设置agent来控制相机的吗 哈哈

image 头显是通过posetracker控制的。
本地矩阵确实不能直接get,可以通过矩阵的fromRTS计算得到,然后再算出xragent的位姿就可以了

好的,多谢了,我们自己算一下。

@yuanyi.lin 大佬,遇到一个问题

我们有个包含几个按钮的ui想跟着摄像机走,所以我们就直接挂在摄像机下。

但是在xr设备跑起来以后, 这几个按钮就特别难用射线触碰到,而且偏移也特别严重。

还有个现象:
我们在非摄像机节点外还有两个ui按钮A【更远】和B【更近】,这两个ui按钮可以很好的触碰到。我们在摄像机加的按钮ui,会被A挡住,而且会把B挡住,这个特别特别奇怪。。。。

@yuanyi.lin 今天又发现一个手柄事件的异常情况。
在点击手柄上的按钮时,我们通过 Input.EventType.HANDLE_INPUT 来监听事件。
我们发现,点击按钮时,有概率会收到两次事件,不知道是不是因为有长按这个效果而引发的。
特别是我设置了xragent的坐标后,这几个按钮收到两次的概率变大了,甚至有时候还会收到3/4次这个相应。
请大佬帮忙看看。

ui跟随相机的问题,可以使用cameraFollowing组件,在UI父节点上挂载就可以,具体使用可以xr参考案例里的main-xr-ui的UI-eye节点。
ui遮挡的问题,是因为目前的3dui渲染是按照节点顺序来的,上层节点的就会最早渲染,会被遮挡,目前需要自行调整顺序,或者等后续版本发布解决这个问题。如果急需的话,可以给你提前发最新的脚本,参照修改一下就行。

手柄事件,因为考虑到需要有长按和value值的情况,所以只要有手柄有信号我们都会发送事件,这个只需要针对按钮的类型和值做一个筛选判断逻辑即可

我看了下demo,我把ui-eye显示后,仍然看不到。
我们是想ui一直能被摄像机看着,ui一直处在摄像机的正前方,不管摄像机怎么转动,都是正视的感觉。

遮挡的新版本,麻烦给一下吧,新版本的话估计也不会立刻就换的。

现在的值应该都是按下而产生的回调。
对这个长按的问题我有个猜想:
如果按的时间不到限定的值,是不是不应该当做是长按而往外发事件呢,只有按住的时间到了某个限定的值,才被当做是长按而往外发事件。
谢谢大佬的回复

如果不是放在摄像机节点,我们昨天也有个解决方案,同样也是把ui的内容放在根节点下,然后在相机下也放了一个节点A,最后只要在update里设置ui的世界坐标和世界旋转和节点A的一样就行了。

主要是为啥不能直接放在摄像机下呢?案例里面也是放根节点。

ui-eye这个我刚试了一下,是可以正常显示的,会一直显示在相机正前方,也可以正常交互
image
就是这个UI会一直跟随相机显示的

这个我们是为了给用户来处理长按的事件,并不是我们定义了长按,用户每帧都能收到事件后,用户自行去根据时长定义的

放在相机下的话,ui节点下的碰撞盒位姿可能不会更新,就导致了你说的射线很难碰到,其实是碰撞盒没有跟着动


运行起来显示不了呀。。。把following组件禁用后倒是能正常显示呢。


看坐标角度设置,也应该是看不到的。

我们的是3.72版本的,您也是这个版本吗?

哦哦,所以这个暂时不改了吗,就只能这么处理了吗?

刚才看了下,在web和模拟器下确实有这个问题,在真机下是正常的,这个模拟器的处理我们后面会优化哈

image 把ui的这个Y值改小就可以了哈,web的角度比较小,太高了看不到

我打印了手柄事件点一下响应三次的log信息。
事件类型和value都是一样的。
这个该怎么处理呢,不像touch事件有startmove和end的。

image