(1) Player 이동을 위한 축 매핑 키 생성 (전, 후, 좌, 우)
(2) 멀티플레이어 옵션 변경

(3) 한 플레이어가 이동했을 때 다른 플레이어 화면에 적용되는지 확인
이상 없음

↑ 시작 화면

↑ Player1을 왼쪽으로 이동

↑ Player0을 오른쪽으로 이동
Longvinter는 PVP가 가능하므로 Client들간에 HP 동기화가 필요
(1) 현재 구조 확인

HP는 PC와 특정 NPC(나무, 새 등)도 적용되는 내용이므로 CharacterBase에 RPC, Replicated 구현 필요
(2) 함수 구현
// 주요 멤버 변수, 함수
// ACharacterBase.h
UPROPERTY(ReplicatedUsing = OnRep_CurrentHealth)
float CurrentHealth;
// ACharacterBase.cppp
void ACharacterBase::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const
{
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
DOREPLIFETIME(ACharacterBase, CurrentHealth);
}
void ACharacterBase::OnRep_CurrentHealth()
{
// AddOnScreenDebugMessage()를 통해 화면에 Player들의 HP를 표출하는 함수
OnHealthUpdate();
}
// APlayerCharacterBase.h
UFUNCTION(Server, Reliable)
void ServerNormalAttackTest();
// APlayerCharacterBase.cpp
void APlayerCharacterBase::ServerNormalAttackTest_Implementation()
{
// ...
if (CollisionEnable)
{
int32 Count = CollisionResult.Num();
for (int32 i = 0; i < Count; ++i)
{
ACharacterBase* Character = Cast<ACharacterBase>(CollisionResult[i].GetActor());
if (IsValid(Character))
{
Character->TakeDamage(1.f, FDamageEvent(), GetController(), this);
}
}
}
}
(2) 함수 호출 순서
이상 없음
Player들의 HP 변화가 모든 Client에게 적용됨을 확인함

