hen I Start the game and travel Lobby map to Combat Map on ‘Editor’,
It Sometimes break out with EXCEPTION.
Additionally, If I package server and client and execute, Error Always occurs.
In My Opinion, It related to Server RPC. See my logs and code.
Error Logs
[2023.08.18-06.37.46:540][660]LogWindows: Error: === Critical error: ===
[2023.08.18-06.37.46:541][660]LogWindows: Error:
[2023.08.18-06.37.46:541][660]LogWindows: Error: Fatal error!
[2023.08.18-06.37.46:541][660]LogWindows: Error:
[2023.08.18-06.37.46:542][660]LogWindows: Error: Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0xffffffffffffffff
[2023.08.18-06.37.46:542][660]LogWindows: Error:
[2023.08.18-06.37.46:542][660]LogWindows: Error: [Callstack] 0x00007ff63ca78192 DedicatedFPS.exe!FNetGUIDCache::SupportsObject() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\PackageMapClient.cpp:2692]
[2023.08.18-06.37.46:543][660]LogWindows: Error: [Callstack] 0x00007ff63ca4ad28 DedicatedFPS.exe!FNetGUIDCache::GetOrAssignNetGUID() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\PackageMapClient.cpp:2734]
[2023.08.18-06.37.46:545][660]LogWindows: Error: [Callstack] 0x00007ff63ca7503d DedicatedFPS.exe!UPackageMapClient::SerializeObject() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\PackageMapClient.cpp:279]
[2023.08.18-06.37.46:545][660]LogWindows: Error: [Callstack] 0x00007ff638141e92 DedicatedFPS.exe!FObjectPropertyBase::NetSerializeItem() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\CoreUObject\Private\UObject\PropertyBaseObject.cpp:131]
[2023.08.18-06.37.46:545][660]LogWindows: Error: [Callstack] 0x00007ff63ce2a4ca DedicatedFPS.exe!FRepLayout::SerializeProperties_r() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\RepLayout.cpp:6652]
[2023.08.18-06.37.46:546][660]LogWindows: Error: [Callstack] 0x00007ff63ce239d3 DedicatedFPS.exe!FRepLayout::SendPropertiesForRPC() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\RepLayout.cpp:6933]
[2023.08.18-06.37.46:546][660]LogWindows: Error: [Callstack] 0x00007ff63c9e4654 DedicatedFPS.exe!UNetDriver::ProcessRemoteFunctionForChannelPrivate() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\NetDriver.cpp:2208]
[2023.08.18-06.37.46:546][660]LogWindows: Error: [Callstack] 0x00007ff63c9d882b DedicatedFPS.exe!UNetDriver::InternalProcessRemoteFunctionPrivate() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\NetDriver.cpp:2028]
[2023.08.18-06.37.46:547][660]LogWindows: Error: [Callstack] 0x00007ff63c9e3653 DedicatedFPS.exe!UNetDriver::ProcessRemoteFunction() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\NetDriver.cpp:6638]
[2023.08.18-06.37.46:547][660]LogWindows: Error: [Callstack] 0x00007ff63be3a86c DedicatedFPS.exe!AActor::CallRemoteFunction() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\Actor.cpp:4905]
[2023.08.18-06.37.46:547][660]LogWindows: Error: [Callstack] 0x00007ff638185780 DedicatedFPS.exe!UObject::ProcessEvent() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\CoreUObject\Private\UObject\ScriptCore.cpp:1999]
[2023.08.18-06.37.46:548][660]LogWindows: Error: [Callstack] 0x00007ff63be5ce74 DedicatedFPS.exe!AActor::ProcessEvent() [C:\Users\taeho.kang\Downloads\UnrealEngine-5.1\Engine\Source\Runtime\Engine\Private\Actor.cpp:1055]
[2023.08.18-06.37.46:548][660]LogWindows: Error: [Callstack] 0x00007ff63769cd6a DedicatedFPS.exe!ADFPSPlayerController::PossesFromPreviousData() [C:\Users\taeho.kang\Perforce\taeho.kang_GXPlatform-KTH_6956\RND\DedicatedFPS\Intermediate\Build\Win64\DedicatedFPS\Inc\DedicatedFPS\UHT\DFPSPlayerController.gen.cpp:132]
[2023.08.18-06.37.46:548][660]LogWindows: Error: [Callstack] 0x00007ff6376af135 DedicatedFPS.exe!ADFPSPlayerController::BeginPlay() [C:\Users\taeho.kang\Perforce\taeho.kang_GXPlatform-KTH_6956\RND\DedicatedFPS\Source\DedicatedFPS\DFPSPlayerController.cpp:30]
My Code
UCLASS()
class DEDICATEDFPS_API ADFPSPlayerController : public APlayerController
{
GENERATED_BODY()
private:
ADFPSPlayerController();
//Player Character's Weak Ptr
TWeakObjectPtr<class APawn> PlayerCharacter;
// Delegator
FJumpDelegate JumpDelegate;
FMoveDelegate MoveDelegate;
FLookDelegate LookDelegate;
FEquipDelegate EquipDelegate;
FFirePressedDelegate FirePressedDelegate;
FAimPressedDelegate AimPressedDelegate;
FAimReleasedDelegate AimReleasedDelegate;
FChangePostureDelegate ChangePostureDelegate;
FReloadDelegate ReloadDelegate;
protected:
// Constructor and Based Override Function
virtual void BeginPlay() override;
virtual void SetupInputComponent() override;
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
public:
/////////////////////////////////////////////////////////////
// Below Properties recommend to Edit on Blueprint Setting
// Input Settings
// Input Mapping Context & Input Action
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
class UInputMappingContext* DefaultMappingContext;
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
class UInputAction* JumpAction;
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* MoveAction;
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* EquipAction;
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* LookAction;
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* FireAction;
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* AimAction;
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* ReloadAction;
UPROPERTY(EditAnywhere, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* ChangePostureAction;
// Pawn Class for Posses
UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = "Default")
TSubclassOf<class AActor> PlayerActorClass;
UPROPERTY(BlueprintReadWrite, EditDefaultsOnly, Category = "Default")
TSubclassOf<class AActor> PawnActorClass;
//////////////////////////////////////////////////////////////
// Components
UPROPERTY(BlueprintReadWrite, Category = "HUD")
class UHUDComponent* HUDComponent;
// Related to HUD
// Health and Bullet Count
UFUNCTION()
void SetHUDHealth(float Health, float MaxHealth);
UFUNCTION()
void SetBulletCountHUD(int Count);
// Related to Lobby
UFUNCTION()
void SendGameInstanceData();
UFUNCTION(Server, Reliable)
void PossesFromPreviousData(ALobbyController* PC, EParticipants EP);
// Related to Local Input
void Jump();
void Move(const FInputActionValue& Value);
void Look(const FInputActionValue& Value);
void Equip(const FInputActionValue& Value);
void FirePressed();
void AimPressed();
void AimReleased();
void Reload();
void ChangePosture();
// Ref Notify
virtual void OnRep_Pawn();
};
ADFPSPlayerController::ADFPSPlayerController() {
HUDComponent = CreateDefaultSubobject(TEXT(“HUDComponent”));
SetReplicates(true);
}
void ADFPSPlayerController::BeginPlay() {
Super::BeginPlay();
if (APlayerController* PlayerController = Cast(this))
{
if (UEnhancedInputLocalPlayerSubsystem* Subsystem =
ULocalPlayer::GetSubsystem(PlayerController->GetLocalPlayer()))
{
Subsystem->AddMappingContext(DefaultMappingContext, 0);
}
}
if (GetLocalRole() == ENetRole::ROLE_AutonomousProxy) {
UE_LOG(LogTemp, Error, TEXT(“AutonomousProxy”));
SendGameInstanceData();
HUDComponent->Init(Cast(GetHUD()));
}
}
void ADFPSPlayerController::SendGameInstanceData()
{
TPair < ALobbyController*, TPair<FString, EParticipants>> TP;
TP = Cast(GetGameInstance())->LocalLobbyPlayer;
//Only Call Posses (From Previous Data) Function When Lobby To Game(Room)
if (TP.Key != nullptr) {
PossesFromPreviousData(TP.Key, TP.Value.Value);
}
}
void ADFPSPlayerController::PossesFromPreviousData_Implementation(ALobbyController* PC, EParticipants EP)
{
UE_LOG(LogTemp, Error, TEXT(“PossesFromPreviousData_Implementation”));
if (EP == EParticipants::Player) {
FActorSpawnParameters ActorSpawnParameters;
ActorSpawnParameters.SpawnCollisionHandlingOverride
= ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
const FTransform SpawnTransform(FVector(0, 0, 50));
AActor* pawn = GetWorld()->SpawnActor(
PlayerActorClass,
&SpawnTransform,
ActorSpawnParameters);
if (pawn) {
if (GetPawn()) {
GetPawn()->Destroy();
}
Possess(Cast< ADedicatedFPSCharacter>(pawn));
}
}else {
FActorSpawnParameters ActorSpawnParameters;
ActorSpawnParameters.SpawnCollisionHandlingOverride
= ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
const FTransform SpawnTransform(FVector(0, 0, 50));
AActor* pawn = GetWorld()->SpawnActor(
PawnActorClass,
&SpawnTransform,
ActorSpawnParameters);
if (pawn) {
if (GetPawn()) {
GetPawn()->Destroy();
}
Possess(Cast<ACustomSpectator>(pawn));
}
}
//Set Server's Player Character Weak Ptr
APawn* PawnPtr = GetPawn();
PlayerCharacter = PawnPtr;
}
I Delete some irrelevant codes.
I trying to make a dedicated server and clients for FPS VR Game using Unreal Engine built-in Multi Play