UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GameInstance.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
9#include "UObject/Object.h"
16#include "ReplayTypes.h"
17
18#include "GameInstance.generated.h"
19
20class AGameModeBase;
23class FTimerManager;
25class ULocalPlayer;
26class UOnlineSession;
27enum EPlayNetMode : int;
28struct FLatentActionManager;
32namespace ERHIFeatureLevel { enum Type : int; }
33
34//
35// EWelcomeScreen, //initial screen. Used for platforms where we may not have a signed in user yet.
36// EMessageScreen, //message screen. Used to display a message - EG unable to connect to game.
37// EMainMenu, //Main frontend state of the game. No gameplay, just user/session management and UI.
38// EPlaying, //Game should be playable, or loading into a playable state.
39// EShutdown, //Game is shutting down.
40// EUnknown, //unknown state. mostly for some initializing game-logic objects.
41
44{
45 extern ENGINE_API const FName Playing; // We are playing the game
46}
47
49
57DECLARE_MULTICAST_DELEGATE_ThreeParams(FOnPreClientTravel, const FString& /*PendingURL*/, ETravelType /*TravelType*/, bool /*bIsSeamlessTravel*/);
58typedef FOnPreClientTravel::FDelegate FOnPreClientTravelDelegate;
60
63
64
65#if WITH_EDITOR
66
67// The result of a UGameInstance PIE operation
69{
70public:
71 // If not, what was the failure reason
72 FText FailureReason;
73
74 // Did the PIE operation succeed?
75 bool bSuccess;
76
77public:
79 {
81 }
82
84 {
85 return FGameInstancePIEResult(false, InReason);
86 }
87
88 bool IsSuccess() const
89 {
90 return bSuccess;
91 }
92private:
94 : FailureReason(InReason)
96 {
97 }
98};
99
100// Parameters used to initialize / start a PIE game instance
101//@TODO: Some of these are really mutually exclusive and should be refactored (put into a struct to make this easier in the future)
103{
105
106 // Are we doing SIE instead of PIE?
108
109 // Were there any BP compile errors?
111
112 // Should we start in spectator mode?
114
115 // Is this a dedicated server instance for PIE?
116 bool bRunAsDedicated;
117
118 // Is this the primary PIE client?
120
121 // What time did we start PIE in the editor?
122 double PIEStartTime = 0;
123
124 // The feature level that PIE world should use
126
127 // Kept alive externally.
129
130 // Which net mode should this PIE instance start in? Affects which maps are loaded.
131 EPlayNetMode NetMode;
132
133 // The map we should force the game to load instead of the one currently running in the editor. Blank for no override
134 FString OverrideMapURL;
135};
136
137#endif
138
140
142
150UCLASS(config=Game, transient, BlueprintType, Blueprintable, MinimalAPI)
152{
154
155protected:
157
158 // @todo jcf list of logged-in players?
159
160 ENGINE_API virtual bool HandleOpenCommand(const TCHAR* Cmd, FOutputDevice& Ar, UWorld* InWorld);
161 ENGINE_API virtual bool HandleDisconnectCommand(const TCHAR* Cmd, FOutputDevice& Ar, UWorld* InWorld);
162 ENGINE_API virtual bool HandleReconnectCommand(const TCHAR* Cmd, FOutputDevice& Ar, UWorld* InWorld);
163 ENGINE_API virtual bool HandleTravelCommand(const TCHAR* Cmd, FOutputDevice& Ar, UWorld* InWorld);
164
167
169 ENGINE_API void OnConsoleInput(const FString& Command);
170
172 UPROPERTY()
174
176 UPROPERTY()
177 TObjectPtr<class UOnlineSession> OnlineSession;
178
180 UPROPERTY()
181 TArray<TObjectPtr<UObject>> ReferencedObjects;
182
184 FOnPreClientTravel NotifyPreClientTravelDelegates;
185
190 UPROPERTY(BlueprintAssignable, DisplayName=OnPawnControllerChanged)
191 FOnPawnControllerChanged OnPawnControllerChangedDelegates;
192
194 FDelegateHandle OnPlayTogetherEventReceivedDelegateHandle;
195
196public:
197
198 FString PIEMapName;
199#if WITH_EDITOR
200 double PIEStartTime = 0;
201 bool bReportedPIEStartupTime = false;
202#endif
203
204 //~ Begin FExec Interface
205#if UE_ALLOW_EXEC_COMMANDS
206 ENGINE_API virtual bool Exec(UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Out = *GLog) override;
207#endif
208 //~ End FExec Interface
209
210 //~ Begin UObject Interface
211 ENGINE_API virtual class UWorld* GetWorld() const final;
214 //~ End UObject Interface
215
217 ENGINE_API virtual void Init();
218
220 UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName = "Init"))
221 ENGINE_API void ReceiveInit();
222
225
227 UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName = "Shutdown"))
228 ENGINE_API void ReceiveShutdown();
229
238 ENGINE_API virtual void HandleInputDeviceConnectionChange(EInputDeviceConnectionState NewConnectionState, FPlatformUserId PlatformUserId, FInputDeviceId InputDeviceId);
239
243 UPROPERTY(BlueprintAssignable, DisplayName=OnInputDeviceConnectionChange)
244 FOnUserInputDeviceConnectionChange OnInputDeviceConnectionChange;
245
254 ENGINE_API virtual void HandleInputDevicePairingChange(FInputDeviceId InputDeviceId, FPlatformUserId NewUserPlatformId, FPlatformUserId OldUserPlatformId);
255
259 UPROPERTY(BlueprintAssignable, DisplayName=OnUserInputDevicePairingChange)
260 FOnUserInputDevicePairingChange OnUserInputDevicePairingChange;
261
263 UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName = "NetworkError"))
264 ENGINE_API void HandleNetworkError(ENetworkFailure::Type FailureType, bool bIsServer);
265
267 UFUNCTION(BlueprintImplementableEvent, meta=(DisplayName = "TravelError"))
268 ENGINE_API void HandleTravelError(ETravelFailure::Type FailureType);
269
270 /* Called to initialize the game instance for standalone instances of the game */
271 ENGINE_API void InitializeStandalone(const FName InWorldName = NAME_None, UPackage* InWorldPackage = nullptr);
272
273 /* Called to initialize the game instance with a minimal world suitable for basic network RPC */
274 ENGINE_API void InitializeForMinimalNetRPC(const FName InPackageName);
275
277 static ENGINE_API void CreateMinimalNetRPCWorld(const FName InPackageName, UPackage*& OutWorldPackage, UWorld*& OutWorld);
278
279#if WITH_EDITOR
280 /* Called to initialize the game instance for PIE instances of the game */
282
283 /* Called to actually start the game when doing Play/Simulate In Editor */
285
288
289 ENGINE_API virtual void ReportPIEStartupTime();
290#endif
291
292 ENGINE_API class UEngine* GetEngine() const;
293
294 struct FWorldContext* GetWorldContext() const { return WorldContext; };
295 ENGINE_API class UGameViewportClient* GetGameViewportClient() const;
296
298 ENGINE_API virtual void OnWorldChanged(UWorld* OldWorld, UWorld* NewWorld);
299
301 ENGINE_API virtual void StartGameInstance();
302 virtual bool JoinSession(ULocalPlayer* LocalPlayer, int32 SessionIndexInSearchResults) { return false; }
303 virtual bool JoinSession(ULocalPlayer* LocalPlayer, const FOnlineSessionSearchResult& SearchResult) { return false; }
304
305 virtual void LoadComplete(const float LoadTime, const FString& MapName) {}
306
311
317 ENGINE_API virtual void DebugCreatePlayer(int32 ControllerId);
318
324 ENGINE_API virtual void DebugRemovePlayer(int32 ControllerId);
325
326 ENGINE_API virtual ULocalPlayer* CreateInitialPlayer(FString& OutError);
327
335 ENGINE_API ULocalPlayer* CreateLocalPlayer(int32 ControllerId, FString& OutError, bool bSpawnPlayerController);
336
344 ENGINE_API ULocalPlayer* CreateLocalPlayer(FPlatformUserId UserId, FString& OutError, bool bSpawnPlayerController);
345
352 ENGINE_API virtual int32 AddLocalPlayer(ULocalPlayer* NewPlayer, FPlatformUserId UserId);
353
359 ENGINE_API virtual bool RemoveLocalPlayer(ULocalPlayer * ExistingPlayer);
360
362 ENGINE_API int32 GetNumLocalPlayers() const;
363
365 ENGINE_API ULocalPlayer* GetLocalPlayerByIndex(const int32 Index) const;
366
368 ENGINE_API ULocalPlayer* GetFirstGamePlayer() const;
369
371 ENGINE_API APlayerController* GetFirstLocalPlayerController(const UWorld* World = nullptr) const;
372
374 ENGINE_API ULocalPlayer* FindLocalPlayerFromControllerId(const int32 ControllerId) const;
375
377 ENGINE_API ULocalPlayer* FindLocalPlayerFromPlatformUserId(const FPlatformUserId UserId) const;
378
380 ENGINE_API ULocalPlayer* FindLocalPlayerFromDeviceId(const FInputDeviceId DeviceID) const;
381
383 ENGINE_API ULocalPlayer* FindLocalPlayerFromUniqueNetId(FUniqueNetIdPtr UniqueNetId) const;
384 ENGINE_API ULocalPlayer* FindLocalPlayerFromUniqueNetId(const FUniqueNetId& UniqueNetId) const;
385 ENGINE_API ULocalPlayer* FindLocalPlayerFromUniqueNetId(const FUniqueNetIdRepl& UniqueNetId) const;
386
388 ENGINE_API TArray<ULocalPlayer*>::TConstIterator GetLocalPlayerIterator() const;
389
391 ENGINE_API const TArray<ULocalPlayer*> & GetLocalPlayers() const;
392
399 ENGINE_API APlayerController* GetPrimaryPlayerController(bool bRequiresValidUniqueId = true) const;
400
406 ENGINE_API FUniqueNetIdRepl GetPrimaryPlayerUniqueIdRepl() const;
407
408 ENGINE_API void CleanupGameViewport();
409
412 UE_DEPRECATED(5.1, "Now takes a EReplayResult instead.")
413 virtual void HandleDemoPlaybackFailure(EDemoPlayFailure::Type FailureType, const FString& ErrorString = TEXT("")) { }
415
417
420
423
424 inline FTimerManager& GetTimerManager() const { return *TimerManager; }
425
426 inline FLatentActionManager& GetLatentActionManager() const { return *LatentActionManager; }
427
435
439 template <typename TSubsystemClass>
441 {
442 return SubsystemCollection.GetSubsystem<TSubsystemClass>(TSubsystemClass::StaticClass());
443 }
444
449 template <typename TSubsystemClass>
451 {
452 if (GameInstance)
453 {
455 }
456 return nullptr;
457 }
458
462 template <typename TSubsystemClass>
464 {
465 return SubsystemCollection.GetSubsystemArrayCopy<TSubsystemClass>(TSubsystemClass::StaticClass());
466 }
467
471 template <typename TSubsystemClass>
472 void ForEachSubsystem(TFunctionRef<void(TSubsystemClass*)> Operation) const
473 {
474 static_assert(TIsDerivedFrom<TSubsystemClass, UGameInstanceSubsystem>::IsDerived, "TSubsystemClass must be derived from UGameInstanceSubsystem");
475 return SubsystemCollection.ForEachSubsystem([Operation=MoveTemp(Operation)](UGameInstanceSubsystem* Subsystem){
476 Operation(CastChecked<TSubsystemClass>(Subsystem));
477 }, TSubsystemClass::StaticClass());
478 }
479
488 ENGINE_API virtual void StartRecordingReplay(const FString& InName, const FString& FriendlyName, const TArray<FString>& AdditionalOptions = TArray<FString>(), TSharedPtr<IAnalyticsProvider> AnalyticsProvider = nullptr);
489
491 ENGINE_API virtual void StopRecordingReplay();
492
502 ENGINE_API virtual bool PlayReplay(const FString& InName, UWorld* WorldOverride = nullptr, const TArray<FString>& AdditionalOptions = TArray<FString>());
503
510 ENGINE_API virtual bool IsReplayDeferred(const FString& ReplayName) const;
511
522 ENGINE_API bool PlayReplayPlaylist(const struct FReplayPlaylistParams& PlaylistParams);
523
529 ENGINE_API virtual void AddUserToReplay(const FString& UserString);
530
539 ENGINE_API virtual bool EnableListenServer(bool bEnable, int32 PortOverride = 0);
540
545 virtual void HandleGameNetControlMessage(class UNetConnection* Connection, uint8 MessageByte, const FString& MessageStr)
546 {}
547
549 ENGINE_API virtual void ReceivedNetworkEncryptionToken(const FString& EncryptionToken, const FOnEncryptionKeyResponse& Delegate);
550
552 ENGINE_API virtual void ReceivedNetworkEncryptionAck(const FOnEncryptionKeyResponse& Delegate);
553
555 ENGINE_API virtual EEncryptionFailureAction ReceivedNetworkEncryptionFailure(UNetConnection* Connection);
556
558 ENGINE_API virtual void PreloadContentForURL(FURL InURL);
559
561 ENGINE_API virtual class AGameModeBase* CreateGameModeForURL(FURL InURL, UWorld* InWorld);
562
564 ENGINE_API virtual void SetPersistentTravelURL(FURL InURL);
565
567 ENGINE_API virtual TSubclassOf<AGameModeBase> OverrideGameModeClass(TSubclassOf<AGameModeBase> GameModeClass, const FString& MapName, const FString& Options, const FString& Portal) const;
568
569
573 virtual void ModifyClientTravelLevelURL(FString& LevelName)
574 {
575 }
576
581 {
582 return false;
583 }
584
589 {
590 return false;
591 }
592
594 FLatentActionManager* LatentActionManager;
595
597 class UOnlineSession* GetOnlineSession() const { return OnlineSession; }
598
600 ENGINE_API virtual TSubclassOf<UOnlineSession> GetOnlineSessionClass();
601
603 ENGINE_API bool IsDedicatedServerInstance() const;
604
613 ENGINE_API virtual FName GetOnlinePlatformName() const;
614
624 ENGINE_API virtual bool ClientTravelToSession(int32 ControllerId, FName InSessionName);
625
627 ENGINE_API void NotifyPreClientTravel(const FString& PendingURL, ETravelType TravelType, bool bIsSeamlessTravel);
629 FOnPreClientTravel& OnNotifyPreClientTravel() { return NotifyPreClientTravelDelegates; }
630
632 FOnPawnControllerChanged& GetOnPawnControllerChanged() { return OnPawnControllerChangedDelegates; }
633
637 ENGINE_API virtual void ReturnToMainMenu();
638
640 ENGINE_API virtual void RegisterReferencedObject(UObject* ObjectToReference);
641
643 ENGINE_API virtual void UnregisterReferencedObject(UObject* ObjectToReference);
644
646 ENGINE_API virtual EReplicationSystem GetDesiredReplicationSystem(FName InNetDriverDefinition) const;
647
650
651protected:
653 ENGINE_API void BroadcastOnStart();
654
656 ENGINE_API virtual void OnStart();
657
659 static ENGINE_API bool GetMapOverrideName(const TCHAR* CmdLine, FString& OverrideMapName);
660
661private:
662
664};
bool bSuccess
Definition ConvexDecomposition3.cpp:819
#define GLog
Definition CoreGlobals.h:95
EInputDeviceConnectionState
Definition CoreMiscDefines.h:594
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams(DelegateName, Param1Type, Param1Name, Param2Type, Param2Name)
Definition DelegateCombinations.h:62
#define DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(DelegateName, Param1Type, Param1Name, Param2Type, Param2Name, Param3Type, Param3Name)
Definition DelegateCombinations.h:71
#define DECLARE_MULTICAST_DELEGATE_ThreeParams(DelegateName, Param1Type, Param2Type, Param3Type)
Definition DelegateCombinations.h:67
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
ETravelType
Definition EngineBaseTypes.h:726
FOnPreClientTravel::FDelegate FOnPreClientTravelDelegate
Definition GameInstance.h:58
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
void Init()
Definition LockFreeList.h:4
EReplicationSystem
Definition NetEnums.h:85
EEncryptionFailureAction
Definition NetworkDelegates.h:152
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Controller.h:41
Definition PlayerController.h:261
Definition IDelegateInstance.h:14
Definition Exec.h:29
Definition NameTypes.h:617
Definition SubsystemCollection.h:180
Definition OutputDevice.h:133
Definition UObjectGlobals.h:2492
Definition Text.h:385
static CORE_API const FText & GetEmpty()
Definition Text.cpp:252
Definition TimerManager.h:133
Definition CoreOnline.h:102
Definition IAnalyticsProvider.h:52
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition Array.h:64
Definition SharedPointer.h:692
Definition SubclassOf.h:30
Definition Engine.h:711
Definition GameInstanceSubsystem.h:17
Definition GameInstance.h:152
FLatentActionManager & GetLatentActionManager() const
Definition GameInstance.h:426
static TSubsystemClass * GetSubsystem(const UGameInstance *GameInstance)
Definition GameInstance.h:450
virtual bool JoinSession(ULocalPlayer *LocalPlayer, const FOnlineSessionSearchResult &SearchResult)
Definition GameInstance.h:303
virtual void HandleDemoRecordFailure(const UE::Net::TNetResult< EReplayResult > &Result)
Definition GameInstance.h:419
virtual void OverrideIrisReplicationSystemConfig(FNetDriverReplicationSystemConfig &OutConfig, bool bIsServer) const
Definition GameInstance.h:649
struct FWorldContext * WorldContext
Definition GameInstance.h:156
FTimerManager * TimerManager
Definition GameInstance.h:593
virtual PRAGMA_ENABLE_DEPRECATION_WARNINGS void HandleDemoPlaybackFailure(const UE::Net::TNetResult< EReplayResult > &Result)
Definition GameInstance.h:416
FTimerManager & GetTimerManager() const
Definition GameInstance.h:424
virtual void ModifyClientTravelLevelURL(FString &LevelName)
Definition GameInstance.h:573
ENGINE_API void OnPlayTogetherEventReceived(int32 UserIndex, const TArray< const FUniqueNetId & > &UserList)
class UOnlineSession * GetOnlineSession() const
Definition GameInstance.h:597
TSubsystemClass * GetSubsystem() const
Definition GameInstance.h:440
virtual void OnSeamlessTravelDuringReplay()
Definition GameInstance.h:422
FLatentActionManager * LatentActionManager
Definition GameInstance.h:594
FOnPreClientTravel & OnNotifyPreClientTravel()
Definition GameInstance.h:629
FOnLocalPlayerEvent OnLocalPlayerRemovedEvent
Definition GameInstance.h:310
virtual bool DelayCompletionOfPendingNetGameTravel()
Definition GameInstance.h:588
UGameInstanceSubsystem * GetSubsystemBase(TSubclassOf< UGameInstanceSubsystem > SubsystemClass) const
Definition GameInstance.h:431
virtual void HandleGameNetControlMessage(class UNetConnection *Connection, uint8 MessageByte, const FString &MessageStr)
Definition GameInstance.h:545
struct FWorldContext * GetWorldContext() const
Definition GameInstance.h:294
virtual bool JoinSession(ULocalPlayer *LocalPlayer, int32 SessionIndexInSearchResults)
Definition GameInstance.h:302
virtual bool DelayPendingNetGameTravel()
Definition GameInstance.h:580
void ForEachSubsystem(TFunctionRef< void(TSubsystemClass *)> Operation) const
Definition GameInstance.h:472
FOnPawnControllerChanged & GetOnPawnControllerChanged()
Definition GameInstance.h:632
virtual void LoadComplete(const float LoadTime, const FString &MapName)
Definition GameInstance.h:305
FOnLocalPlayerEvent OnLocalPlayerAddedEvent
Definition GameInstance.h:309
TArray< TSubsystemClass * > GetSubsystemArrayCopy() const
Definition GameInstance.h:463
Definition GameViewportClient.h:71
TObjectPtr< UGameInstance > GameInstance
Definition GameViewportClient.h:112
Definition LocalPlayer.h:169
Definition NetConnection.h:284
Definition Object.h:95
Definition OnlineSession.h:19
Definition Package.h:216
Definition World.h:918
static UE_API void AddReferencedObjects(UObject *InThis, FReferenceCollector &Collector)
Definition World.cpp:982
virtual UE_API UWorld * GetWorld() const override
Definition World.cpp:1820
virtual UE_API void FinishDestroy() override
Definition World.cpp:1533
@ IsSuccess
Definition AutomationAnalyticParams.h:39
Definition EngineBaseTypes.h:739
Definition NetEnums.h:22
Definition SceneComponent.h:24
Type
Definition RHIFeatureLevel.h:20
Definition EngineBaseTypes.h:658
Definition GameInstance.h:44
ENGINE_API const FName Playing
int
Definition TestServer.py:515
U16 Index
Definition radfft.cpp:71
Definition CoreMiscDefines.h:524
Definition NetDriver.h:657
Definition CoreMiscDefines.h:470
Definition ReplayPlaylistTracker.h:28
Definition EngineBaseTypes.h:799
Definition OnlineReplStructs.h:26
Definition Engine.h:334
Definition UnrealTypeTraits.h:40
Definition ObjectPtr.h:488
Definition NetResult.h:330