Я пытаюсь преобразовать свою систему управления подсказками на 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);
}
Код: Выделить всё
UPROPERTY(BlueprintReadOnly, EditInstanceOnly) TSoftObjectPtr ClueDataAsset;Код: Выделить всё
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;
}
Подробнее здесь: https://stackoverflow.com/questions/753 ... s-argument
Мобильная версия