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

언리얼엔진5 59

[언리얼엔진5 Part2 복습 / 개인 프로젝트] 1. 복습용 게임 기획 및 개발 기획

이득우의 언리얼엔진 게임 프레임워크 Part2 수강을 완료했다. 복습을 위해 직접 이득우 님의 프레임워크를 모방하여 클론 코딩함과 동시에 나의 개인 프로젝트를 만들어 보고자 한다. 이득우 님은 3인칭 2.5D TopView / ShoulderView RPG 장르의 게임 을 제작하였는데, 나는 여기에 살짝 변주를 주어 1인칭 / 3인칭으로 전환 가능한 FPS 게임을 만들고자 한다. 무한 맵 제작은 생략하기로 하고 개발을 시작하기 전 틀을 짜보았다. 틀은 이득우 님의 강의 순서를 기반으로 작성했다. 메인 브랜치 캐릭터와 입력 시스템 아이템 습득 및 사용 캐릭터 애니메이션 설정 캐릭터 공격 판정 캐릭터 스텟과 위젯 아이템 시스템 게임데이터 관리 행동트리 모델의 이해 행동트리 모델의 구현 헤드업디스플레이의 구현..

[이득우의 언리얼 프로그래밍 Part2 필기] 2. 기타 참고할 사항 (수정예정)

애니메이션 몽타주 몽타주(Montage) : 이미지 일부를 잘라내 한 화면에서 합성하는 회화 기법 애니메이션 클립을 잘라내고 합성한 후 이를 재생하는 애니메이션 기능 애니메이션 클립을 모아둔 다수의 섹션으로 구성되어 있음 섹션끼리 연동할 수 있으며, 스크립트를 통해 원하는 섹션으로 건너뛸 수 있다. 캐릭터 액션의 충돌 판정 월드가 제공하는 충돌 판정 서비스를 사용한다. 월드는 크게 세 가지의 충돌 판정 서비스를 제공함. 월드 내 배치된 충돌체와 충돌하는지 파악하고, 충돌한 액터 정보를 얻을 수 있음.

[이득우의 언리얼 프로그래밍 Part2 필기] 기초 용어 정리

게임플레이 프레임웍 게임 제작을 위해 언리얼 엔진에서 자체적으로 설계한 프레임웍 월드 게임 콘텐츠를 담기 위해 존재하는 가상의 공간 월드는 시간, 트랜스폼, 틱을 서비스로 제공한다. 월드 세팅이라는 콘텐츠 제작을 위한 기본 환경 설정을 제공한다. 월드의 기본 단위는 액터(Actor)로 정의되며, 액터 클래스는 언제나 접두사 A를 사용한다. 게임모드 게임 규칙을 지정하고 게임을 판정하는 최고 관리자 액터. 형태가 없다. 언리얼 엔진에서 하나의 게임에는 반드시 하나의 게임 모드만 존재한다. 게임 모드에서 입장할 사용자의 규격을 지정할 수 있음. 멀티플레이어 게임에서 판정을 처리하는 절대적 권위의 심판 기믹 게임 진행을 위한 이벤트를 발생시키는 사물 액터 주로 이벤트 발생을 위한 충돌 영역을 설정하는데, 이를..

[이득우의 언리얼 프로그래밍 Part1 필기] 15. 언리얼 빌드 시스템

언리얼 에디터의 동작 프로젝트 폴더의 uproject 확장자를 더블클릭하면 에디터가 트리거 됨. 에디터의 실행 방식 uproject 확장자는 윈도우 레지스트리에 등록되어 있음. 등록이 안되어 있다면 런처를 실행해 등록 UnrealVersionSelector 프로그램으로 프로젝트 정보가 넘겨짐 UnrealVersionSelector 는 런처가 저장한 에디터 정보로부터 버전에 맞는 에디터를 실행함 UnrealVersionSelector 소스는 에픽게임즈 GitHub에서 확인 가능 언리얼 에디터 구성 게임 제작을 위해 에픽 게임즈가 제공하는 저작 도구 언리얼 엔진의 구성 에디터 : 게임 제작을 위해 제공되는 응용 프로그램 (일반적으로 인식하는 언리얼 엔진) 게임 빌드 : EXE 파일과 리소스로 이루어진 독립적..

[이득우의 언리얼 프로그래밍 Part1 필기] 14. 오브젝트 관리 II 패키지

언리얼 오브젝트 패키지 단일 언리얼 오브젝트가 가진 정보는 저장할 수 있지만, 오브젝트들이 여러 개 조합되어 있다면? -> 복잡한 계층 구조를 가진 언리얼 오브젝트를 효과적으로 저장하고 불러들이는 방법을 통일해야 함. 언리얼 엔진은 이를 위해 패키지(UPackage) 단위로 언리얼 오브젝트를 관리함. 패키지의 중의적 개념 언리얼 엔진은 다양한 곳에서 단어 패키지를 사용하고 있음. 언리얼 오브젝트를 감싼 포장 오브젝트를 의미함. 개발된 최종 콘텐츠를 정리해 프로그램으로 만드는 작업. DLC와 같이 향후 확장 콘텐츠에 사용되는 별도의 데이터 묶음을 의미하기도 함. 패키지(Package) 와 에셋(Asset) 언리얼 오브젝트 패키지는 다수의 언리얼 오브젝트를 포장하는데 사용하는 언리얼 오브젝트. 모든 언리얼 ..

