如果这看起来微不足道,我深表歉意,但我已经搜索了一段时间的答案,但似乎找不到解决方案。
我有一个结构列表(TArray
确切地说是结构。)代表我的游戏中的高分。(每个结构代表一个高分,字段类似于“名称、日期、玩家分数、游戏模式等”我使用这个SaveGame 方法将我的高分数组保存到文件中和从文件中读取。
我将它与模拟值一起使用并且系统正常工作,现在我想创建一个 UMG 小部件,它将显示高分列表,这就是我遇到障碍的地方。
我想使用 ListView 将每个结构显示为 ListViewEntry。据我了解(我正在关注本教程),UMG 列表视图需要它的条目小部件来实现IUserObjectListEntry ,特别是必须实现该OnListItemObjectSet (UObject* ListItemObject)
方法。此方法负责将对象分配给 Listview 条目并将其字段映射到各种可视小部件。你现在可以看到我的问题了,我有一个 UStructs 列表,这个方法需要一个 UObject 指针。
我真的不知道我需要做些什么才能使用 UStruct 进行这项工作。没有创建一个与我的结构几乎相同的虚拟 UObject,并且在将结构传递给此函数之前,我需要将其字段复制到虚拟 UObject 中并改为传递它。我认为这种方法非常不雅。一定有更好的方法。你知道任何?
我想避免仅仅为了将它传递给这个函数而创建一个虚拟的 UObject。
我尝试使用 UObjects 数组而不是 Structs 数组,但问题是,UObjects 数组始终是指针数组,当它被保存时,指针被保存而不是实际数据,所以当它被加载时数据没用。
也许有一个可以为ListViewEntry
小部件实现的特定于结构的接口?或者也许有一种方法可以在保存 Uobjects 数组的指针之前取消引用它们?
TL;博士
我有以下结构:
C++
USTRUCT()
class FHighScoreEntry
{
GENERATED_BODY()
public:
//Player name
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FString PlayerName;
//Player Score
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 PlayerScore;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
FDateTime CurrentDateTime;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TEnumAsByte<EGameType> GameType;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 AccuracyTrialMaxTries;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int32 TimeTrialMaxTime;
}
在以下数组中;
C++
TArray<FHighScoreEntry> HighScores;
我想在 UMG ListView 中显示高分数组。ListView 需要其条目来实现User List Object
接口,该接口具有以下功能:
如您所见,该事件仅接受 UObject。因此我的问题。