ChatCrawlerпоиск по публичному Telegram Открыть приложение
U

Unity Engine: вопрос - ответ

11 724 участников
11 июля 2026
Н
Егортекст ещё не в индексе
Так ну давайте с самого начала Вы говорите у вас есть 12 коллайдеров которые вы туда сюда гоняете чтобы ловить рейкасты При этом говорите это дорого из-за синхронизации трансформа А трансформ это по сути просто 3 величины, 2 из них vector3 это позиция и скейл и одна quaternion которая описывает вращение В первом приближении на скейл все равно персонажи одинакового размера, и на вращение тоже потому что у нас капсула, и в чем проблема синкать просто позицию из 3х интов?
Е
если двигать коллайдеры, в том же кадре сделать рейкаст, и в том же кадре выключить его, рейкаст будет происходить в позиции прошлого кадра либо до движения фантомного коллайдера
Н
Я конешн не силен в этих ваших мультиплеерах, но где-то слышал что 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 то вы это можете спокойно считать отдельно от физики сцены/мира что там у вас не знаю, и радоваться жизни без всего этого геморроя Условно подводя итог, я считаю что возможно на данный момент времени проблема высосана из пальца, либо я чего-то до конца так и не понял
Y
ᴹᴵᴷᴴᴬᴵᴸДавай я добавлю контекста: нетворк- Миррор, сервер -unity инстанс
и лаг компенсатор миррор слишком затратный? в принципе можно попробовать написать что-то свое на основе их решения где использовать более оптимизированные способы проверить попал или нет но надо сначала смотреть как реализован дефолтный так сложно что-то советовать та и идей на что заменить и при этом сохранить точность пока не наблюдается в целом можно пробовать еще упростить физ сцену но надо чтоб вы проводили тесты что именно жрет ресы
Е
Архив по месяцам
Открыть в Telegram Каталог площадок Искать в ChatCrawler

Слепок открытой публичной ленты из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог