네트워크 캐릭터 Stat 구현 & 최적화 요소 - Unreal Network MultiPlayer Framework 캐릭터 Item과 Stat 구현 시 고려할 사항클라이언트와 서버는 Level에 있는 상제와 Item 상자에 설정된 Overlap Event에 반응해서 Stat이나 Item을 추가한다.이렇게 Item이나 Stat가 변경 될 때 서버, 클라1, 클라2가 존재한다고 가정하면서버가 클라1에게 클라1에 대한 상세한 Stat 정보를 줘야하지만 클라2의 상세한 정보(Stat정보)를 주지 않아도 된다.클라2의 정말 필요한 정보(HP)만 클라1에게 줘도 무관하다.그리고 모든 클라이언트의 Stat정보를 주게되면 네트워크 통신 데이터양도 많아지기에 성능상 좋지 않다. 즉, 서버는 각 클라이언트에게 필요한 정보만 전달하는 것이 좋다. 구현 예시게임 플레이에 영향을 주지 않는 시각적인 부분(Effect)는 서버와 클라이언트가 .. 2025. 3. 12. 캐릭터 Movement 추가 예시 - Unreal Network MultiPlayer Framework 이번 글에선 CharcterMovementComponent를 상속해서 텔레포트를 만들어 볼 것이다.CharacterMovementComponent를 상속해서 만드는 이유는https://dev.epicgames.com/documentation/ko-kr/unreal-engine/character-movement-component?application_version=4.27해당 공식문서의 아래쪽에이 토픽에서 다른 방법으로 구현했을 때의 단점을 살펴보면 된다. 이번 구현에서는CharacterMovmentComponent가 사용하는 RPC기능에 텔레포 기능을 추가 선언하고몇몇 함수를 override하여 텔레포트를 구현해볼 것이다. Teleport IA를 만들어주고 InputAction도 추가한다.이제 캐릭터 h.. 2025. 3. 12. 물리 리플리케이션 & 움직임 리플리케이션 예시 - Unreal Network MultiPlayer Framework 일반 움직임 리플리케이션 예시간단하게 움직이는 Platform을 만들어 주고Replicates를 true로 활성화해준다.이렇게하면Platform에 대한 Replication이 네트워크를 통해 클라이언트에 전송된다.하지만 아직 움직임은 전송이 되지 않는다.Replicate Movement도 활성화해야 움직임도 전송된다. 물리 시뮬레이션 리플리케이션 예시10초 뒤에 Physic가 활성화 되는 Shpere를 만들어주고공이 떨어져서 판을 무너트리는 동작을 수행한다.이때 Sphere는 위 두가지 Replicate가 활성화되어있다.근데 Server와 Client의 결과가 다르다.왜냐면 네모판과 두 기둥 StaticMesh Actor가 Replication이 활성화되어있지 않기 때문이다.StaticMeshRepli.. 2025. 3. 11. 움직임 리플리케이션 플로우 & Simulated Proxy 리플리케이션 - Unreal Network MultiPlayer Framework Simulated Proxy & 움직임 리플리케이션을 사용하기 위해선Actor의 움직임 리플리케이션 옵션을 활성화해야 올바르게 동작한다.Actor 움직임 리플리케이션 플로우서버에서 움직임 리플리케이션 옵션을 활성화매 Tick마다 현재 Actor의 움직이나 물리 상태를 ReplicatedMovement라는 멤버 변수에 저장ReplicatedMovement라는 멤버 변수를 클라이언트의 SimulatedProxy에 전송OnRep_ReplicatedMovement함수 호출클라이언트의 움직임이나 물리상태를 기록한다.클라이언트는 Tick마다 물리 & 움직임 처리를 진행한다.물리가 활성화되어있다면 물리 리플리케이션 Tick에서 클라이언트와 서버에 물리상태를 동기화캐릭터는 CharacterMovement의 매 Tick.. 2025. 3. 11. 움직임 리플리케이션 & 디버깅- Unreal Network MultiPlayer Framework 더보기https://dev.epicgames.com/documentation/ko-kr/unreal-engine/understanding-networked-movement-in-the-character-movement-component-for-unreal-engine오늘 글과 관련된 Unreal 공식 문서이다.캐릭터 움직임 리플리케이션 플로우(Chracter Movement Component에 구현되어 있음)클라이언트에서 움직임 입력 명령현재 Tick에서 입력 가속(입력을 가속도로 변환)과 움직이기 전의 캐릭터를 클래스에 기록한다.입력 가속은 이동 모드와 입력 변수를 기반으로 계산된다.Character Movement의 함수인 PerformMovement 실행Chracter Movement에 설정한 속성.. 2025. 3. 11. 네트워크 공격 기능 개선 & 최적화 - Unreal Network MultiPlayer Framework 이전 글 처럼 공격 로직을 만들면 별 문제가 없어 보이고 에디터에서 정상적으로 동작했다.하지만 통신 부하가 발생하는 경우에는 문제가 발생할 수 있다. 통신 렉이 심한 경우 공격 모션이 늦게 재생되거나 시각적인 타이밍과 클라이언트와 서버가 일치하지 않을 수 있다.이를 확인하기 위해 DefaultEngine.ini에 다음과 같이 추가해준다.이렇게 작성하면 500ms. 즉, 0.5초 딜레이를 가지고 패킷을 전송한다.이동만 해도 다음처럼 이동에 사용되는 패킷이 유효하지 않다는 경고 로그를 찍고 한박자 느리게 움직인다.Attack을 해봐도 서버보다 클라이언에서 한박자 느리게 움직인다.이렇게 타이밍이 맞지 않으면 플레이 경험적으로 좋지 않다. 이러한 현상이 발생하는 원인의 순서는 다음과 같다.클라이언트에서 Atta.. 2025. 3. 11. 공격 기능 & Damage예제 / 액터 컴포넌트 리플리케이션- Unreal Network MultiPlayer Framework Attack 기능은 기본적으로 제작되었다는 가정 하에 Network 흐름을 연습하기 위한 예제이다.h 파일에 Lifetime을 위한 GetLifetimeReplicatedProps와 Server, MulticastRPC를 만들어준다.그리고 bCanAttack을 콜백함수로 구현하기 위해 ReplicatedUsing을 사용하고 OnRep_CanAttack()함수를 만들어준다.Attack은 Attack을 수행하는 함수이고 AttackHitCheck는 Attack시 다른 캐릭터가 맞았는지 체크하는 함수이다.GetLifetimeReplicatedProps에 bCanAttack 네트워크를 통해 통신하기 위해서 DOREPLIFETIME 매크로를 통해 등록해준다.bCanAttack이 true라면 클라이언트에서 Serv.. 2025. 3. 10. RPC 개요 및 주의사항 - Unreal Network MultiPlayer Framework RPC (Remote Procedure Call, 원격 프로시저(함수) 호출)https://dev.epicgames.com/documentation/ko-kr/unreal-engine/remote-procedure-calls-in-unreal-engine?application_version=5.4원격 컴퓨터에 있는 함수를 호출할 수 있도록 만든 통신 프로토콜 (로컬 호출, 원격 실행)네트워크 멀티플레이에서서버와 클라이언트 간 빠르게 행동을 명령하고 정보를 주고받는데 사용Unreal Engine에서 클라이언트에서 서버로 통신하는 유일한 수단을 제공서버에서 클라이언트로 전파되는 방향성을 가지며 클라이언트에서 커넥션을 소유하는 Actor는 서버로 명령을 내릴 수 있다.Sound, Particle, Actor의.. 2025. 3. 9. Actor 우선권 & 휴면 / 조건식 프로퍼티 리플리케이션 / 액터 리플리케이션 로우레벨 - Unreal Network MultiPlayer Framework 액터 리플리케이션 우선권클라리언트에 보내는 대역폭(NetBandwidth)는 물리적으로 한정되어있다.클라이언트에 보낼 Actor 중, 우선권이 높은 Actor의 데이터를 우선 전달하도록 설계가 되어있다.Actor에 설정된 NetPriority 우선권 값을 활용해 전송 순서를 결정한다. (값이 높으면 우선권이 높다)우선권은 네트워크로 전송하는 비율을 높이는 것이 아니라 우선권을 높히거나 낮춰서 네트워크 성능이 향상되진 않는다.Actor 종류우선권(NetPriority)일반적인 Actor1.0Pawn3.0PlayerController3.0 Actor의 현재 우선권은 GetNetPriority()함수를 사용해서 계산한다.이 GetNetPriority함수도 연관성과 동일하 Actor와 관찰자 사이의 거리와 상대.. 2025. 3. 9. 이전 1 2 3 다음