분류 전체보기 74

UE C++ 언리얼 패키징 관련 (+AWS)

언리얼 전용 서버 배포: 소스 빌드, Client/Server 패키징, AWS EC2 운영에디터에서 멀티플레이가 동작하는 것과 인터넷에 전용 서버를 배포하는 것은 서로 다른 단계다. 로컬 빌드는 개발 코드를 실행 가능한 바이너리로 만들지만, 다른 컴퓨터에서 게임을 실행하려면 플랫폼에 맞게 변환한 에셋과 설정, 런타임 의존성까지 함께 전달해야 한다.언리얼 전용 서버 배포는 다음 파이프라인으로 이해할 수 있다.엔진 소스 준비 -> 프로젝트를 소스 빌드 엔진에 연결 -> Client / Server Target 정의 -> 코드 Build -> 에셋 Cook -> 결과물 Stage / Package -> 로컬 전용 서버 테스트 -> 서버 패키지를 EC2로 전송 -> AWS Security Grou..

UE/멀티플레이 2026.08.12

UE C++ 언리얼 멀티플레이 서버 및 생명주기

언리얼 멀티플레이 매치 생명주기: 서버 접속, 상태 전환, 결과 UI와 리셋멀티플레이 게임 한 판은 전투나 점수 계산만으로 완성되지 않는다. 클라이언트가 타이틀 화면에서 서버를 선택하고, 서버가 접속을 승인하며, 필요한 인원이 모이면 게임을 시작하고, 종료 결과를 각 플레이어에게 전달한 뒤 다음 판을 준비해야 한다.이 흐름에서 가장 중요한 원칙은 서버가 규칙과 상태 전환을 결정하고, 클라이언트는 복제된 상태를 화면에 표현한다는 것이다. 레벨 이동과 UI는 로컬에서 일어나지만, 누가 참가할 수 있는지, 언제 게임이 시작되고 끝나는지, 누가 몇 등인지는 서버가 확정해야 한다.Title -> 서버 주소 입력 -> Client Travel -> PreLogin에서 참가 가능 여부 검사 -> PostLog..

UE/멀티플레이 2026.08.11

UE C++ 숫자야구

Number BaseballUnreal Engine 5.5와 C++로 제작한 데디케이티드 서버 기반 멀티플레이 숫자 야구 프로젝트입니다.서버가 정답, 턴, 제한 시간, 시도 횟수와 라운드 결과를 관리하고 각 클라이언트는 채팅 형식으로 숫자를 제출합니다.게임 규칙서버는 라운드 시작 시 1~9 중 서로 다른 숫자 세 개로 정답을 생성합니다.현재 턴인 플레이어가 정확히 세 자리의 유효한 숫자를 입력하면 숫자 야구 입력으로 처리합니다.숫자와 위치가 모두 같으면 Strike, 숫자만 같으면 Ball, 일치하는 숫자가 없으면 OUT입니다.판정 결과는 1S1B, 3S0B, OUT 형식으로 전체 플레이어에게 전달됩니다.각 플레이어에게 한 라운드당 최대 5회의 기회가 주어집니다.먼저 3S를 달성한 플레이어가 승리합니다...

UE/멀티플레이 2026.08.10

UE C++ 멀티플레이 동기화

언리얼 멀티플레이 전투 동기화: Animation, Attack Prediction, ActorComponent Replication멀티플레이 캐릭터의 전투를 동기화하려면 애니메이션, 입력, 피격 판정, 체력, UI처럼 수명이 다른 정보를 함께 다뤄야 한다. 이 요소들을 모두 같은 RPC로 전달하거나 모든 변수를 복제하면 구현은 시작하기 쉽지만, 지연과 패킷 손실이 생기는 순간 결과가 어긋난다.안정적인 구조를 만들려면 정보를 세 계층으로 나눠야 한다.표현 계층 이동 애니메이션, Aim Offset, 공격 몽타주, 파티클판정 계층 공격 가능 여부, 공격 시점, 충돌 검사, 데미지상태 계층 현재 HP, 최대 HP, 사망 여부, 버프 상태표현은 각 클라이언트가 복제된 상태를 바탕으로 재생한다.게임 결과는..

UE/멀티플레이 2026.08.07

UE C++ RPC오너십, 프로퍼티 리플리케이션

언리얼 RPC 설계: Ownership, Reliability, Property Replication언리얼 멀티플레이에서 RPC(Remote Procedure Call)는 한 컴퓨터에서 호출한 함수를 네트워크를 통해 다른 컴퓨터에서 실행하는 기능이다. 클라이언트 입력을 서버에 전달하거나, 서버가 특정 클라이언트의 UI를 열거나, 폭발 효과를 여러 클라이언트에 재생할 때 사용한다.하지만 함수에 Server, Client, NetMulticast를 붙였다고 원하는 곳에서 무조건 실행되는 것은 아니다. 실제 실행 위치는 다음 조건의 영향을 받는다.RPC를 호출한 컴퓨터RPC가 선언된 액터의 Owner와 Owning Connection액터와 컴포넌트의 복제 여부각 클라이언트에 대한 액터의 RelevancyRel..

UE/멀티플레이 2026.08.06

