전체 글 1265

UI의 C++ 클래스 - 최종) 플레이어 위젯의 C++ 클래스 생성과 구현

- 개요로비 레벨에서 사용하는 로비 플레이어 위젯의 C++ 클래스를 생성하고 구현한다 - 스크립트 작업1) SOO_LobbyWidget 클래스 로비 레벨에서 사용할 로비 위젯의 C++ 클래스를 위와 같이 구성한다멤버변수는 다음과 같다UserList 멤버변수 : 플레이어 열 위젯을 들고 있을 VerticalBox 위젯Btn_GameConfig 멤버변수 : 호스트(서버)가 게임의 설정을 진행할 Config 위젯을 띄우는 버튼 위젯LobbyUserWidgetClass 멤버변수 : 플레이어 열 위젯의 서브 클래스 타입LobbyUsers 멤버변수 : 플레이어 열 위젯의 인스턴스들을 저장할 컨테이너 Construct 함수는 위젯이 뷰포트에 추가될 때마다 호출하고,Initialize 함수는 위젯 객체가 생성될 때 ..

UI의 C++ 클래스 - 1) 플레이어 열 위젯의 C++ 클래스 생성과 구현

- 개요동작 구성이 많은 로비 레벨의 위젯 일부를 C++ 클래스로 변경하여 기능을 구현한다 - 스크립트 작업1) SOO_LobbyWidget 클래스 로비 레벨의 메인 위젯에 대한 C++ 클래스를 생성한다 2) SOO_LobbyUserWidget 클래스 로비 레벨에서 플레이어마다의 열을 의미하는 위젯의 C++ 클래스를 생성한다멤버변수를 위와 같이 구성한다Txt_Ready 멤버변수 : 플레이어의 게임 준비 여부를 표시하는 텍스트 위젯Txt_PlayerName 멤버변수 : 플레이어의 이름을 표시하는 텍스트 위젯Editable_PlayerName 멤버변수 : 플레이어의 이름을 수정하는 텍스트 박스 위젯Btn_Ready 멤버변수 : 플레이어의 게임 준비 여부를 설정하는 버튼 위젯Btn_KickPlayer 멤버변수..

UI 구성 - 최종) 게임의 종료

- 개요최종 승자가 결정된 이후에 게임을 종료시키는 기능을 추가한다또, 기존의 코드 구조를 개선한다 - 스크립트 작업1) SOO_GameInstance 클래스 프로젝트에서 사용하는 GameInstance 클래스에서 저장할 데이터의 기본값을 설정한다각각 최대 플레이어 수를 3으로, 최대 봇 수를 10으로 설정한다 2) SOO_GameModeBase 클래스 인게임 레벨에서 사용하는 GameMode 클래스에 3개의 함수를 추가한다 생성자를 추가하여 bUseSeamlessTravel 변수의 값을 True로 설정한다따라서 인게임 레벨에서 다른 레벨로 심리스 트래블을 사용할 수 있도록 설정한다 MoveAtRandomLocation 함수를 추가하여 위와 같이 구성한다레벨에 존재하는 첫 번째 PlayerStart..

UI 구성 - 5) GameInstance의 추가와 심리스 트래블 설정

- 개요게임이 실행되는 동안 필요한 데이터를 관리 + 유지하는 GameInstance 클래스는레벨이 변경되어도 파괴되지 않고 유지된다는 특징이 있다따라서 GameInstance 클래스를 사용하여 로비 레벨과 게임 레벨이 공동으로 사용하는 데이터를 저장한다또, 에디터 상에서도 심리스 트래블을 사용할 수 있도록 설정하여 에디터에서 테스트할 수 있도록 구성한다 - 스크립트 작업1) DefaultEngine.ini 파일 AllowPIESeamlessTravel 속성을 True로 설정하여 에디터에서도 심리스 트래블을 진행하도록 설정한다 2) SOO_GameInstance 클래스 프로젝트에서 사용할 GameInstance 클래스를 생성한다로비의 호스트(리슨 서버)가 설정한 게임의 최대 플레이어 수와 최대 봇 수를 ..

적 추가 - 최종) 최종보스의 구성 (2) + 적의 파괴 VFX 추가

- 개요최종보스는 일정시간마다 주변에 설치된 유닛을 향해 EMP 공격을 가해 유닛을 일시적으로 정지시킨다따라서 해당 기능을 구현하고 또, 파괴된 적에게 시각효과를 추가한다 - 스크립트 작업1) Enemy_Base 클래스 onDeathVFX 멤버변수와 onDeathVFXScale 멤버변수를 추가하여적이 파괴되면서 재생할 VFX 효과와 그 크기를 지정한다 Die 함수와 DestoryEnemy 함수에 로직을 추가하여파괴되면서 VFX 효과를 재생하도록 설정한다 ShouldChangeWaypoint 함수를 오버라이드할 수 있도록 설정하여 최종 보스와 같이 크기가 큰 적들은이동할 좌표를 다른 방식으로 갱신할 수 있도록 설정한다 CreateOnDeathVFX 함수의 로직을 위와 같이 구성하여 onDeathVFX..

