使用 PUN 同步绘图

Synchronising drawing using PUN

我已经实现了类似于在 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。他们在做什么?

是的,PhotonTransformView 不适合这个。

您可以每 x 毫秒发送一个可靠的 rpc,其中包含自上次 rpc 以来的点列表。那是实时绘制的时候,当绘图完成时,您将整个绘图定义缓存在给定绘图 ID 的数据库中。然后绘图完成后加入房间的玩家可以稍后检索绘图,甚至可以从绘图列表或任何任意逻辑加载。

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

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

photonView.synchronization = ViewSynchronization.ReliableDeltaCompressed;

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