Указатель программного объекта UE5 не работает в качестве аргументаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Указатель программного объекта UE5 не работает в качестве аргумента

Сообщение Anonymous »

Я пытаюсь преобразовать свою систему управления подсказками на C++ и создал основной ресурс данных, чтобы легко изменять данные подсказок. Чтобы сделать его максимально эффективным и оптимальным для памяти, я решил использовать указатели мягких объектов на активы данных, которые загружаются по мере сбора подсказок.
Я пытаюсь преобразовать свою систему управления подсказками на C++ и создал первичный ресурс данных, чтобы легко изменять данные подсказок. В моем коде подсказки у меня есть вызов интерфейса для попытки взаимодействия с подсказкой:

Код: Выделить всё

bool AClueBase::AttemptInteraction_Implementation(UInteractComponent* Interactor)
{
UE_LOG(LogClue, Display, TEXT("Clue Interacting"));

UClueManagerSubsystem* ClueManager = GetGameInstance()->GetSubsystem();
if(!ClueManager) return false;

UE_LOG(LogClue, Display, TEXT("Clue Manager Valid"));

return ClueManager->CollectClue(ClueDataAsset);
}
Это работает нормально, поскольку актив данных Clue является UPROPERTY:

Код: Выделить всё

UPROPERTY(BlueprintReadOnly, EditInstanceOnly) TSoftObjectPtr ClueDataAsset;
Функция, которую он пытается вызвать в подсистеме Clue Manager:

Код: Выделить всё

bool UClueManagerSubsystem::CollectClue(TSoftObjectPtr Clue)
{
if(!Clue) return false;

UE_LOG(LogClue, Display, TEXT("Collecting Clue: %s"), *Clue->GetClueName());
FAreaClues AreaClues;
// If the Map has the Enum already, then we need to save a reference to the current value
if(CollectedClues.Contains(Clue->GetClueLocation()))
{
// If the Map has the Enum already, then we need to save a reference to the current value
AreaClues = CollectedClues[Clue->GetClueLocation()];

UE_LOG(LogClue, Display, TEXT("Clue Location already in Map"));
}

if(AreaClues.CollectedClues.Contains(Clue)) return false;

UE_LOG(LogClue, Display, TEXT("Clue doesn't already exist in Map"), *Clue->GetClueName());

AreaClues.CollectedClues.Add(Clue, true);
CollectedClues.Add(Clue->GetClueLocation(), AreaClues);

UE_LOG(LogClue, Display, TEXT("Clue Successfully Added"), *Clue->GetClueName());

OnCollectedClue.Broadcast(Clue);

return true;
}
Он не проходит мимо первого защитного предложения в этой функции, поэтому указатель мягкого объекта, очевидно, имеет значение nullptr. Я новичок в C++ с указателями мягких объектов, поэтому, возможно, я неправильно их использую, поэтому буду очень признателен за любые исправления :)

Подробнее здесь: https://stackoverflow.com/questions/753 ... s-argument
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»