Unity Network HTC Vive和Oculus

时间:2018-02-12 06:58:01

标签: c# unity3d oculus unity-networking htc-vive

我想将Vive和Oculus 3d模型的位置与Vive / Oculus控制器位置同步。最后,我想看看来自Vive的Oculus和Oculus控制器的Vive控制器。

到目前为止我做了什么:

如果Vive是服务器:从Oculus我看到Vive模型移动,一切都很好,但是从Vive我看不到Oculus控制器在移动。

如果Oculus是服务器:从Vive我看到Oculus模型正在移动,但形成Oculus我看不到Vive控制器在移动。

实现:

我有4个预制件:

  • Vive控制器离开
  • Vive控制器右侧
  • Oculus控制器离开
  • Oculus controller right

所有人都有网络身份:本地玩家权限和网络转换

播放器上有下一个脚本:

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],但它没有用。

0 个答案:

没有答案