Вопрос Краши и баги отрисовки при частом вызове Linecast (проверка видимости игрока для аима).

Начинающий
Статус
Оффлайн
Регистрация
16 Дек 2021
Сообщения
16
Реакции[?]
1
Поинты[?]
0
Игра - BLOCKPOST (Unity, Il2Cpp).
Я использую функцию юнити Linecast, что бы проверить есть ли препятствия между игроком и целью что бы не лочить на стены.
Тема с такой же проблемой уже появлялась на форуме, но она была заброшена оставшись без ответа.

Суть в том, что если функция Linecast вызывается, как мне кажется, слишком часто (как правило это происходит в тимфайте 20х20, в режимах где меньше игроков всё ниже перечисленное встречается крайне редко), то возникают следующие проблемы:
1. краш игры. чаще всего при смене сервера, но бывает и во время игры.
2. некоторые игроки просто теряют свою модель (я продолжаю получать их позиции (на что указывает работающий есп и аим), но они невидимы и у них нет хитбокса, а так же где-то на карте есть их застывшая моделька). при попытке сменить сервер игру крашит.
Пожалуйста, авторизуйтесь для просмотра ссылки.

3. мир перестает нормально отрисовываться, прям пиздец какой-то. в этом случае игру не крашит, так что я могу сменить сервер, но это не избавит от проблемы, а играть так точно не получится.
Пожалуйста, авторизуйтесь для просмотра ссылки.


если здесь есть кто-то, кто уже с этим сталкивался и решил проблему или у кого-то просто есть идеи - отпишите по поводу возможных фиксов, ибо я уже отчаялся.


C++:
RaycastHit hitInfo;
if (app::Physics_Linecast_3(camWP, posEnemyBone, &hitInfo, nullptr))
{
    float distToTarget = sqrt(pow((posEnemyBone.x - camWP.x), 2) + pow((posEnemyBone.y - camWP.y), 2) + pow((posEnemyBone.z - camWP.z), 2));
    float lackOfPenetration = distToTarget - hitInfo.m_Distance;

    if (lackOfPenetration < 0.6)
        utils::SetView(AngletoTarget);
}
 
Banned
Пользователь
Статус
Оффлайн
Регистрация
1 Окт 2016
Сообщения
143
Реакции[?]
45
Поинты[?]
2K
Что бы функции physics не крашили и не было проблем с физикой, игры нужно их вызывать в потоке игры, так что просто захукай функцию в игре, и от туда вызывай.
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
16 Дек 2021
Сообщения
16
Реакции[?]
1
Поинты[?]
0
так что просто захукай функцию в игре, и от туда вызывай
не совсем догоняю как я это должен сделать, можешь чуть поподробнее? что-то вроде вызова внутри Update?
 
Последнее редактирование:
Banned
Пользователь
Статус
Оффлайн
Регистрация
1 Окт 2016
Сообщения
143
Реакции[?]
45
Поинты[?]
2K
не совсем догоняю как я это должен сделать, можешь чуть поподробнее? что-то вроде вызова внутри Update?
Найди функцию в игре, которая вызывается каждый фрейм, и захукай ее. И уже оттуда вызывай функцию linecast.
 
Сверху Снизу