본문 바로가기
TIL

[TIL] 20230322 - 20230324 성장일지

by 마두식 2023. 3. 24.
반응형
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

댓글