적 추가 - 6) 최종보스의 구성 (1)

- 개요모든 웨이브를 클리어한 후에 등장하는 최종보스를 구현한다최종보스는 거미 형태의 적으로 거미와 같은 움직임을 Animation Rigging 패키지를 통한 IK를 사용하여 구현한다 - 스크립트 작업1) Enemy_Base 클래스 EnemyType 열거형에 최종 보스를 의미하는 Final_Boss 멤버를 추가한다 2) Enemy_Boss 클래스 보스에서 사용하는 Enemy 컴포넌트의 클래스를 생성한다 3) BossParts 클래스 보스의 기능을 수행하는 BossParts 클래스를 생성한다멤버변수를 위와 같이 구성한다legMoveSpeed 멤버변수 : 보스의 다리 움직임 속도legs 멤버변수 : 보스의 다리들 Start 함수를 위와 같이 구성하여 legs 멤버변수의 값을 구성하고Update 함수를 위와..

UI 구성 - 4) 강퇴와 닉네임 설정

- 개요리슨 서버의 역할을 맡은 플레이어가 다른 플레이어들을 로비에서 강퇴시킬 수 있는 기능을 추가한다또, 로비에 들어와 있는 플레이어들이 자신의 닉네임을 설정할 수 있는 기능을 추가한다 - 스크립트 작업1) SOO_PlayerState 클래스 로비 레벨과 인게임 레벨 모두에서 사용하는 PlayerState의 코드를 위와 같이 수정한다NickName 변수를 사용하여 플레이어가 원하는 닉네임을 사용할 수 있도록 설정한다 CopyProperties 함수에 로직을 추가하여 닉네임을 Travel 이후에도 유지한 채로 넘겨준다 GetLifetimeReplicatedProps 함수에 로직을 추가하여 닉네임을 레플리케이션할 수 있도록 설정한다 GetKickedByServer 함수는 서버에서 호출하여 클라이언트에..

UI 구성 - 3) 플레이 준비와 게임 입장

- 개요로비 레벨의 플레이어들이 게임에 접속할 수 있도록 준비하고모든 플레이어가 준비되면 게임 레벨로 이동하여 게임을 플레이할 수 있도록 설정한다 - 스크립트 작업1) SOO_PlayerState 클래스 프로젝트에서 사용하는 PlayerState에 위와 같이 함수와 변수를 추가한다bIsReady 멤버변수를 사용하여 플레이어의 게임 플레이 준비 여부를 설정한다 GetLifetimeReplicatedProps 함수를 오버라이드하여 bIsReady 변수가 레플리케이트되어 동기화할 수 있도록 설정한다 OnRep_IsReady 함수를 추가하여 bIsReady가 변경될 때마다 로비 UI를 갱신한다 2) SOO_LobbyPlayerController 클래스 로비 레벨에서 사용할 PlayerController 클래..

UI 구성 - 2) 로비 UI 갱신

- 개요생성된 게임의 로비에 입장한 플레이어에 맞춰 로비 UI를 갱신하는 작업을 추가한다 - 스크립트 작업1) SOO_LobbyHUD 클래스 로비에서 사용할 HUD 클래스에 위와 같이 RefreshUI 함수를 추가한다해당 함수는 BlueprintImplementableEvent 속성을 부여하여 블루프린트에서 오버라이드한다 2) SOO_PlayerState 클래스 로비 레벨과 인게임 레벨에서 공동으로 사용하는 PlayerState 클래스에 위와 같이 3개의 함수를 추가한다 RefreshLobbyUI 함수의 로직은 위와 같다월드를 통해 로컬 플레이어의 PlayerController를 가져오고 다시 HUD 클래스를 가져와 RefreshUI 함수를 호출한다 OnPlayerStateDestroyed 함수를 추..

UI 구성 - 1) 타이틀과 로비

- 개요인게임에 들어가기 전에 거치는 2가지 단계의 레벨을 추가한다각각 타이틀과 로비로서, 타이틀에서는 게임 생성과 게임 입장을 처리한다로비에서는 입장한 게임에 대한 정보를 표현한다플레이어는 타이틀에 입장하여 로비를 거쳐 최종적으로 인게임에서 플레이하게 된다 - 스크립트 작업1) SOO_PlayerState 클래스 인게임 레벨과 로비 레벨은 동일한 PlayerState 클래스를 사용한다이때 레벨에서 레벨로 넘어가는 Travel을 진행할 때 필요한 정보를 유지한 채로 넘겨주기 위해CopyProperties 함수를 오버라이드하여 새로 생성된 PlayerState에 정보를 넘겨준다 2) SOO_LobbyGameModeBase 클래스 로비 레벨에서 사용할 GameMode 클래스를 생성한다bUseSeamles..