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 |
댓글