Set Timer By Event node doesn't cause the event to be triggered

  1. In that case, the debug check should fail (see below)
UMyGameInstance* UMyGameInstance::GetMyGameInstance(const UObject* WorldContextObject)
{
	auto GameInstance = Cast<UMyGameInstance>(UGameplayStatics::GetGameInstance(WorldContextObject));
	check(GameInstance);
	return GameInstance;
}
void UMyGameInstance::SaveSettings()
{
	check(Settings != nullptr);

	Settings->MusicVolume = GetMusicVolume();
	Settings->GameSoundVolume = GetGameSoundVolume();

	Settings->SaveConfig();
}

float UMyGameInstance::GetMusicVolume()
{
	return Settings->MusicVolume;
}

float UMyGameInstance::GetGameSoundVolume()
{
	return Settings->GameSoundVolume;
}

Here is USettings class:

UCLASS(Config = Game)
class MYFIRSTGAMEINUE5_API USettings : public UObject
{
	GENERATED_BODY()
	
public:
	UPROPERTY(Config)
	float MusicVolume = 1.f;

	UPROPERTY(Config)
	float GameSoundVolume = 1.f;
};
  1. It is not done on Tick. Widget is added to viewport when a pause menu is opened, or main menu level is loaded, or the previous widget is asked to show another widget (e.g. when we press button “Sound” in Options widget). Do you need to see the code of AMenuLogic?