【发布时间】:2015-02-19 05:31:07
【问题描述】:
我正在尝试让我的基本游戏上线,但遇到了一些问题。 我关注了this tutorial,这非常好,一切正常,但只有一件事,即插值。
没有插值,我有太多延迟问题(另一个玩家“滞后”了很多)。我尝试按照教程添加
void FixedUpdate()
{
if (networkView.isMine)
else{
syncTime += Time.deltaTime;
rigidbody2D.position = Vector3.Lerp(syncStartPosition, syncEndPosition, syncTime / syncDelay);
}
并使用这种方法:
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
{
Vector3 syncPosition = Vector3.zero;
if (stream.isWriting)
{
syncPosition = rigidbody2D.position;
stream.Serialize(ref syncPosition);
}
else
{
stream.Serialize(ref syncPosition);
syncTime = 0f;
syncDelay = Time.time - lastSynchronizationTime;
lastSynchronizationTime = Time.time;
syncStartPosition = rigidbody2D.position;
syncEndPosition = syncPosition;
}
}
但是现在其他玩家在不移动时是不可见的,并且在移动时可见但闪烁很多(闪烁太多我几乎看不到它)。由于我的方法是从 FixedUpdate 调用的,我想知道游戏对象是否简单地刷新到我什至看不到它。这可能吗?
无论如何,您对如何解决这个问题有想法吗?
非常感谢您提前提供的帮助!
PS:我尝试仅在 syncTime/syncDelay
PPS:当我使用插值时,它闪烁很多,但我可以看到位置是正确的,它不像以前那样滞后,所以最好解决如何进行插值而不是删除它。
【问题讨论】:
标签: unity3d synchronization interpolation multiplayer flicker