TIL - Today I Learned : Dependency Injection, 의존성 주입이랑 한 개체가 다른 개체를 필요로 할 때,
직접 해당 개체를 찾아서 생성하지 않고 외부에서 제공 받는 것이다.
오늘의 진도: Section 4: Crypt Raider 106. Dependency Injection ~ 109. Boolen Logical Operators
Dependency Injection
비밀의 문에는 Trigger Component와 Mover 가 있다.
Trigger Component는 특정 물체가 닿았는지에 대한 판정
Mover는 문을 움직이는 역할을 한다.
특정 물체에 닿았을 때 문을 움직이려면 Trigger는 Mover에게 일을 하라고 호출해야한다.
Trigger Component는 Mover가 누구인지 알아야 하는데
이를 Trigger가 찾도록 하는 것이 아니라 Blueprint를 통해 외부에서 Mover를 지정해 준다.
이렇게 어떤 역할에 특정 개체가 필요한 것을 의존성이 있다고 하고
의존성의 관계에 있는 개체가 직접 의존성을 생성하지 않고 외부에서 연결해주는 것을 의존성 주입이라 한다.
SetMover 함수를 BeginPlay시 Mover와 연결하는 블루프린트이다.
Shadowing : 함수 밖에서 선언된 변수를 함수 안에서 사용할 경우 함수 밖에서 선언된 변수를
잠시 가리는 것을 Shadowing이라 하는데 언리얼에서는 허용되지 않는다.
만약 Input Parameter의 이름과 클래스 맴버 변수의 이름이 동일하면 언리얼에서는 오류로 판단한다.
SetMover 함수의 Paramter가 Mover이고 클래스 내에 Mover라는 변수를 지정 했을 때
SetMover 함수를 정의할 때 Parameter의 이름을 바꾸어주어야 한다.
*헤더 파일과 cpp파일에서 파라미터의 이름이 동일할 필요는 없다.
만약 같은 이름으로 정의 후 빌드를 하면 오류를 밷는다.
Casting & Actor Attachment
가져온 Actor의 물리 시뮬레이션 기능이 끄고, 자신에게 붙여서 같이 움직이려고 한다.
물리 시뮬레이션은 UPrimitiveComponent의 SetSimulatePhysics() 함수를 통해 비활성화가 가능하다.
가져온 Actor의 UPrimitiveComponent를 가져오려면 AActor의 GetRootComponent 함수를 호출한다.
AActor의 Root Component의 반환 타입은 USceneComponent이다.
USceneComponent는 UPrimitiveComponent의 상위 클래스임으로 이를 UPritimiveComponent로 Cast해준다.
가져온 Actor의 물리 시뮬레이션을 껐다면 자신에게 붙여주면된다.
A를 B에 붙이려면 A의 AttachToComponent(B)를 해주면된다.
FAttachmentTrasformRules이라는 Parameter가 있는데 해당 Actor를 붙일 때 위치, 회전, 스케일에 대한 설정이다.
참고 링크 : UPrimitiveComponent::SetSimulatePhysics(), AActor::GetRootComponent(), AActor::AttachToComponent(), FAttachmentTransformRules
Adding and Removing Tags
Actor의 Tags 통해 Actor의 tag를 추가할 수 도 제거 할 수도 있다
Tags는 TArray 형식으로 되어있고 TArray에 있는 Add와 Remove로 Tag를 관리한다.
특정 Actor를 잡았을 때 해당 Actor에 Tag를 추가해 준다.
그리고 Actor를 놓았을 때는 추가해준 Tag를 삭제해준다.
참고 링크 : TArray
Boolen Logical Operators
Actor의 Tags를 확인하여 Grabbed tag가 없는 Actor만 반환하도록 한다.
Tag를 확인할 때는 ActorHasTag라는 함수도 있고 또는 Tags.Contains으로 직접적으로 tags로 접근할 수도 있다.
둘다 모두 tags를 순회하며 FName으로 받은 tag가 있는지 확인 한다.
학습 강의 : Udemy Unreal Engine 5 C++ 개발자: C++ 학습하고 비디오 게임 제작하기
'Unreal Engine > Udemy:UE5 C++ 학습하고 게임 만들기' 카테고리의 다른 글
Unreal Day - 31 - Start Toon Tank! (0) | 2024.06.27 |
---|---|
Unreal Day - 30 - End of Section 4. Crypt Raider (0) | 2024.06.26 |
Unreal Day - 28 - GetOverlappingActors() (2) | 2024.06.21 |
Unreal Day - 27 - Physics Handle (0) | 2024.06.21 |
Unreal Day - 26 - Hit! (0) | 2024.06.18 |