Кто-Нибудь может пояснить такую ситуацию: Есть игрок, который при смерти уходит

на респаун с помощью стандартной функции ГеймМода RestartPlayer(GetWorld()->GetFirstPlayerController());.
Есть турель, которая хранит поле APawn* PlayerPawn и определяет его на BeginPlay как PlayerPawn = GetWorld()->GetFirstPlayerController()->GetPawn();
Турель наводится лайн трейсом и всё хорошо до того момента, пока игрок не умирает. После смерти и возрождения лайн трейс перестает выцеливать игрока. Почему? Ведь не смотря на то, что игрок уничтожается-создается указатель же тот же..

10 ответов

18 просмотров

А точно ли это тот же указатель? Павн вроде бы пересоздается после смерти

Игорь- Автор вопроса

Так пересоздается-то павн, а указатель остаётся тот же, по идее. Но, как ни странно, вопрос решился после того, как я убрал указатель из поля класса, перестал его определять на бегин плее, а просто стал вызывать GetFirstPlayerController()->GetPawn(); в методе прицеливания

Игорь
Так пересоздается-то павн, а указатель остаётся то...

Ну это логично, теперь вы всегда берете актуального павна, а раньше кешировали указатель на старого

Игорь- Автор вопроса

Т.е. получается, что меняется адрес, на который ссылается указатель? Почему-то я об этом не подумал. Спасибо)

Игорь
Т.е. получается, что меняется адрес, на который сс...

Я бы сказал по-другому, новый павн это просто другой не связанный со старым павном объект и поэтому у них разные адреса.

Игорь- Автор вопроса
Pavel
Я бы сказал по-другому, новый павн это просто друг...

Логично. Сейчас осознал картину целиком и полностью признаю Вашу правоту. Мой вариант прокатил бы только в том случае, если это был бы константный указатель

Игорь- Автор вопроса

Не совсем правильно выразился.. Я имею ввиду, если бы функция GetWorld()->GetFirstPlayerController()->GetPawn() возвращала бы константный указатель. Т.е. если бы в движке зачем-то была реализована такая штука, что павн первого плеера всегда создавался бы в одной области памяти) //всё больше понимаю, что нужно было просто задуматься и не городить говнокод)

Игорь
Не совсем правильно выразился.. Я имею ввиду, если...

@gameraccoon парни, я подолью масла в огонь вашего обсуждения, при вызове RestartPlayer Pawn игрока не пересоздаётся (если он до этого существовал), там будет тот же самый указатель. Игорь, ты уверен, что перед рестартом игрока ты не прибиваешь сам Pawn?

Игорь- Автор вопроса
Aleksei DTG
@gameraccoon парни, я подолью масла в огонь вашего...

Вопрос интересный, павн вызывает респаун в 2 случаях - либо на EndPlay, например после смерти по KillZ, либо по делегату от HelthCompinent. Сначала я там просто вызывал респаун, без дестроя - целиться турели переставал . Сейчас я там просто вызываю дестрой и все.

Игорь
Вопрос интересный, павн вызывает респаун в 2 случа...

Сложно сказать, не видя вводных, но при обычном вызове рестарта твой указатель никуда не потеряется и будет указывать на того же персонажа (просто он появится на точке старта), так что почти уверен, что он у тебя прибивался каким-то другим образом, например через тот же твой HealthComponent

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта