我想将Vive和Oculus 3d模型的位置与Vive / Oculus控制器位置同步。最后,我想看看来自Vive的Oculus和Oculus控制器的Vive控制器。
到目前为止我做了什么:
如果Vive是服务器:从Oculus我看到Vive模型移动,一切都很好,但是从Vive我看不到Oculus控制器在移动。
如果Oculus是服务器:从Vive我看到Oculus模型正在移动,但形成Oculus我看不到Vive控制器在移动。
实现:
我有4个预制件:
所有人都有网络身份:本地玩家权限和网络转换
播放器上有下一个脚本:
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],但它没有用。