0

我想将 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] 但它没有用。

4

0 回答 0