yaoling1997/OpenRDW

photon连接HTC vive设备问题

Opened this issue · 5 comments

您好,我最近在使用这个openRDW框架,发现使用photon实现多人重定向的时候,A用户的HTC vive设备没办法看到B用户的HTC vive设备的移动,没办法同步,找了很久也没发现问题在哪,想询问一下您问题所在,非常感谢!

您好,我最近在使用这个openRDW框架,发现使用photon实现多人重定向的时候,A用户的HTC vive设备没办法看到B用户的HTC vive设备的移动,没办法同步,找了很久也没发现问题在哪,想询问一下您问题所在,非常感谢!

您好,多人行走的网络设置具体可以参考wiki上的内容:https://github.com/yaoling1997/OpenRDW/wiki/Network-Setting。请问网络可以连接成功吗?因为数据传输需要通过photon那边的服务器,一般网络通信正常的话是可以进行多人重定向的。您也可以提供更具体一些的问题描述(文字或截图),以帮助更好地定位到出问题的地方。

您好,非常感谢您的回复,我再具体描述一下我的问题,目前是让两个用户进入一个photon的服务器房间,在两个用户使用键盘控制移动的时候,同步是正常的,在两个客户端都可以正常观察到两个用户的移动,我认为我的网络应该是成功连接的,通信正常,但是两个用户都使用头显设备控制的时候,当前用户的客户端就观察不到另一个用户的移动,只能看到这个用户在原地踏步,两个客户端都是这样。如果一个用户使用键盘控制,另一个用户使用头显控制,键盘端的用户可以看到头显端的移动,但是头显端无法看到键盘端的用户的移动,不知道问题在哪,在使用HMD控制的时候,是否还需要其他的配置,期待您的回复!

您好,非常感谢您的回复,我再具体描述一下我的问题,目前是让两个用户进入一个photon的服务器房间,在两个用户使用键盘控制移动的时候,同步是正常的,在两个客户端都可以正常观察到两个用户的移动,我认为我的网络应该是成功连接的,通信正常,但是两个用户都使用头显设备控制的时候,当前用户的客户端就观察不到另一个用户的移动,只能看到这个用户在原地踏步,两个客户端都是这样。如果一个用户使用键盘控制,另一个用户使用头显控制,键盘端的用户可以看到头显端的移动,但是头显端无法看到键盘端的用户的移动,不知道问题在哪,在使用HMD控制的时候,是否还需要其他的配置,期待您的回复!

不应该呀,NetworkManager.cs脚本的逻辑会根据globalConfiguration.movementController的选择自动判断是仿真控制人物的头还是hmd控制的头,你可以检查一下globalConfiguration.movementController是否设置为了HMD。如果不行的话,可以进一步检查NetworkManager中的thisAvatarNetworkingTransform对象的transform是否发生了正常的变化。thisAvatarNetworkingTransform对象在成功加入房间后会被生成,用于网络同步虚拟人的位姿。
1.jpg

您好,非常感谢您的回复!我发现我的etworkManager中的thisAvatarNetworkingTransform对象的transform没有发生变化,想再确认一下thisAvatarNetworkingTransform是指本地的用户还是另一个用户的信息。我目前的配置如下:A用户:
(1)设置为HMD:
1
(2)Network Manager的Avatar Id设置为了0:
2
(3)Avatar Networking Transform Prefab中的AvatarNetworkingTransform设置为Avatar Id为0:
3
(4)Network Manager脚本改变了PhotonNetwork.NickName = "user1" :
4
(5)CameraRig是否需要开启:
5
(6)在这种状态下A用户的thisAvatarNetworkingTransform没有发生改变:
(另外发现在两个用户都是键盘模式的时候,这个thisAvatarNetworkingTransform也没有发生变化,但是两个客户端都是正常的,可以观察到对方的移动)
6
(7)debug信息输出的位置:
7

B用户的设置如下:
(1)设置为HMD:
d
(2)Network Manager的Avatar Id设置为了1:
b
(3)Avatar Networking Transform Prefab中的AvatarNetworkingTransform设置为Avatar Id为0:
a
(4)Network Manager脚本改变了PhotonNetwork.NickName = "user2" :
c
(5)在B用户视角下,A用户移动的时候只能看到有移动的动作,并没有发生移动,视频如下:

default.mp4

我不清楚我的设置是否正确,麻烦您帮我看看问题出现在哪里,非常感谢!!!

能否查看一下Redirected Avatar->Simulated Avatar->Head对象的Transform是否和Virtual对象的实时对齐?

thisAvatarNetworkingTransform是一个网络对象,如果你是拿两个头显在不同电脑上进行测试的话,应该可以看到两个thisAvatarNetworkingTransform,一个是自己创建的,一个是远程客户端创建的。

是自己客户端创建的话,其作用就是用于将自己avatar的虚拟和真实空间下的transform信息传递给其它客户端(通过它下面的“Virtual”和“Real”对象)。如果本地客户端的用户行走和网络同步没问题,那么“Virtual”和“Real”对象的Transform信息会实时变化。从你的截图中,我看到本地的“Virtual”和“Real”对象的Transform应该是正常变化的。

thisAvatarNetworkingTransform上面挂载了AvatarInfoForNetworking.cs脚本,用于网络同步。对于接收数据的情况(thisAvatarNetworkingTransform是由对方客户端创建的),该脚本会调用SynchronizedByNet.cs脚本中的UpdateTransform函数,将接收到的virtual Transform信息传递给虚拟人头部位姿表示(即Redirected Avatar->Simulated Avatar->Head对象),而Redirected Avatar->Body会根据HeadFollower.cs脚本通过UpdateManually函数控制实际看到的虚拟人跟随Head对象运动。

对于为什么虚拟人有行走动画而实际上没有移动,可能是Redirected Avatar->Body->avatarRoot上挂载的AvatarAnimatorController.cs脚本,收到的速度不为0导致的(walkSpeed>0.1)。说明在你移动的时候,redirectionManager.currPos变量(记录head 当前Transform)应该是会发生变化。至于为什么看到的情况下没有移动,建议输出一下该变量的具体数值进行观察。

如果redirected avatar是表示远程用户在本地的可视化,则不需要开启其对应的CameraRig,CameraRig用于接收头显的控制,只需对本地用户启用。