Интерполяция RigidBody 2D
Добавлено: 11 июл 2018, 15:45
Как правильно сделать интерполяцию игроков с RigidBody 2D? Мне нужно, чтобы игроки могли толкать друг друга, а сейчас они проходят сквозь друг друга, так как я сделал интерполяцию через transform. Дело в том, что если я поменяю интерполяцию через transform.position на rigidbody.position, то игроки после столкновения передают неправильную позицию и тормозят, если будут перемещаться рядом со стенкой. Я не знаю как это исправить.
Код:
Код:
Синтаксис:
Используется csharp
// Это в Update
if (netView.isMine) {...}
else
// Интерполяция
{
SynTime += Time.fixedDeltaTime;
transform.position = Vector3.Lerp(SynStartPos, SynEndPos, SynTime / SynDelay);
transform.rotation = Quaternion.Lerp(SynStartAngle, SynEndAngle, SynTime / SynDelay);
}
// Синхронизация
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
{
Vector3 SynPos = Vector3.zero;
Quaternion SynAngle = Quaternion.identity;
if (!stream.isWriting)
{
// Чтение
stream.Serialize(ref SynPos);
stream.Serialize(ref SynAngle);
// Расчеты для интерполяции
SynTime = 0;
SynDelay = Time.time - LastSynTime;
LastSynTime = Time.time;
SynStartPos = transform.position;
SynEndPos = SynPos;
SynStartAngle = transform.rotation;
SynEndAngle = SynAngle;
}
else
{
// Запись
SynPos = transform.position;
stream.Serialize(ref SynPos);
SynAngle = transform.rotation;
stream.Serialize(ref SynAngle);
}
}
if (netView.isMine) {...}
else
// Интерполяция
{
SynTime += Time.fixedDeltaTime;
transform.position = Vector3.Lerp(SynStartPos, SynEndPos, SynTime / SynDelay);
transform.rotation = Quaternion.Lerp(SynStartAngle, SynEndAngle, SynTime / SynDelay);
}
// Синхронизация
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info)
{
Vector3 SynPos = Vector3.zero;
Quaternion SynAngle = Quaternion.identity;
if (!stream.isWriting)
{
// Чтение
stream.Serialize(ref SynPos);
stream.Serialize(ref SynAngle);
// Расчеты для интерполяции
SynTime = 0;
SynDelay = Time.time - LastSynTime;
LastSynTime = Time.time;
SynStartPos = transform.position;
SynEndPos = SynPos;
SynStartAngle = transform.rotation;
SynEndAngle = SynAngle;
}
else
{
// Запись
SynPos = transform.position;
stream.Serialize(ref SynPos);
SynAngle = transform.rotation;
stream.Serialize(ref SynAngle);
}
}