전체 글 11

[UE5/패키징] 언리얼 게임 패키징(빌드)하기

언리얼 게임 패키징 할때 누락해서 애먹은 것들 몇 가지만 정리해보려고 한다. * 이 목록은 패키징 과정에서 문제가 생길 때마다 업데이트할 예정이다. 1. Default Map 설정 확인하기 Edit > Project Settings > Maps & Modes에서 설정할 수 있다. 디폴트로 원하는 레벨 (메인화면, 시작화면 등등)이 설정되어있는지 확인해주어야 한다. 에디터 맵도 지정해줄 수 있음! (언리얼 에디터 처음 킬 때 뜨는 맵) 2. Game Instance 설정 확인하기 Edit > Project Settings 에서 "game instance" 검색하면 나온다. 물론 이 항목은 빠뜨렸다면 어차피 에디터에서부터 오류가 날 거기 때문에 빌드했을 때 새롭게 발견되는 문제는 아니다. 할당이 안 되어 있..

언리얼엔진 UE5 2023.05.30

[UE5] 게임 인스턴스와 게임 모드

언리얼은 유니티랑은 정말 다르고 지원하는 기능도 많아서 개념을 잘 이해하고 활용하는 게 정말 중요하다. 처음에 헤매던 나에게 대충 감을 잡을 수 있게 해준 별거 아니지만 꽤 도움되는 구조에 대해 정리해보려고 한다. 게임 모드 (Game Mode) 게임 모드(Game Mode)는 게임 속에서 다양한 설정을 바꿔 낄 수 있는 기본적인 세팅이라고 보면 된다. ex) - 이지 모드에서는 input을 1가지만 받아오지만, 하드 모드에서는 input을 2가지 받아온다. - 레벨 1은 캐릭터A로 플레이하지만, 레벨 2는 캐릭터B로 플레이한다. - (주로 콘솔게임에서) 메뉴 화면에서의 클릭과 플레이화면에서의 발사 input이 A키로 중복된다. 등등... 이런 부분을 일일히 if문으로 구분하는 건 말도 안되고, 따라서 ..

언리얼엔진 UE5 2023.05.30

[UE5/매크로] 딜레이 있는 for loop 만들어보기

언리얼 블루프린트에서 제공하는 for loop에서는 delay를 주면 적용이 되지 않는다. 하지만 for loop with delay라는 새로운 매크로를 직접 만들어서 라이브러리화를 할 수 있다! 매크로(Macro)란? Blueprint Macro (블루프린트 매크로) 또는 Macro (매크로)는 본질적으로 노드 그래프를 접은 것과 같습니다. 터널 노드로 지정되는 입구와 출구가 있습니다. 각 터널에는 다른 블루프린트와 그래프에서 사용될 때 매크로 노드에 보이는 실행 또는 데이터 핀이 몇 개든 있을 수 있습니다. 거의 함수와 유사하다고 보면 될 것 같다. 실행 핀을 만들어줄 수 있다는 점이 큰 차이점이다. 원하는 블루프린트에 매크로를 하나 추가해서 제목을 ForLoopWithDelay로 지어준다. 디테일 ..

언리얼엔진 UE5 2023.05.03

[UE5/CSV] 블루프린트에서 게임 데이터 관리하기 (다차원 배열 문제 해결)

언리얼 엔진은 다차원 배열을 지원하지 않는다. 여기저기 찾아봤는데... 정말로 없다. (충격) 하지만 게임 데이터를 복합적으로 저장해 주려면 이 형태가 편한 경우가 굉장히 많고, 지금 작업하고 있는 게임의 경우 다차원 배열 형태가 정말 꼭 필요해서 다른 방법을 찾다가 csv라는 걸 알게 되었다!! CSV란? CSV(comma-separated values)는 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일이다. 쉽게 말해, 엑셀로 정리해두는 데이터 테이블을 프로그램이 읽을 수 있는 형태로 바꿔주는 것이다. CSV 파일 만들기 우선 엑셀 파일을 만든다. 테이블에 필요한 데이터를 저장하여 채운다. 각 카테고리의 이름은 블루프린트에서도 그대로 쓰게 될 거니까 신중히 결정해서 써야 한다. 첫 ..

언리얼엔진 UE5 2023.04.01