[이득우의 언리얼 프로그래밍 Part1 필기] 13. 오브젝트 관리 I 직렬화

직렬화 오브젝트나 연결된 오브젝트의 묶음(오브젝트 그래프)을 바이트 스트림으로 변환하는 과정 복잡한 데이터를 일렬로 세우기 때문에 직렬화 라고 불린다. 거꾸로 복구시키는 과정도 포함해서 의미 시리얼라이제이션(Serializaiton) : 오브젝트 그래프에서 바이트 스트림으로 디시리얼라이제이션(Deserialization) : 바이트 스트림에서 오브젝트 그래프로 직렬화가 가지는 장점 1. 현재 프로그램의 상태를 저장하고 필요할 때 복원할 수 있다. (게임의 저장) 2. 현재 객체의 정보를 클립보드에 복사해서 다른 프로그램에 전송할 수 있다. 3. 네트워크를 통해 현재 프로그램의 상태를 다른 컴퓨터에 복원할 수 있다. ( 멀티플레이어 게임) 4. 데이터 압축, 암호화를 통해 데이터를 효율적이고 안전하게 보관..

[이득우의 언리얼 프로그래밍 Part1 필기] 12 . 언리얼 엔진의 메모리 관리

C++ 언어 메모리 관리의 문제점 C++ 는 저수준으로 메모리 주소에 직접 접근하는 포인터를 사용해 오브젝트를 관리한다. 그러다보니 프로그래머가 직접 할당(new)과 해지(delete) 짝 맞추기를 해야 한다. 이를 잘 지키지 못하는 경우 다양한 문제가 발생할 수 있음. 잘못된 포인터 사용 예시 메모리 누수(Leak) : new를 했는데 delete 짝을 맞추지 못함. 힙에 메모리가 그대로 남아있음. 허상(Dangling) 포인터 : (다른 곳에서) 이미 해제해 무효화된 오브젝트의 주소를 가리키는 포인터. 와일드(Wild) 포인터 : 값이 초기화되지 않아 엉뚱한 주소를 가리키는 포인터. 잘못된 포인터 값은 다양한 문제를 일으키며, 한 번의 실수는 프로그램을 종료시킴(Crash). 게임 규모가 커지고 구조..

[이득우의 언리얼 프로그래밍 Part1 필기] 10 - 11. TArray, TSet, 구조체, TMap

C++ STL과 언리얼 컨테이너 라이브러리의 차이점 C++ STL 언리얼 컨테이너 라이브러리 (언리얼 자체제작) 범용적으로 설계되어 있다. 언리얼 엔진에 특화되어 있다. 표준이기 때문에 호환성이 높다. 언리얼 오브젝트 구조를 안정적으로 지원한다. 많은 기능이 엮여 있어 컴파일 시간이 오래 걸림. 가볍고 게임 제작에 최적화되어 있음. TArray - 오브젝트를 순서대로 담아 효율적으로 관리하는 용도 TSet - 중복되지 않는 요소로 구성된 집합을 만드는 용도로 사용 TMap - 키, 밸류 조합의 레코드를 관리하는 용도로 사용 TArray C++ STL 의 Vector 와 유사하다. 동적할당 불가 / 가변 배열 데이터가 순차적으로 모여있어서 효과적 사용이 가능하다. 캐시 효율이 높다. 배열의 맨 끝 추가는 ..

[이득우의 언리얼 프로그래밍 Part1 필기] 9. 설계 : 델리게이트

강한 결합 클래스들이 서로 의존성을 가지는 경우. 이전에 예시에서 사용한 Card를 Person이 가지고 있다고 가정했을 때, Card가 없는 경우 Person이 만들어질 수 없다. 이때 Person은 Card 에 대한 의존성을 가진다고 한다. 느슨한 결합 실물에 의존하지 말고 추상적 설계에 의존하라.(DIP 원칙) Person 이 Card 가 필요한 이유는 출입 확인 때문 출입에 관련된 추상적인 설계에 의존하면 ICheck 를 상속받은 카드 인터페이스를 선언해서 해결 유지 보수를 쉽게 만들어 준다. ※ DIP원칙 : 의존 역전 원칙 - DIP (Dependency Inversion Principle) DIP 원칙이란 객체에서 어떤 Class를 참조해서 사용해야하는 상황이 생긴다면, 그 Class를 직접..

[이득우의 언리얼 프로그래밍 Part1 필기] 7-8. 언리얼 C++ 설계(인터페이스, 컴포지션)

언리얼 C++ 인터페이스반드시 구현할 행동을 지정하는데 활용한다.접두사 U-> Type 클래스 / 접두사 I -> 인터페이스 클래스언리얼 C++ 인터페이스는 자바 등과 다르게 기본로직에 구현이 가능하다.인터페이스에서 가상 함수를 선언하게 되면 상속받은 클래스들은 구현이 필수이다.가상함수를 인터페이스 내에서 꼭 가상으로 유지할 필요 없다. 인터페이스 선언에서도 코드 구현이 가능하다. (단지 이때는 하위 클래스에서 구현을 하면 안된다. 추상이 아니므로.)class UNREALINTERFACE_API ILessonInterface{ GENERATED_BODY()public: UNREALINTERFACE_API (프로젝트 이름_API) 이 전처리 구문은 외부 모듈이 현재 모듈 내의 클래스에 접근 가능한지 지시하..