Unreal Engine 5.1
- C++ Actor Component
- 커스텀으로 생성한 Mover Component가 기존의 항목들이랑 다른 위치에 삽입되는 것은, 기존의 Component는 Scene Component이고 Mover는 Actor Component이기 때문이다.
- Pointer Type & GetOwner()
- GetOwner() : 특정 컴포넌트를 소유한 액터의 주소를 저장하는 변수
- 언리얼은 기본적으로 플레이 할 준비가 된 완전히 새로운 액터 세트를 장면에 생성한다.
=> GetOwner()를 이용해 액터의 주소를 확인해보면 플레이 할 때마다 달라지는 것을 알 수 있다.
- C++ 코드를 바이너리로 컴파일할 때 단계(Compilation Steps)
1. Your Code
=> 코드, C++ 파일, 헤더 파일 등 다양한 텍스트 파일로 시작한다.
2. Unreal Header Tool
=> 위에서 작성된 텍스트 파일들이 Unreal Header Tool 이라는 도구에 입력된다.
=> 언리얼 엔진의 특정 syntax 등을 가져와서 더 많은 C++ 코드를 생성한다.
==> 즉, 작성된 코드에서 언리얼 엔진 자체 함수 등이 사용된 부분은 언리얼 엔진 내의 코드로 변경되면서 더 많은 C++ 코드를 생성하게 되는 것이다.
3. Standard C++ Compilation
3-1. Preprocessor(#include 와 같은 전처리기)
3-2. Compiler(개별 C++ 파일을 각각 바이너리 코드로 변경한다)
3-3. Linker
=> 위 과정에서 생성된 모든 파일들을 하나로 합쳐서 실행 파일로 만들어낸다.
- 언리얼 엔진 에디터 내에서 플레이 중 F8을 누르면 플레이어 컨트롤러에서 디태치하여 보통의 에디터 조작이 가능해진다
- 씬 컴포넌트는 액터 컴포넌트에서 추가로 몇몇 기능이 더 달린 컴포넌트이다.
- GetWorld()
- 모든 component와 모든 actor에는 GetWorld라는 함수가 존재한다.
=> UWorld를 return하는 함수
==> 정확히는 UWorld 유형의 개체에 대한 포인터이다.
- 변수에 값을 초기화하지 않고 함수 매개변수로 전달한다면 out parameter를 의심할 수 있다. 또한, const가 붙어있지 않은 reference parameter는 out parameter라고 의심할 수 있다.
- SweepSingleByChannel()
- UWorld에 포함된 함수이므로 다음과 같은 방식으로 사용할 수 있다.
GetWorld()->SweepSingleByChannel()
- 매개변수들 중 TraceChannel은 프로젝트가 있는 폴더에서 Config - DefaultEngine.ini 를 VSCode로 열어서 원하는 TraceChannel을 검색한다.(Ctrl + f)
=> 현재 프로젝트에서는 Grabber을 찾으면 된다.
=> Channel="~~" 과 같이 Channel Name이 나와있으니 해당 부분을 복사해서 사용하면 된다.
- Input System
- Setting - Project Setting - Engine 탭의 Input
Action Mappings : 버튼을 누르거나 떼는 등의 입력
Axis Mappings : 마우스를 약간 움직이거나 컨트롤러를 기울이는 등과 같이 더 연속적인 것
=> 현재 프로젝트에서는 Grab을 위해 버튼 입력을 받을 것이기 때문에 Action Mappings만 사용한다.
※ Action 및 Axis Mappings는 현재 버전(5.1)에서 폐기됨. 향상된 입력 액션 및 입력 매핑 컨텍스트를 사용해야 한다.
(Enhanced Input Plugin을 찾아 활성화 한 후 에디터 재시작. Project Settings - Input - Default Classes 세팅에서 향상된 입력을 사용하기 위해 각각 EnhancedPlayerInput 및 EnhancedInputComponent로 변경하면 된다. 5.1은 기본적으로 Enhanced Input 으로 변경되어 있는 것 같음)
- Input Action을 생성하려면 Context Browser를 우클릭한 다음 Input - Input Action을 선택하면 된다.
- Input Action을 트리거하려면 입력 매핑 컨텍스트에 입력 액션을 포함시킨 다음 이 입력 매핑 컨텍스트를 로컬 플레이어의 향상된 입력 로컬 플레이어 서브시스템에 추가해야 한다.
※ 향상된 입력 액션 관련 공식 Document 및 강의에서 제공해주는 영상 링크 참고하기.
- C++에서 작성한 함수를 BP에서 사용하기
1. C++ 코드 헤더파일에서 함수를 선언할 때 앞에 UFUNCTION(BlueprintCallable) 를 붙여준다.
2. BP에서 해당 함수 이름의 노드를 찾아서 가지고온다.
3. 해당 함수 노드의 타깃 부분에는 해당 함수를 선언한 C++ 객체 노드(변수)를 만들어서 연결해주면 된다.
- 언리얼에서 포인터 관련 문제(null 참조) 등이 발생하면 크래시가 나서 에디터 자체가 닫혀버릴 수 있다.
- 포인터를 이용한 참조(->) 시에는 항상 포인터가 nullptr이 아닌지 체크하도록 하자.
- HitResult.Location 과 HitResult.ImpactPoint
- HitResult.Location은 특정 트레이스(?, 유니티의 레이캐스트)를 쐈을 때 물체와 충돌하는 순간, 해당 위치를 반환한다.
- HitResult.ImpactPoint는 위와 마찬가지 상황일 때 정확히 물체와 충돌된 위치를 반환한다.
ex) 반경 10짜리 구체 모양의 trace를 발사했을 때, Location과 ImpactPoint간의 차이는 10이다.
ImpactPoint는 물체와 구체 Trace가 처음으로 충돌했을 때 충돌 지점을 반환하는 것이고, Location은 같은 상황에서 충돌 지점이 아니라 그 순간의 구의 좌표(구의 중심점 좌표)를 반환하는 것이다.
'TIL' 카테고리의 다른 글
[TIL] 20230403 - 20230408 성장일지 (0) | 2023.04.10 |
---|---|
[TIL] 20230327 - 20230331 성장일지 (0) | 2023.03.31 |
[TIL] 20230320 - 20230321 성장일지 (0) | 2023.03.22 |
[TIL] 20230315 성장일지 (0) | 2023.03.15 |
[TIL] 20230310 - 20230313 성장일지 (0) | 2023.03.13 |
댓글