[UE5/UMG] 블루프린트로 위젯 위치(position) 설정하기

UMG에서 위젯과 슬롯이란? 위젯(widget): UMG 팔레트에서 추가할 수 있는 요소들 (예: 이미지, 텍스트 등) 슬롯(slot): UMG상의 위젯들을 하나로 묶어주는 하나의 묶음 (예: 캔버스 패널) 블루프린트에 적용 언리얼 UMG에서의 이미지의 위치를 블루프린트로 설정해 주고 싶어서 다음 함수를 사용했는데... 작동하지 않았다 아마 "위젯의 위치"를 설정해주는 게 아닌 "위젯을 포함된 슬롯"의 위치를 잡아주는 함수여서 그런게 아닌가 싶다. 다음과 같이 수정해서 돌리니까 작동했다!! 생각보다 쉬운 문제였는데 개념을 잘못 이해해서 오래 붙잡고 있었다.. 결론: 블루프린트에서 위젯의 위치 정보를 설정하려면 형변환을 해서 슬롯을 통해 바꾸어주어야 한다. 다음 페이지 참고 https://docs.unre..

언리얼엔진 UE5 2023.03.17

04. 주석

코드는 여기저기 움직이면서 변할 수 있으므로 주석이 미아가 되는 경우가 있음.. -> 따라서 부정확한 주석은 없는 것보다 훨씬 나쁘다!! 주석은 나쁜 코드를 보완하지 못한다 주석을 써서 수습하려 하지 말고 걍 코드를 다시 손보기 코드로 의도를 표현하라! 이름 잘 지으면 웬만하면 코드로 의도 다 표현할 수 있다. 좋은 주석 제일 좋은 주석은 주석 안 다는 방법을 찾아낸 주석이다. 그래도 좀 필요한 주석들 몇가지 법적인 주석: 회사가 공통으로 지정한 주석 정보를 제공하는 주석: 반환값 설명 등 의도를 설명하는 주석 의미를 명료하게 밝히는 주석 결과를 경고하는 주석: 특정 테스트 케이스는 꺼야 할 때 TODO 주석: 앞으로 해야할 일 정리 중요성을 강조하는 주석 공개 API에서 Javadocs 나쁜 주석 대다..

클린코드 2022.02.06

03. 함수

작게 만들어라! 무조건!!! 함수는 작게 만들어야 한다. 정말 최대한 짧게 만드는 게 가장 좋음. (글에서 든 예시는 5줄) 블록과 들여쓰기 if/while문 등에 들어가는 블록은 한줄이어야 함. 중첩 구조가 생겨서는 안된다. 한 가지만 해라! 함수는 한 가지를 해야 한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 함수 내 섹션 함수 내에 섹션이 나뉘는지 확인하기. 나뉘어진다면, 하나만 하는 함수가 아닌 것 함수 당 추상화 수준은 하나로! 근본 개념과 세부사항을 뒤섞지 않기!! 각 코드의 추상화된 정도를 통일해야 함. 위에서 아래로 코드 읽기: 내려가기 규칙 코드는 위에서 아래로 이야기처럼 읽히는 것! 위에서 아래로 추상화 수준이 한 단계씩 낮아진다. Switch 문 switch문은 작..

클린코드 2022.01.30

02. 의미 있는 이름

의도를 분명히 밝혀라 코드가 하는 일을 짐작할 수 있어야 한다. 1. 코드의 단순성이 아니라 코드의 함축성 2. 각 개념에 이름을 붙이기!! 예: if(x[0]==4) 대신 if(cell[STATUS_VALUE]==FLAGGED) 그릇된 정보를 피하라 1. 예를 들어, 실제 List가 아니라면 accountList라는 이름을 붙여서는 안됨. List는 특수한 용어이기 때문!! 이는 그릇된 정보를 제공하는 것.. 2. 서로 흡사한 이름을 사용하지 않도록 주의. 3. 유사한 개념은 유사한 표기법 사용! 일관성이 떨어지는 표기법도 그릇된 정보이다. 4. L과 1, O와 0가 헷갈리는 참사.. 주의하기 의미 있게 구분하라 같은 개념을 사용하지 못해 나머지 하나의 철자를 살짝 바꾸게 되면.. 철자 오류를 고치는 ..

클린코드 2022.01.23