본문 바로가기
TIL

[TIL] 20230403 - 20230408 성장일지

by 마두식 2023. 4. 10.
반응형
C/C++

-  포스팅 링크 : [C/C++] C++에 왔으면 C++의 법을 따릅시다 - (2)

 

 

 

Unreal Engine 5.1
  • Choosing a Class
Actor Pawn Character
-  Can be placed in the world
-  Can have a visual representation
ex)  Mesh, etc.
-  Derived from Actor
-  Can be possessed by a Controller
=>  Pawn can be controlled by a player.
-  Handles movement input

-  Derived from Pawn
-  Has Character specific stuff
(Character Movement, Component, etc.)
-  이족 보행 캐릭터에 적합하다.
=>  그 외에는 잘 작동하지 않을 수 있다.

 

  • .cpp 파일에서 사용하는 것만 .cpp 파일 내에서 include 하는 것이 좋으며 .h 파일에는 가능한 적게 include 해야한다.

-  포인터에 대한 정의는 헤더파일이 필요하지 않다.
-  특정 유형의 객체(object)를 구성하려는 경우 헤더 파일이 필요하다.
-  함수 및 변수와 같은 멤버에 액세스 하려면 헤더파일이 필요하다.
-  클래스에서 상속하려면 상속용 헤더파일이 필요하다.


  • UPROPERTY()

-  기본적으로 언리얼 리플렉션 시스템에 해당 프로퍼티가 있음을 알리는 것

-  빌드 시에 Unreal Header Tool(UHT)이 매크로를 감지하고 리플렉션 유형에 추가하게 된다.

=>  가비지 콜렉션에 의해 생명주기가 관리되며, 리플렉션을 통해 멤버 변수의 이름, 유형 등을 런타임 중에 확인할 수 있게 된다.


-  반대로 말하자면, UPROPERTY() 매크로가 기술되지 않은 멤버 변수( 프로퍼티 )는 언리얼 리플렉션에 노출되지 않으며, 리플렉션 시스템이 제공하는 GC, 런타임 정보 확인 등을 사용할 수 없다는 뜻이 된다.

-  프로퍼티 지정자를 추가하게 된다면, 이러한 리플렉션 시스템을 바탕으로 엔진과 에디터와 상호작용할 수 있는 기능을 추가로 제공할 수 있다.

-  UPROPERTY 지정자

1.  VisibleAnywhere
=>  에디터에서 볼 수만 있음.
2.  EditAnywhere
=>  에디터에서 값을 수정할 수 있음.
3.  VisibleInstanceOnly
=>  Default Blueprint에서는 볼 수 없고 Scene에 생성된 instance에서만 볼 수 있음
4.  VisibleDefaultsOnly
=>  Default Blueprint에서만 볼 수 있고 instance에서는 볼 수 없음.
4.  EditInstanceOnly
=>  Default Blueprint에서는 보거나 수정할 수 없고 Scene에 생성된 instance에서만 보고 수정할 수 있음
5.  EditDefaultOnly
=>  Default Blueprint에서만 보고 수정할 수 있고 instance에서는 보거나 수정 불가능
6.  BlueprintReadWrite
=>  이벤트 그래프 노드에서 보고, 수정할 수 있음
=>  Get, Set 키워드가 앞에 붙어서 노드 형식으로 제공되는 것 같음.
7.  BlueprintReadOnly
8. meta = (AllowPrivateAccess = "true")
=>  private 한정자로 선언된 변수가 BP 이벤트 그래프 노드에서의 접근을 허용한다면 기본적으로 오류가 발생한다.
==>  해당 문제를 해결하기 위한 지정자.
9.  Category = "Category Name"
=>  해당 변수가 나타날 범주(카테고리)를 만들어준다.


-  지정자는 동시에 여러개를 사용할 수 있다.

=>  각각의 지정자는 쉼표를 사용해서 구분해 주어야 한다.

 

  • Scene 내의 Actor를 Player Pawn 으로 변경하기

-  Actor의 auto possess player 탭에서 Player 0로 변경해주면 게임 시작 시 자동으로 해당 액터를 플레이어로 소유하게 된다.

=>  auto possess player 탭의 Player 0 ~ 7 은 멀티플레이에 관한 것이 아니라 하나의 컴퓨터로 2인, 3인 의 게임을 하는 로컬 게임을 위한 선택사항이다.

 

  • Moving in Local Space

-  AddActorLocalOffset

=>  Moves the Actor in a local direction
=>  Performs a single movement (we'll call it every frame)

 

  • Using DeltaTime

-  Tick 함수는 항상 일정한 시간으로 호출되는 것이 아니다.

=>  CPU 사용량 등에 따라 시간이 달라질 수 있다.


-  DeltaTime은 마지막 Tick 함수 이후(마지막 프레임 이후) 현재 Tick 함수(현재 프레임)까지의 시간이다. 

=>  CPU 사용량이 달라지면 DeltaTime도 달라진다.


-  즉, 초당 프레임 수(frames/second)가 높을수록, 함수가 더 자주 호출된다.

=>  DeltaTime을 이용해서 값을 일정하게 유지한다.
==>  그러면 프레임의 변화에 관계없이 일정한 수준으로 함수를 호출할 수 있다.

 

  • Sweep

-  Sweep이 활성화 되어있다면 특정 물체가 진행하다가 Block 되는 물체에 겹치는 순간 실제로 겹쳐지기 전에 먼저 엔진이 겹쳐지는 것을 Check 해서 Block 되는 물체의 표면에 닿은 상태로 멈추게 된다.

-  Sweep이 작동하려면 충돌이 활성화 되어 있어야 한다.

-  RootComponent가 무언가를 Block 하고 있는지가 중요하다.

=>  하위 Component들이 어떤 설정을 갖고있든 RootComponent를 기준으로 Sweep을 체크하는 것

 

  • Pawn에서 Controller에 access하는 시기는 BeginPlay가 적당하다.

-  생성자에서 수행하는 경우 너무 이르고 아직 유효한 컨트롤러가 없을 수도 있다.

  • Cast

-  Template function
-  Adapts to the type chosen
-  Pass in the type to cast to

반응형

'TIL' 카테고리의 다른 글

[TIL] 20230327 - 20230331 성장일지  (0) 2023.03.31
[TIL] 20230322 - 20230324 성장일지  (0) 2023.03.24
[TIL] 20230320 - 20230321 성장일지  (0) 2023.03.22
[TIL] 20230315 성장일지  (0) 2023.03.15
[TIL] 20230310 - 20230313 성장일지  (0) 2023.03.13

댓글