액터와 애님 인스턴스간에 수행되는 캐릭터의 공격 플로우 (스탠드얼론)

입력 명령을 전달한 이후에는 모두 서버에서 처리하도록 설계

언리얼에서 리플리케이션의 주체는 액터
액터가 소유하는 언리얼 오브젝트에 대해 리플리케이션 진행이 가능
이를 통틀어 서브오브젝트(Subobject)라고도 함
스탯을 관리하는 액터 컴포넌트의 리플리케이션 설정

- 클라이언트 접속 로그
ReadyForReplication() 호출 시점 분석LogABNetwork: [SERVER][ROLE_Authority/ROLE_None] AABPlayerController::PostInitializeComponents Begin BP_ABPlayerController_C_1 LogABNetwork: [SERVER][ROLE_Authority/ROLE_None] AABPlayerController::PostInitializeComponents End LogABNetwork: [SERVER][ROLE_Authority/ROLE_None] AABPlayerController::BeginPlay Begin LogABNetwork: [SERVER][ROLE_Authority/ROLE_None] AABPlayerController::BeginPlay End LogABNetwork: [SERVER][ROLE_Authority/ROLE_SimulatedProxy] UABCharacterStatComponent::ReadyForReplication Begin LogABNetwork: [SERVER][ROLE_Authority/ROLE_SimulatedProxy] AABCharacterPlayer::BeginPlay Begin LogABNetwork: [SERVER][ROLE_Authority/ROLE_SimulatedProxy] UABCharacterStatComponent::BeginPlay Begin LogABNetwork: [SERVER][ROLE_Authority/ROLE_AutonomousProxy] AABPlayerController::OnPossess Begin BP_ABPlayerController_C_1 LogABNetwork: [SERVER][ROLE_Authority/ROLE_SimulatedProxy] AABCharacterPlayer::PossessedBy Begin ABCharacterPlayer_1 LogABNetwork: [SERVER][ROLE_Authority/ROLE_SimulatedProxy] AABCharacterPlayer::PossessedBy No Owner LogABNetwork: [SERVER][ROLE_Authority/ROLE_AutonomousProxy] AABCharacterPlayer::PossessedBy Owner : BP_ABPlayerController_C_1 LogABNetwork: [SERVER][ROLE_Authority/ROLE_AutonomousProxy] AABCharacterPlayer::PossessedBy End ABCharacterPlayer_1 LogABNetwork: [SERVER][ROLE_Authority/ROLE_AutonomousProxy] AABPlayerController::OnPossess End // 클라이언트 로그 시작 LogABNetwork: [CLIENT1][ROLE_None/ROLE_Authority] AABPlayerController::PostInitializeComponents Begin BP_ABPlayerController_C_0 LogABNetwork: [CLIENT1][ROLE_None/ROLE_Authority] AABPlayerController::PostInitializeComponents End // 네트워크로부터 전달받은 데이터 처리 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABPlayerController::PostNetInit Begin BP_ABPlayerController_C_0 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABPlayerController::PostNetInit Server Connection : IpConnection_0 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABPlayerController::PostNetInit End // 오너 변경 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABCharacterPlayer::OnRep_Owner Begin ABCharacterPlayer_0 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABCharacterPlayer::OnRep_Owner Owner : BP_ABPlayerController_C_0 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABCharacterPlayer::OnRep_Owner End ABCharacterPlayer_0 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABCharacterPlayer::PostNetInit Begin ABCharacterPlayer_0 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABCharacterPlayer::PostNetInit End LogABNetwork: [CLIENT1][ROLE_SimulatedProxy/ROLE_Authority] AABGameState::OnRep_ReplicatedHasBegunPlay Begin // 컨트롤러의 BeginPlay() 호출 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABPlayerController::BeginPlay Begin LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABPlayerController::BeginPlay End // ReadyForReplication() 호출! LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] UABCharacterStatComponent::ReadyForReplication Begin // 이후 플레이어의 BeginPlay() 호출 LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] AABCharacterPlayer::BeginPlay Begin LogABNetwork: [CLIENT1][ROLE_AutonomousProxy/ROLE_Authority] UABCharacterStatComponent::BeginPlay Begin LogABNetwork: [CLIENT1][ROLE_SimulatedProxy/ROLE_Authority] AABGameState::OnRep_ReplicatedHasBegunPlay End LogABNetwork: [CLIENT1][ROLE_SimulatedProxy/ROLE_Authority] AABCharacterPlayer::PostNetInit Begin ABCharacterPlayer_1 // ReadyForReplication() 호출! LogABNetwork: [CLIENT1][ROLE_SimulatedProxy/ROLE_Authority] UABCharacterStatComponent::ReadyForReplication Begin // 이후 플레이어의 BeginPlay() 호출 LogABNetwork: [CLIENT1][ROLE_SimulatedProxy/ROLE_Authority] AABCharacterPlayer::BeginPlay Begin LogABNetwork: [CLIENT1][ROLE_SimulatedProxy/ROLE_Authority] UABCharacterStatComponent::BeginPlay Begin LogABNetwork: [CLIENT1][ROLE_SimulatedProxy/ROLE_Authority] AABCharacterPlayer::PostNetInit End
https://github.com/dnjfs/ArenaBattle_Network/commit/d5493c3ea5862016bd8363b52589935fb2bff44a
네트워크 기반 캐릭터 공격 구현
캐릭터 공격 입력 시 Server RPC 호출하여 공격 처리
이후 Multicast RPC 호출하여 프로퍼티 리플리케이션 및 애니메이션 재생
캐릭터 체력 동기화
SetIsReplicated() 세팅하여 액터 컴포넌트의 리플리케이션 준비
동기화 처리는 프로퍼티 리플리케이션 활용