- 首先考虑GameUserSettings.ini的读写是否正确,即有没有把切换写进GameUserSettings.ini;还有就是在读取的时候,是否读正确;
- 验证是否读正确的方式:在FConfigCacheIni::InitializeConfigSystem中打断点,查看GConfig的值
对比ini验证是否与GameUserSettings.ini一致 - 可能导致GameUserSettings.ini读取不正确的原因:看源码读取优先是从pak包读取,如果pak包没有,会从非pak包读取,所以如果把GameUserSettings.ini打进pak包,则保存在Save下的GameUserSettings.ini将不会读取,即游戏中修改无效
IFileHandle* FPakPlatformFile::OpenRead(const TCHAR* Filename, bool bAllowWrite)
{
IFileHandle* Result = NULL;
FPakFile* PakFile = NULL;
FPakEntry FileEntry;
if (FindFileInPakFiles(Filename, &PakFile, &FileEntry))
{
#if PAK_TRACKER
TrackPak(Filename, &FileEntry);
#endif
Result = CreatePakFileHandle(Filename, PakFile, &FileEntry);
if (Result)
{
FCoreDelegates::OnFileOpenedForReadFromPakFile.Broadcast(*PakFile->GetFilename(), Filename);
}
}
else
{
if (IsNonPakFilenameAllowed(Filename))
{
Result = LowerLevel->OpenRead(Filename, bAllowWrite);
}
}
return Result;
}
- 如何解决GameUserSettings.ini打进pak包,而导致游戏中修改无效:
(1) 将GameUserSettings.ini加入黑名单,加入方式:https://zhuanlan.zhihu.com/p/245396935【坏处,暴露GameUserSettings.ini给用户】
(2) 将GameUserSettings.ini的section加入黑名单:打开一个Save下GameUserSettings.ini的文件,将里面的section,加入到工程设置中packing设置的section黑名单,黑名单以外的不会打进pak包

(3) 不要创建DefaultGameUserSettings.ini,并在里面设置【最佳答案】