< '언리얼엔진5' 카테고리의 글 목록 (3 Page)

언리얼엔진5 59

[이득우의 언리얼 프로그래밍 Part3 필기] 8. RPC 기초

RPC(Remote Procedure Call) 이란?원격 프로시저(함수) 호출의 약자원격 컴퓨터이 있는 함수르 호출할 수 있도록 만든 통신 프로토콜네트웍 멀티플레이에서 서버와 클라이언트간에 빠르게 행동을 명령하고 정보를 주고받는 데 사용언리얼 엔진에서 클라이언트에서 서버로 통신하는 유일한 수단을 제공한다.  ++)오너십을 가지는 액터의 경우 클라이언트에서 서버로 명령을 내릴 수도 있음  https://docs.unrealengine.com/4.27/ko/InteractiveExperiences/Networking/Actors/RPCs/ RPC네트워크를 통한 함수 리플리케이션 지정하기 입니다.docs.unrealengine.com Client RPC 개요서버에서 클라이언트로 호출하는 RPC이를 활용해 특..

[이득우의 언리얼 프로그래밍 Part3 필기] 7. 액터 리플리케이션 로우레벨 플로우

우선권이란?   우선권을 설정할 때 대역폭보다 커서 전송하지 못한 후순위의 액터를 다음 틱에서 전송할 방법이 필요한데 그것이 우선권 설정이다. 우선권 설정 로직   액터의 휴면 이란?  flushnetdormancy() 함수를 통해 휴면 해제가 가능하다. 네트웍 트래픽 포화(Saturation) 예시  위와 같이 우선순위가 밀려 전송되지 못한 패킷은 다음 틱에 전송된다.  액터 리플리케이션의 흐름   액터 리플리케이션을 진행할 때 가장 먼저 진행되는 것이 네트워크로 업데이트할 액터의 목록이다.서버가 매 틱마다 이들을 클라이언트로 전송하는데 각 액터의 정보는 FNetWorkObjectInfo 라고 하는 구조체에 정리가 되어 있다. (대표적 필드: 다음 전송 시간을 나타내는NextUpdateTime, bPe..

[이득우의 언리얼 프로그래밍 Part3 필기] 6. 액터 리플리케이션 빈도와 연관성

언리얼 인사이트 언리얼 프로그램의 다양한 퍼포먼스를 체크할 수 있는 강력한 프로파일링 도구언리얼 엔진에 포함되어 있음프로그램 프로파일링 뿐만 아니라 네트웍 상태도 확인할 수 있다.   액터 리플리케이션의 빈도   주요 액터에 설정된 빈도 값   네트웍 데이터 줄이기규칙적으로 움직이는 액터의 네트웍 통신 데이터를 줄이는 예제NetUpdateFrequency 속성 값을 1로 설정데이터 공백을 클라이언트에서 부드러운 움직임으로 보완하기이전 복제된 데이터에 기반해 현재 틱에서의 회전 값을 예측클라이언트에서 예측된 값을 보간해 회전   ABFountain 의 소스 코드 // Called every framevoid AABFountain::Tick(float DeltaTime){ Super::Tick(DeltaTi..

[이득우의 언리얼 프로그래밍 Part3 필기] 5. 액터 리플리케이션 기초

액터 리플리케이션특정 플레이어에 속한 액터의 정보를 네트웍 내 다른 플레이어에게 복제하는 작업클라이언트 - 서버 모델에서는 대부분 서버에서 클라이언트로 전달함.리플리케이션의 방법에는 크게 두 가지가 있음.1. 프로퍼티 리플리케이션2. RPC (Remote Procedure Call)   기본 액터의 로딩클라이언트가 초기화 될 떄 모든 액터 정보를 서버로부터 받는 것은 비효율적따라서 기본 배경에 관련된 액터는 맵을 통해 스스로 로딩하도록 설계되어 있음.고정으로 제공하는 액터와 동적으로 생성하는 액터고정으로 제공하는 액터의 예 : 레벨을 구성하는 배경 액터동적으로 생성하는 액터의 예 : 플레이어 컨트롤러와 폰고정 액터에 대해 NetLoadOnClient속성을 체크해야 함 (기본값)   리플리케이션 작업에서 ..

[이득우의 언리얼 프로그래밍 Part3 필기] 4. 액터의 역할과 커넥션 핸드셰이킹

서버와 클라이언트에 위치한 액터의 역할클라이언트 - 서버 모델에서는 항상 서버에 있는 액터만이 신뢰됨.이를 Authority(권위)를 가진다고 표현함.클라이언트의 액터는 대부분 서버 액터를 복제한 허상에 불과함.이러한 액터를 Proxy라고 표현함.   로컬 역할과 리모트 역할리슨서버의 경우 플레이어로서 게임에도 참여하므로, 어플리케이션의 게임 로직을 사용한다.어플리케이션의 게임 로직은 서버 액터에 대해서만 게임에 관련된 작업을 수행해야 한다.이를 구분하기 위해 현재 동작하는 어플리케이션에서의 역할을 로컬 역할(Local Role), 커넥션으로 연결된 어플리케이션에서의 역할을 리모트 역할(Remote Role)이라고 한다.    액터 역할의 종류None : 액터가 존재하지 않음.Authority : 서비스..

[이득우의 언리얼 프로그래밍 Part3 필기] 3. 커넥션과 오너십

액터의 준비와 게임의 시작   PostInitializeComponents 는 게임과 무관한 액터 설정의 초기화 함수이다. 따라서 네트워크 접속 클라이언트를 위해 PostNetInit 함수를 제공한다. PostNetInit 은 원격 클라이언트에서 호출되는데 서버에서 변경된 내용, 속성, 다양한 값들을 모두 전달받아 액터 세팅이 모두 마무리 될 때 호출된다.  하이레벨 게임을 구성하는 단위인 액터, 컴포넌트 , 월드 등 이 콘텐츠를 구성하는 오브젝트의 상태와 속성에 관련된 상위 개념  로우레벨 위 같은 상태와 속성을 네트웤을 통해 전달하기 위해 만들어진 데이터 스트림  네트웍 통신을 담당하는 주요 클래스   PlayerController : 네트워크 커넥션을 관리하는 콘텐츠를 대표하는 액터 UNetConn..

[이득우의 언리얼 프로그래밍 Part3 필기] 2. 게임 모드와 로그인

Standalone네트워크 연결 X , 모든 플레이어가 로컬 플레이어.멀티플레이어를 고려하지 않고 막 짜면 멀티플레이어 전환 시 코드 사용 불가하다. Client서버 측 로직을 실행 않고 서버에게 받은 콘텐츠를 보여주는 프록시 Listen Server게임이 서버의 역할을 가지고 있음로컬 플레이어를 서버에 직접 배치 Dedicated Server원격 클라이언트의 연결을 허용하지만 로컬 플레이어가 없음MMORPG 등에 사용신뢰할 수 있는 고성능 서버가 필요한 게임에 사용  리슨 서버의 게임 서비스 게임 서비스 준비스탠드얼론 게임 시작 -> 게임모드 생성 -> 플레이어 컨트롤러 0 생성 게임 서비스 시작리슨서버로 게임 서비스 시작 -> 로비 생성 등등 ..

[이득우의 언리얼 프로그래밍 Part3 필기] 1. 언리얼 네트웍 멀티플레이어 프레임워크 개요

멀티플레이어와 싱글플레이어 게임은 호환 가능하다 멀티를 만든다면 처음부터 고려를 해야 한다.    클라이언트 - 서버 모델 클라이언트는 서버의 정보를 복제해서 서버에 띄워주기만 하는 역할  서버는 게임 데이터에 대한 정보를 클라이언트에 복제해서 보낸다. 서버는 클라이언트의 정보를 그대로 복사해서 가지고 있고,   플레이어1 총알 발사 -> 서버로 총알 발사 명령 보냄 -> 서버에서도 총알이 날라감-> 플레이어2 에게 명중(서버) -> 서버가 명중 명령을 모든 클라이언트에게 보냄  식으로 진행된다. 필수 게임 플레이의 상호작용 / 정보 등을 구분해서 전송한다.모든 정보를 다 전송하면 대역폭 제한 때문에 게임플레이에 영향을 미칠 수 있다.  블루프린트 대신 C++ 을 사용하는 이유

[언리얼엔진5 Part2 복습 / 개인 프로젝트] 3. 아이템 습득 및 사용

기존 강의와 다른 방향인 FPS 로 가닥을 잡았기 때문에, 기존 로드맵에서 많은 부분들을 덜어내고 바로 아이템 습득부터 구현하는 것이 옳다고 판단이 되었다. 1인칭 기본 템플릿에서는 플레이어가 스폰되면 앞에 총이 놓여져 있는데, 총에 가까이 가면 총이 들어지고 투사체를 발사할 수 있다. 좌클릭을 누르면 투사체를 발사하는데, 이 모든 것을 c++ 로 직접 다시 짜 볼 생각이다. OnComponentBeginOverlap 설정한 지름(32.0f) 크기의 충돌 캡슐컴포넌트를 가진 총과 플레이어가 맞닿으면(overlap) 총을 집어들도록 하기 위해 PrimitiveComponents.h 에 내장된 델리게이트 OnComponentBeginOverlap 을 사용하였다. 사용법은 https://docs.unreale..

[언리얼엔진5 Part2 복습 / 개인 프로젝트] 2. 캐릭터와 입력시스템

캐릭터와 입력시스템 1인칭 기본 템플릿과 이득우 님의 강의 코드를 기반으로 캐릭터 이동 및 카메라 회전까지 구현하였다. 코드를 복습하면서 2번 브랜치에 주석을 달아 놓았다. https://github.com/chataeg/GunBattle/tree/2 GitHub - chataeg/GunBattle Contribute to chataeg/GunBattle development by creating an account on GitHub. github.com 이해하기 가장 애먹었던 부분은 Move 함수였다. 직접 만든 Move 함수 void AGBCharacterPlayer::Move(const FInputActionValue& Value) { FVector2D MovementVector = Value.Ge..