전체 글 1281

GameFeature에 대하여

- 개요언리얼 엔진에서 제공하는 GameFeature 시스템에 대해서 알아본다 1) 기존 구조의 문제점 위의 이미지는 GameFeature를 사용하지 않는 기존의 개발 방식과 사용하는 방식의 차이점을 정리한 이미지이다기존의 개발 방식에서 발생할 수 있는 문제점은 다음과 같다1) 뒤엉킨 코드 : 이벤트 기간이 종료되도 남아있는 잔여 이벤트 코드나 기능들간의 강한 결합2) 비효율적인 확장 : DLC나 확장팩 개발 시 프로젝트 전체 빌드 그러므로 GameFeature 시스템은 기능의 플러그인화를 바탕으로 동작하므로 기존의 문제를 해결할 수 있다기존 방식과 비교되는 GameFeature의 장점은 다음과 같다각 기능을 독립적인 모듈로 캡슐화하여 관리 런타임 중에 기능을 토글하여 자유롭게 켜고 끌 수 있음 기본 게..

Iris 플러그인에 대하여

- 개요기존 언리얼 엔진의 레플리케이션 시스템을 대체하는 Iris 플러그인에 대해서 알아본다 1) 기존 언리얼 엔진의 네트워크 3단계 계층 구조 기존 언리얼 엔진의 네트워크는 위와 같이 3단계 계층 구조로 표현할 수 있다1) 패킷 - 일반 UDP에 비트 단위로 정보를 저장 2) 번치 - UDP를 보정하여 신뢰성과 순서 보장을 담당하는 단위 3) 채널 - 번치가 누구를 위한 것인지 지정하는 통로 위 3개의 구성 요소 중에서 채널의 ActorChannel이 핵심으로 Replicate된 Actor마다 하나씩 생성되어 변수 업데이트와 RPC 함수를 실행한다 2) 기존 ActorChannel에서의 문제점 그러나 기존에 사용하는 ActorChannel에서는 위와 같은 3개의 문제점이 발생할 수 있다1) Channe..

자유로운 3차원 회전의 구현

- 개요트랜스폼의 회전 시스템을 사원수로 교체하였으므로사원수에서 제공하는 선형 보간을 활용하여 부드럽게 이동하는 카메라 회전을 구현할 수 있다 - 예제 씬 로딩을 처리하는 LoadScene3D 함수의 로직을 위와 같이 구성한다생성하는 500개의 게임 오브젝트에 대해서 X / Y / Z 축에 대해 랜덤하게 [-3000, 3000]의 범위로 생성한다 매 프레임마다 호출되어 게임 로직을 처리하는 Update3D 함수의 로직을 위와 같이 구성한다회전 보간에서 사용할 시작 회전과 목표 회전을 전역 변수로 지정한다이후의 로직은 다음과 같다축 방향과 각을 설정하기 위한 랜덤 함수를 선언시간에 따른 카메라의 회전 보간을 진행하고 상황에 따라 분기하여 처리지정한 시간이 경과한 경우시작 회전을 목표 회전으로 갱신랜덤함수..

사원수의 활용

- 개요 현재까지 프로젝트에서 3차원의 회전 트랜스폼은 오일러 각 방식의 구조체인 Rotator가 담당하고 있다그러나 오일러 각 방식만을 사용하는 것은 짐벌락 현상을 유발할 수 있으므로 위와 같이 분기하여 처리한다3차원 공간에서 움직이지 않는 물체의 회전을 설정하고, 회전에 관련된 정보를 표현할 때는 오일러 각 방식을,시간에 따라 변하는 회전을 처리할 때는 짐벌락 현상이 없는 사원수를 사용하여 처리한다따라서 최종적으로 다음과 같이 처리한다게임 로직 : 직관적인 오일러 각 방식을 사용트랜스폼의 회전 시스템 : 트랜스폼의 안정적인 구동을 위해 사원수를 사용렌더링 로직 : MVP 복합 행렬에서 Model 행렬에 필요한 회전 변환행렬을 사용따라서 세 개의 시스템을 서로 변환할 수 있는 기능을 도입 - 예제에서의..

유닛 추가 - 5) 드론 타워 유닛의 추가

- 개요가까운 위치의 적을 향해 날아가 자폭하는 드론을 생성하는 유닛을 추가한다 - 스크립트 작업1) Pool_DroneNest 클래스 기관총 타워와 동일하게 ObjectPool 타입을 사용하여 생성한 드론을 관리한다멤버변수는 위와 같다dronePrefab 멤버변수 : 생성할 드론의 프리팹defaultCapacity 멤버변수 : 드론의 최소 생성 개수maxSize 멤버변수 : 드론의 최대 생성 개수dronePool 멤버변수 : 드론을 관리할 오브젝트 풀 Awake 함수를 추가하여 InitializePool 함수를 호출한다InitializePool 함수의 로직은 위와 같다오브젝트 풀을 생성할 때 + 풀에서 가져올 때 + 풀에 다시 반납할 때 + 풀에 저장한 객체를 파괴할 때 호출할 콜백 함수들을 지정하고..