UE C++ 액터 리플리케이션

언리얼 액터 복제 최적화: Update Frequency, Relevancy, Priority, DormancybReplicates를 활성화했다고 해서 서버가 액터의 모든 상태를 매 프레임, 모든 클라이언트에 전송하는 것은 아니다. 실제 복제는 서버가 관리하는 스케줄링 과정 안에서 이루어진다.서버는 먼저 액터가 이번 업데이트에 참여할 수 있는지 확인하고, 연결마다 해당 액터가 필요한지 판단한 뒤, 제한된 대역폭 안에서 어떤 액터를 먼저 보낼지 결정한다. 마지막으로 이전에 보낸 상태와 비교해 변경된 프로퍼티만 직렬화한다.복제 가능한 액터 → Dormancy 및 Update Frequency 검사 → 연결별 Relevancy 검사 → Priority에 따른 전송 순서 결정 → 변경된 프로퍼티 직렬화 ..

UE/멀티플레이 2026.08.05

UE C++ 멀티플레이 게임 프레임워크

언리얼 멀티플레이 게임플레이 프레임워크와 네트워크 생명주기언리얼 멀티플레이에서 같은 액터 클래스는 서버와 여러 클라이언트에 각각 생성될 수 있다. 생성자나 BeginPlay()에 로그 한 줄을 추가했는데 여러 번 출력되는 이유도 이 때문이다. 여기에 CDO 생성, PIE의 다중 월드, 별도 서버 프로세스까지 겹치면 함수가 어느 인스턴스에서 왜 호출됐는지 파악하기 어려워진다.이 문제를 풀기 위해서는 두 가지 축을 함께 이해해야 한다.GameMode, GameState, PlayerState, PlayerController, Pawn이 각각 어느 컴퓨터에 존재하고 무엇을 소유하는가?접속, 복제, 게임 시작, Possess 과정에서 어떤 이벤트가 어떤 순서로 호출되는가?이번 글에서는 게임플레이 프레임워크의 책..

UE/멀티플레이 2026.08.04

언리얼C++ 멀티플레이 숫자야구 (판정 및 게임사이클 완성)

언리얼 서버 권한 숫자 야구멀티플레이 채팅에 숫자 야구 규칙을 결합하면 메시지를 전달하는 것만으로는 충분하지 않다. 서버가 비밀 숫자를 관리하고, 클라이언트의 입력을 검증하고, 판정 결과와 플레이어별 시도 횟수를 모든 참가자에게 일관되게 보여줘야 한다.이때 핵심은 게임 규칙과 상태의 소유자를 명확히 분리하는 것이다.비밀 숫자와 승패 판정은 서버 전용 GameMode가 소유한다.플레이어 이름과 시도 횟수는 PlayerState에 저장해 복제한다.로컬 UI 입력은 PlayerController가 받아 Server RPC로 전달한다.판정 결과처럼 즉시 보여줄 사건은 Client RPC로 방송한다.승리·무승부 공지는 각 PlayerController의 replicated property로 전달한다.기본적인 RP..

UE/멀티플레이 2026.08.03

[Unreal 9기] 2026-07-31 UE 넷모드, 넷드라이브, 리플리케이션

언리얼 멀티플레이의 실행 위치와 동기화언리얼 멀티플레이 코드를 작성할 때 가장 헷갈리는 점은 같은 클래스와 같은 함수가 여러 컴퓨터에 각각 존재하고 실행될 수 있다는 것이다. 싱글플레이에서는 함수를 호출한 프로세스에서 그대로 실행하면 끝이지만, 멀티플레이에서는 다음 질문을 먼저 해결해야 한다.지금 코드는 서버 프로세스에서 실행 중인가, 클라이언트 프로세스에서 실행 중인가?지금 보고 있는 액터는 원본 Authority인가, 복제된 Proxy인가?이 액터는 어느 연결의 소유이며, RPC를 어느 컴퓨터로 보낼 수 있는가?전달하려는 것이 일회성 사건인가, 계속 유지되어야 하는 상태인가?이 네 질문은 각각 NetMode, NetRole, Ownership, RPC와 Property Replication으로 이어진..

UE/멀티플레이 2026.07.31

[Unreal 9기] 2026-07-30 UE멀티플레이 채팅

Unreal Engine 멀티플레이 채팅Unreal Engine에서 채팅 입력창을 만드는 일은 어렵지 않다. EditableTextBox에 입력된 문자열을 받아 출력하면 로컬 기능은 완성된다. 하지만 같은 기능을 멀티플레이 환경에 올리면 전혀 다른 문제가 생긴다.위젯은 서버와 모든 클라이언트 중 어디에 생성해야 하는가?PlayerController는 어느 머신에 존재하는가?다른 클라이언트 화면에도 문자열이 출력되었다면 정말 네트워크 통신에 성공한 것인가?에디터의 PIE(Play In Editor) 설정은 테스트 결과에 어떤 영향을 주는가?1. 구현 전에 서버 구조부터 구분하기멀티플레이 게임의 실행 구조는 크게 다음 세 가지로 나눌 수 있다. 구조 서버 역할 장점 주요 제약 P2P각 피어가 클라이언트..

카테고리 없음 2026.07.30