IDoNotExist писал(а):Боюсь что интерполяция мало поможет, проблема то в другом, для Rigidbody хозяином является мастер - клиент, соответственно с другими игроками будет синхронизироваться только то, что происходит на мастер - клиенте, соответственно ты у себя на клиенте хоть пинай этот мяч, хоть запинайся, эталонной позицией для синхронизации один фиг будет позиция на мастер-клиенте и он всегда будет стремиться в неё вернуться.
Вместо интерполяции внедрить экстраполяцию (симулировать движение на основе последних принятых данных), нужно применять ускорение,угловую скорость,позицию к мячу в момент получения данных от мастера-клиента, и между интервалами получения данных на локальном игроке применять такую же силу удара (применять такие же параметры).
И так получится некое согласование между игроками.
Пример:
Интервал отправки данных от мастера = 0,2
1. Пнули мячик на игроке (не мастер), мячик полетел и в момент удара как-то сообщаем мастеру (посредством RPC) что пнули мяч с такими-то параметрами: ускорение, углы вращения и т.д., можно указать просто направление удара а параметры удара будут в отдельном ScriptableObject'е (параметры удара могут быть общими как для мастера так и для клиента и незачем отправлять лишние данные)
2. Мастер принял RPC, применил полученные данные к мячу и через 0,2 секунды отправляет игроку текущее состояние мяча
3. Игрок принимает RPC от мастера и т.к. игрок уже пнул мяч и физика сделала своё дело тут уже проверяем дистанцию мяча игрока с мячом мастера, если есть разница то двигаем мячик к последней позиции мастера