프젝 설정 ❗

CJB_ny·2023년 1월 6일
0

득언리얼

목록 보기
8/12
post-thumbnail

이번장은 언리얼 엔진의

  • UE 빌드 방식
  • UE의 모듈 개념

    추가적으로 dll파일이 정확히 뭔지

  • INI 파일

    INI파일 개념,
    INI 설정과 에셋 지연로딩

등을 알아보는 장인거같다.

처음 해보는 그런 부분이다 보니 이해가 조금 힘들긴 했지만 해야하는 부분이다.

INI 설정과 에셋의 지연 로딩

INI파일이란?

https://najsulman.tistory.com/424

즉 뭔가를 초기화 할 때 필요한 파일 정도로 알아도 일단은 ㄱㅊ은듯.

언리얼 오브젝트가 기본값을 INI파일에서 불러들일려면, UCLASS매크로에 config 키워드를 추가해 여기에 불러들일 INI파일의 이름을 추가.

불러들일 PROPERTY속성에는 config 키워드를 선언한다.

이렇게 선언하면 언리얼 엔진은 언리얼 오브젝트를 초기화할 때 해당 속성의 값을 INI파일에서 읽어 설정한다.

동기 비동기

에셋을 어쨋든 비동기 방식으로 로드를 할 것이다.

뭐 코드는 이런데 전체 코드를 아직 이해하는것은 나한테 무리이고 흐름만 어느정도 파악을 하면 될거같다.

흐름 정리

UE는 모듈의 집합체이다.

모듈을 계속 쌓아 올려? 서 만든 느낌임. 모듈을 여러개 붙인 느낌이기도 하고.

이 모듈을 사용을 할려면은 .Build.cs라는 파일에 선언을 해주어야함.(즉 등록 하는 부분)

그리고 모듈을 등록을 했으면 이 모듈을 어떻게 빌드를 할 것인지도 .ueproj파일인가 그거 vsc나 메모장으로 열어서

어떤 모듈이 어떤 모듈에 종속적인 모듈이다~~ 라고 적어주는 작업까지하면됨.

이까지하면은 "모듈"은 추가하는 부분이 끝남.

이후에 INI파일 사용하는 부분이 나오는데

여기서 좀 많이 중요한 개념이 나온다 "CDO"라는 개념이 나오는데 이전에도 잠깐잠깐 보기는 했지만

여기서 디테일?하게 왜 CDO가 생기는지 이해를 하게됨.

언리얼 엔진이 초기화 되면서 엔진구동에 필요한 모듈이 순차적으로 로딩됨.
모듈이 로딩되면서 모듈은 자신에게 속한 모든 언리얼 오브젝트의 기본값을 지정해 생성해내는데, 이를 클래스 기본 객체 즉, CDO라고한다.

그래서 엔진이 초기화 되면서 모든 언리얼 CDO들이 메모리에 올라간 상태가 된다.
(메모리에 올라가있는 상태가 중요한데, 이래서 값부분들은 0으로 셋팅이 되고 다른 UPROPERTY()도 셋팅이 되는데 nullptr이였는지 뭐였는지 까먹음..ㅎ)

이렇게 메모리에 올라간 클래스는 GetDefault함수를 통해 가져올 수가 있음.

그래서 클래스가 기본값을 INI파일에서 불러들일려면 UCLASS속성을 config=ArenaBattle이런식으로 잡아주고

에셋경로 정보를 저장하기 위해 FSoftObjectPath라는 클래스를 사용함.

UCLASS메크로에 config=ArenaBattle해버리면 초기화 단계에서 config 폴더에 위치한 DefaultArenaBattle.ini라는 파일을 읽어들여 ArenaBattleSetting의 CharacterAssets값을 설정한다.

이녀석이 값이 설정된다는 것임.

그래서 ABCharacter에서 아래처럼 막바로 사용이 가능했음.

무한맵 제작 ❗

레벨(게임씬)을 "섹션"이라는 단위로 나누고 하나의 섹션을 클리어 하면 새로운 섹션이 등장하는 무한 맵 만들것이다.

OnConstruction

엑터에는 에디터와 연동되는 OnConstruction이라는 특별한 함수가 설계되어있다.

에디터 작업에서 선택한 액터의 속성이나 트랜스폼 정보가 변경될 때 이 Construction함수가 실행된다.

OnConstruction함수를 생성하고 여기서 액터와 컴포넌트의 속성을 설정하면 작업중인 레벨에서도 미리 결과를 확인할 수 있다.

굿굿.


진짜 무한맵 제작

새로 생성된 맵에 Navigation Mesh가 붙어 있지 않기 때문에 NPC가 움직이질 않는다.

그래서 새로 생성된 섹션영역에도 내비게이션 메시가 만들어저야 한다.

이를 위해 게임실행중에 동적으로 내비게이션 메시를 생성하도록 프로젝트에 추가해야한다.

아래처럼 설정해주면 된다.

static -> dynamic

아래 움짤 처럼 잘 동작한다.

업로드중..

chapter 13 후기

나한테 어려운 부분은 그냥 수학적인 부분?과 충돌 설정하는 부분에서의 에러들이 너무 많아서 해결한다고 이틀 조금 넘게 걸린듯...

충돌하는 부분은 프로젝트 설정의 preset설정을 잘 못했다거나 아니면 코드 잘못 쳤다거나 등등.

솔루션 몇번 재빌드하고 에디터 껏다 켯다 몇번 반복하니까 로그도 찍히고 충돌도 잘 발생을 했음.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글