我想将 Vive 和 Oculus 3d 模型的位置与 Vive/Oculus 控制器的位置同步。最后,我想看看 Oculus 的 Vive 控制器和 Vive 的 Oculus 控制器。
到目前为止我所做的:
如果 Vive 是服务器:从 Oculus 我看到 Vive 模型在移动,一切都很好,但从 Vive 我看不到 Oculus 控制器在移动。
如果 Oculus 是服务器:在 Vive 中,我看到 Oculus 模型在移动,但在 Oculus 中,我看不到 Vive 控制器在移动。
执行:
我有 4 个预制件:
- Vive 控制器左侧
- Vive 控制器右侧
- 左眼控制器
- Oculus控制器右侧
都有网络身份:本地玩家权限和网络转换
下一个脚本在播放器上:
void Update()
{
if (!isLocalPlayer)
{
return;
}
if (IsVive())
{
CmdControllerPositionSyncVive();
}
else if (IsOculus())
{
CmdControllerPositionSyncOculus();
}
}
在这里,我检查 Hierarchy Vive SDK 是否可见或 Oculus SDK 是否可见,并同步可见的位置。
[Command]
public void CmdControllerPositionSyncVive()
{
if (_leftControllerSource != null && _viveControllerLeft != null)
_viveControllerLeft.transform.position = _leftControllerSource.transform.position;
if (_rightControllerSource != null && _viveControllerRight != null)
_viveControllerLeft.transform.rotation = _leftControllerSource.transform.rotation;
if (_rightControllerSource != null && _viveControllerRight != null)
_viveControllerRight.transform.position = _rightControllerSource.transform.position;
if (_leftControllerSource != null && _viveControllerLeft != null)
_viveControllerRight.transform.rotation = _rightControllerSource.transform.rotation;
}
[Command]
public void CmdControllerPositionSyncOculus()
{
if (_leftControllerSource != null && _oculusControllerLeft != null)
_oculusControllerLeft.transform.position = _leftControllerSource.transform.position;
if (_rightControllerSource != null && _oculusControllerRight != null)
_oculusControllerLeft.transform.rotation = _leftControllerSource.transform.rotation;
if (_rightControllerSource != null && _oculusControllerRight != null)
_oculusControllerRight.transform.position = _rightControllerSource.transform.position;
if (_leftControllerSource != null && _oculusControllerLeft != null)
_oculusControllerRight.transform.rotation = _rightControllerSource.transform.rotation;
}
在这里,我将我的 3d 模型的位置和旋转与我的控制器同步。
我像这样实例化我的预制件:
[Command]
void CmdInstantiteOculusAvatar()
{
var left = (GameObject)Instantiate(OculusLeftControllerPrefab);
var right = (GameObject)Instantiate(OculusRightControllerPrefab);
NetworkServer.Spawn(left);
NetworkServer.Spawn(right);
}
[Command]
void CmdInstantiteViveAvatar()
{
var left = (GameObject)Instantiate(ViveLeftControllerPrefab);
var right = (GameObject)Instantiate(ViveRightControllerPrefab);
NetworkServer.Spawn(left);
NetworkServer.Spawn(right);
}
我是初学者,所以如果您对这里发生的事情有一些想法,请提供帮助。我认为服务器不会向客户端发送数据,但我不确定,也不知道该怎么做。我已经尝试使用 [ClientRpc] 但它没有用。