我实现了注释功能,类似于VR中的绘图。绘图是Unity路径,其形状取决于其轨迹。这就是真正的问题所在。我们正在使用PhotonTransformView
实时同步工程图,它可以同步轨迹的世界位置。但是here是输出。同步的图形看起来与原始图形有很大不同。
这是同步配置代码:
public void SetupSync(int viewId, int controllingPlayer)
{
if (PhotonNetwork.inRoom)
{
photonView = gameObject.AddComponent<PhotonView>();
photonView.ownershipTransfer = OwnershipOption.Takeover;
photonView.synchronization = ViewSynchronization.ReliableDeltaCompressed;
photonView.viewID = viewId;
photonTransformView = gameObject.AddComponent<PhotonTransformView>();
photonTransformView.m_PositionModel.SynchronizeEnabled = true;
photonView.ObservedComponents = new List<Component>();
photonView.ObservedComponents.Add(photonTransformView);
photonView.TransferOwnership(controllingPlayer);
}
}
我们如何使两个系统上的图形更加相似?我已经看到了人们能够完美同步这些案例的情况。选中this。他们在做什么?
答案 0 :(得分:1)
是的,PhotonTransformView不适合此操作。
您可以每隔x毫秒发送一次可靠的rpc,并附上自上次rpc以来的点列表。那是实时绘制图形的时间,当图形完成时,您可以在给定图形ID的情况下将整个图形定义缓存在数据库中。然后,玩家可以在完成绘制图纸后加入房间,甚至从图纸列表中加载图纸,也可以通过任意逻辑将其取回。
总而言之,您需要两种不同的系统,一种是在实时绘图时,另一种是在绘图完成时。
再见
吉恩
答案 1 :(得分:0)
Martjin Pieters的答案是正确的方法。 但是对于那些在不同情况下遇到相同问题的人,它来自以下行:
photonView.synchronization = ViewSynchronization.ReliableDeltaCompressed;
它基本上是压缩数据,如果太接近上次发送的数据,则不发送新数据。只需切换Unreliable
,所有数据将直接发送。