使用PUN同步图形

时间:2019-06-12 10:45:56

标签: c# unity3d synchronization multiplayer photon

我实现了注释功能,类似于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。他们在做什么?

2 个答案:

答案 0 :(得分:1)

是的,PhotonTransformView不适合此操作。

您可以每隔x毫秒发送一次可靠的rpc,并附上自上次rpc以来的点列表。那是实时绘制图形的时间,当图形完成时,您可以在给定图形ID的情况下将整个图形定义缓存在数据库中。然后,玩家可以在完成绘制图纸后加入房间,甚至从图纸列表中加载图纸,也可以通过任意逻辑将其取回。

总而言之,您需要两种不同的系统,一种是在实时绘图时,另一种是在绘图完成时。

再见

吉恩

答案 1 :(得分:0)

Martjin Pieters的答案是正确的方法。 但是对于那些在不同情况下遇到相同问题的人,它来自以下行:

photonView.synchronization = ViewSynchronization.ReliableDeltaCompressed;

它基本上是压缩数据,如果太接近上次发送的数据,则不发送新数据。只需切换Unreliable,所有数据将直接发送。