11 июля 2026
Егортекст ещё не в индексе
Так ну давайте с самого начала
Вы говорите у вас есть 12 коллайдеров которые вы туда сюда гоняете чтобы ловить рейкасты
При этом говорите это дорого из-за синхронизации трансформа
А трансформ это по сути просто 3 величины, 2 из них vector3 это позиция и скейл и одна quaternion которая описывает вращение
В первом приближении на скейл все равно персонажи одинакового размера, и на вращение тоже потому что у нас капсула, и в чем проблема синкать просто позицию из 3х интов?
Alexey Potokaучитывая пинг и прочее.
если прям сильно озаботиться, то можно при инпуте дёргать флаг, который на фикседе дёргнет рейкаст, но оно того не стоит.
Егорчем они решают? у нас тик бейсед
Ну как минимум тем что у вас есть тик от клиента мол я стреляю ратататата
И вы на сервере смотрите что в этот тик происходило и ничего синхронизировать не нужно
Егоркак мне сделать симуляцию в этом времени?
А что вы хотите симулировать?
Какое время?
У вас есть тики, в этом и суть tickbased
Ваше время это и есть тики
Егортекст ещё не в индексе
Возможно время позднее, но.. Я чёт не понимаю, что у тебя за задача?
Опиши что тебе нужно сделать, вероятно ты просто выбрал не оптимальное решение.)
НикитаА что вы хотите симулировать?
Какое время?
У вас есть тики, в этом и суть tickbased
Ваше время это и есть тики
рейкаст хочу сделать, в каком то времени, и передвинуть коллайдеры игроков в это время
Егоррейкаст хочу сделать, в каком то времени, и передвинуть коллайдеры игроков в это время
Похоже вы не совсем понимаете что такое tickbased либо я не понимаю что именно вы хотите
Смотри, у тебя реально нормальная архитектура (судя по коду), просто в чате ты объяснил задачу криво, и люди тебя не поняли — начали думать, что ты не понимаешь tick-based. Дам тебе развёрнутое сообщение, которое закрывает вопрос сразу и не даёт свернуть в сторону "а зачем тебе рейкаст вообще".
Вот текст, который можно кинуть в дискорд:
Окей, распишу подробно, чтобы не было путаницы.
Да, у нас tick-based сервер, клиент шлёт команду выстрела с своим Time (client time с учётом interpolation delay). Сервер это время получает и должен откатить мир назад (lag compensation / server-side rewind), чтобы проверить: попал ли выстрел с точки зрения клиента в момент, когда он стрелял.
Проблема НЕ в том, что нет тиков или что я не понимаю tick-based. Проблема конкретно физическая:
У меня на сервере для каждого игрока есть история позиций (Queue<Snapshot> с Time + Pos), пишется с частотой writeRate. Когда приходит выстрел с Time = T:
Мне нужно узнать, где были все остальные игроки в момент T (интерполирую между двумя ближайшими snapshot'ами — GetSnapshot(time)).
Реальные коллайдеры игроков двигать в эту позицию нельзя — это сломает live-физику (столкновения, движение, всё что происходит "сейчас" на сервере).
Поэтому у каждого игрока есть пул из 12 фантомных коллайдеров (CapsuleCollider2D, отдельные GameObject'ы, обычно enabled = false).
На момент запроса рейкаста: беру свободный фантом, ставлю его transform.position в rewind-позицию (snapshot.Pos), включаю (enabled = true).
Делаю Physics2D.SyncTransforms() один раз на весь набор фантомов (не по одному!) — это нужно, чтобы Unity physics engine увидел новые Transform-позиции и рассчитал их bounds/shape в physics world, потому что autoSyncTransforms у меня выключен.
Кидаю Raycast/CircleCast/OverlapCircle по слою PhantomLagCompensation | Ground.
Выключаю все использованные фантомы обратно, возвращаю позицию в 0 (relative to owner), помечаю слот свободным.
Вопрос был не "зачем тик-бейсед" и не "зачем рейкаст" — вопрос был чисто про
ЕгорСмотри, у тебя реально нормальная архитектура (судя по коду), просто в чате ты объяснил задачу криво, и люди тебя не поняли — начали думать, что ты не понимаешь tick-based. Дам тебе развёрнутое сообщение, которое закрывает вопрос сразу и не даёт свернуть в сторону "а зачем тебе р
Ладно начнем с простого
У вас есть условный стек позиций персонажа, просто примите как факт что персонаж это капсула или что там у вас, это более чем достаточно чтобы математически посчитать столкновение, но если севрер это инстанс самой юньки то я не знаю что тут можно еще добавить
Чуть-чуть посложнее, как вы собираетесь делать 10-20 выстрелов проверок за один fixedUpdate если по дефолту его шаг 50 раз в секунду, т.е. 20мс если мне память не изменяет, а это ну ± чисто гепотечиски равно инпут лагХ2/х4, пальцем в небо не претендую на точность
Лично я бы на вашем месте, по крайней мере попробовал бы посмотреть в сторону отделения физики юньки от физики сервера, как я понял из того что там наскребла нейронка у вас 2д, следовательно ничего больше чем boxCollider и условный sphereCollider вам не нужно, а это описывается ну 3 полями, а если учесть что в юньке для 2д физики используется вроде как открытый и типа бесплатный box2d то вы это можете спокойно считать отдельно от физики сцены/мира что там у вас не знаю, и радоваться жизни без всего этого геморроя
Условно подводя итог, я считаю что возможно на данный момент времени проблема высосана из пальца, либо я чего-то до конца так и не понял
НикитаЛично я бы на вашем месте, по крайней мере попробовал бы посмотреть в сторону отделения физики юньки от физики сервера, как я понял из того что там наскребла нейронка у вас 2д, следовательно ничего больше чем boxCollider и условный sphereCollider вам не нужно, а это описывается н
Давай я добавлю контекста: нетворк- Миррор, сервер -unity инстанс
ᴹᴵᴷᴴᴬᴵᴸДавай я добавлю контекста: нетворк- Миррор, сервер -unity инстанс
Тогда остается только молится
ᴹᴵᴷᴴᴬᴵᴸДавай я добавлю контекста: нетворк- Миррор, сервер -unity инстанс
и лаг компенсатор миррор слишком затратный?
в принципе можно попробовать написать что-то свое на основе их решения
где использовать более оптимизированные способы проверить попал или нет
но надо сначала смотреть как реализован дефолтный так сложно что-то советовать та и идей на что заменить и при этом сохранить точность пока не наблюдается
в целом можно пробовать еще упростить физ сцену
но надо чтоб вы проводили тесты что именно жрет ресы
Yevhenи лаг компенсатор миррор слишком затратный?
в принципе можно попробовать написать что-то свое на основе их решения
где использовать более оптимизированные способы проверить попал или нет
но надо сначала смотреть как реализован дефолтный так сложно что-то советовать та и идей на
там создание капсулы, рейкаст, удаление капсулы. мне помог способ на фантомные коллайдеры поставить рб и двигать rb.position вместо трансформа капсулы