OnlineSubsystem - 최종) 세션의 시작과 종료

- 개요필요에 따라 생성된 세션을 시작하거나 종료할 수 있도록 구현한다호스트가 세션을 생성하고 게임을 시작하면 세션을 시작하고호스트가 퇴장하여 Room이 해산되거나 클라이언트가 호스트에 의해 퇴장되면 세션을 종료한다 - 스크립트 작업1) DefaultEngine.ini 파일 DefaultEngine.ini 파일에 위와 같이 속성을 추가하여 OnlineSubsystem Steam 플러그인을 사용할 수 있도록 설정한다 2) StartSessionCallbackProxyAdvanced 클래스 StartSessionCallbackProxyAdvanced 클래스를 위와 같이 수정하여Advanced Sessions 플러그인의 C++ 함수를 다른 모듈에서 호출할 수 있도록 수정한다 3) SOO_LobbyGameMod..

OnlineSubsystem - 5) Advanced Sessions 플러그인을 사용한 방 제목과 맵 설정

- 개요Advanced Sessions 플러그인을 사용하여 호스트가 Room의 이름과 플레이할 맵의 이름을 설정하고설정된 내용을 다른 클라이언트들이 확인할 수 있도록 구성한다 - Advanced Sessions 플러그인 설정 절차https://vreue4.com/advanced-sessions-binaries Advanced Sessions Binaries – VR Expansion Plugin vreue4.com 위의 사이트에서 진행중인 프로젝트의 엔진 버전과 동일한 플러그인 파일을 다운받는다 uproject 파일과 동일한 경로에 Plugins 폴더를 생성하고다운받은 파일 내부의 AdvancedSessions 폴더와 AdvancedSteamSessions 폴더를 드래그 앤 드롭한다이후 Generate..

OnlineSubsystem - 4) C++을 이용한 비동기 처리

- 개요C++을 사용하여 Online Subsystem의 비동기 세션 생성 패턴을 사용해본다해당 패턴은 델리게이트를 사용하여 구현한다 - 스크립트 작업1) SOO_OnlieSessionsSubsystem 클래스 GameInstanceSubsystem 클래스에 필요한 함수와 변수들을 추가한다CreateCompleteDelegate 멤버변수 : 세션 생성 완료시에 호출할 함수를 보관하는 델리게이트 CreateCompleteDelegateHandle 멤버변수 : 델리게이트를 등록할 때 반환되는 핸들 + 등록한 델리게이트를 제거하는 용도 생성자를 위와 같이 수정하여 세션 생성 완료 시 OnCreate 함수를 델리게이트에 연결한다 Initialize 함수에서 로그를 찍던 코드를 제거한다 CreateSessi..

OnlineSubsystem - 3) 세션 생성

- 개요OnlineSubsystem 플러그인에서의 세션은 여러 플레이어가 함께 멀티플레이 게임을 플레이하기 위해 구성하는 하나의 게임 참여 단위를 의미한다이전에 알아본 Room과 관련 정보들이 세션을 의미하게 된다따라서 OnlineSubsystem을 사용하여 세션을 생성하는 기능을 추가한다이때 OnlineSubsystem을 사용하는 방법은 3가지로 구분할 수 있다C++로 직접 구현 : 높은 자유도 + 복잡하고 넓은 구현 방식기본 블루프린트 노드 사용 : 간단한 구현 + 노드에서 제공하는 설정에 제약이 존재Advanced Sessions 플러그인 사용 : 기본 노드에서 확장된 기능을 제공 위의 3가지 방법 중에서 마지막 방법인 Advanced Sessions 플러그인을 사용하여 OnlineSubsyste..

OnlineSubsystem - 2) Room의 추가

- 개요OnlineSubsystem 플러그인을 프로젝트에 추가하여 플랫폼에 맞춰 마스터 서버를 설정할 수 있도록 구성한다그리고 타이틀 - 로비 - 인게임의 구성으로 되었던 기존의 레벨 구성에서타이틀과 로비 레벨 사이에 Room 레벨을 추가하여 방 목록과 입장할 방을 선택하도록 수정한다따라서 플레이어는 로비 레벨에서 입장한 방에 대한 정보(참여중인 플레이어들)를 확인할 수 있다 - 스크립트 작업1) 플러그인 설정 Build.cs 파일에서 PublicDependencyModuleNames 속성을 위와 같이 수정하여OnlineSubsystem 관련 플러그인을 추가하고 해당 프로젝트는 스팀에서 서비스할 예정이므로OnlineSubsystemSteam 플러그인을 추가한다 에디터를 실행시켜 Online Subsys..