Войти
ПрограммированиеФорумСеть

Синхронизация объектов на воде

#0
0:20, 25 апр. 2015

Всем привет!
Разрабатываем браузерную 3D игру на Unity3d. Суть проста: корабли плавают в океане и топят друг друга.
Возникла проблема правильного расчета координат противников у игрока.

Сверху, то что видит сам игрок, внизу – то как второй игрок видит первого.
Вначале все хорошо, но потом из-за задержек сети и применения интерполяции наблюдается картина, когда сетевой корабль отображается то под волной, то над волной. Для сетевого корабля взаимодействие с водой никак не просчитывается.

Мне не совсем понятно, как правильно предсказывать поведение корабля, если мне известно предыдущая позиция корабля и текущая высота волны. Собственно, есть ли какие-нибудь пути решения этой проблемы?

Изображение

#1
5:20, 25 апр. 2015

Главное чтоб не отрывался от воды у других игроков, а если чуть волна захлестнёт то беды не будет.

#2
11:17, 25 апр. 2015

>применения интерполяции наблюдается картина, когда сетевой корабль отображается то под волной, то над волной
т.к. у ваших игроков волны одинаковые, то можно исхитриться и изменить алгоритм интерполяции, чтобы он размещал корабли точно на воде.

#3
12:18, 25 апр. 2015

Интересная тема, почитаю. Сам с сетью пока не работал, но тоже раздумывал о возможности подобных проблем.

#4
12:25, 25 апр. 2015

Stepets
> т.к. у ваших игроков волны одинаковые, то можно исхитриться и корабли ставить одинаково
FIXED : )

#5
12:34, 25 апр. 2015

а вобще, вы после своей существующей интерполяции добавьте "телепортацию" корабля по вертикали (если у вас нет кораблей, которые могут прыгать с волн)

#6
13:57, 25 апр. 2015

Волны синхронизированы. После того, как игрок попадает в игру, ему прилетает метка с временем, на основе которой и генерируются волны. И время генерации волны параллельно высчитывается на клиенте и на сервере, а сервер раз в 5 секунд рассылает свои значения, чтобы не было рассинхронизации. Здесь проблем нет.
Грубо говоря, когда корабль находиться на воде, у него меняется только координата Y (отбросим rotation для упрощения). Я плохо понимаю, как мне связать последнюю полученную позицию игрока и высоту волны в данной точке. В позиции сетевого игрока отбрасывать координату Y и вместо нее подставлять высоту волны? Или находить какое-то среднее значение?

#7
14:10, 25 апр. 2015

>В позиции сетевого игрока отбрасывать координату Y и вместо нее подставлять высоту волны?
конечно, ведь так гарантированно игрок с волны не улетит

#8
14:38, 25 апр. 2015

- Во первых при таких волнах как на рисунке, никто ни в кого не стрелят - не до того как бэ.

- Во вторых - при волне, при которой корабли могут обмениваются залпами - корабли практически не меняют высоту.
Т.е. проблема сооружена искусственно на ровном месте.

#9
15:35, 25 апр. 2015

WhiteWolf
> - Во первых при таких волнах как на рисунке, никто ни в кого не стрелят - не до
> того как бэ.
>
> - Во вторых - при волне, при которой корабли могут обмениваются залпами -
> корабли практически не меняют высоту.
> Т.е. проблема сооружена искусственно на ровном месте.

ты что, в корсаров не играл?

#10
16:17, 25 апр. 2015

Stepets
Для эпохи парусников все происходит вот так примерно, на расстоянии пистолетного выстрела:
Изображение

А для более поздних времен - навесный огонь артиллерией, при котором абсолютно неважно колебание по оси У.

#11
16:31, 25 апр. 2015

WhiteWolf
Спасибо, я и так знаю как проходили морские бои.
Игры ведь нужны для развлечения, а не скучной дотошной реалистичности?
Вдруг ТСу хочется сделать игру где игроки будут эпичнейше перестреливаться вовремя шторма/балансировать на гребне огрменной волны/сражаться в море с воронками ?

#12
19:50, 25 апр. 2015

WhiteWolf
это не симулятор. Небольшие корабли, которых швыряет на волнах.
Вот примерный геймлей:
https://www.youtube.com/watch?v=-cHncQHvsHE

Просто да, я могу увеличить расстояние между двумя волнами и проблема, которую я описал выше – исчезнет.

ПрограммированиеФорумСеть

Тема в архиве.