[UE] 자주 사용하는 언리얼 함수/변수/매크로2022. 4. 23. 00:49
CreateDefaultSubObject<T>("str")
> 템플릿 자료형 클래스를 매개변수로 받은 string 이름으로 생성(인스턴스)한 후 반환하는 함수 (포인터 반환)
- 변수 이름이 BP의 컴포넌트 하이어라키에 표시되는 이름이다.
cf. 왜 Sub 일까?
생성자에서 오브젝트를 생성할 때는 A라는 언리얼 오브젝트(멤버 변수)가 초기화를 위해, B라는 언리얼 오브젝트(임시 객체)를 생성할 때.. B는 A의 서브 오브젝트 라고 한다.
--> 따라서 생성자 코드에서 언리얼 오브젝트의 인스턴스를 생성하고 관리하고자 할 때 함수 이름이 CreateDefaultSubObject 이다
RootComponent 변수
> 더미이다. 상징적인 의미로 사용된다. 이후에 생성되는 컴포넌트들의 Tr 기준점이 된다.
- 이후에 생성되는 컴포넌트들은 Root 로 지정한 컴포넌트의 자식으로 생성됨.
(- 별도로 지정하지 않으면 제일 먼저 인스턴스한 컴포넌트가 자동으로 Root 가 되는 듯.)
verifyf 함수
> 개발 중에 오류가 났을 때 오류값 체크 (에디터상에서 사용)
- 실제 서비스할 때는 실행되지 않음
TSubclassOf<T> : 기본적으로 TSub 클래스 가 포인터이다.
> 해당 자료형 전방선언. 자료형의 타입을 변수로 다룰 수 있게 해주는 기능 (리플렉션)
- T 자료형 상속받은 클래스만 사용할 수 있게 제한
- UClassc 일 경우, 언리얼 모든 클래스 가능
UMaterialInstanceConstant
> 상수 머터리얼 인스턴스. 에디터에서만 매개 변수를 변경할 수 있다.
> 언리얼 에디터의 Material Instance 가 C++ 에서는 해당 자료형으로 표현된다.
( 언리얼 에디터의 Material 이랑 Material Instance 에서 Material Instance )
UMaterialInstanceDynamic
> 런타임 중에 매개 변수를 변경할 수 있는 인스턴스
UMaterialInstanceDynamic:: Create( ) 함수
> 동적 머테리얼을 생성할 경우 사용.
- 주로 에디터의 (UMaterialInstanceConstant) Material Instance 를 가져와서 C++ 에서 동적으로 생성하는 방식으로 사용된다.
( Material 과 관련된 클래스는 전부 UMaterialInterface 로부터 상속받아 구현되어진다. )
UMaterialInstanceDynamic:: SetVectorParameterValue( ) 함수
> 머테리얼에서 칼라는 Vector 값으로 표현되는데, 칼라 파라미터를 변경하겠다는 것
▼ 머터리얼과 머터리얼 인스턴스의 관계
BP 에서..
값을 고정으로 사용하고 싶으면 : Constant 노드 사용
값을 변경해서 사용하고 싶으면 : Parameter 노드 사용
Parameter 의 값을 변경할 때는 독립적이라는 의미로 Material Instance 를 생성해야한다.
▶ Material Instance 는 UMaterialInstanceConstant 자료형을 가진다( 동일한 Material 을 사용하는 A, B 오브젝트가 있을 때.. A 의 색을 변경했는데 B 의 색까지 바뀔 필요는 없기 때문이다. 그래서 Material Instance 를 생성해서 A 의 Material Instance 의 Paremeter 값만 변경해주면 된다. )
그니까..
머터리얼 데이터는 똑같이 쓰는데, 그 값만 서로 다르게 쓰고싶으니까 Inst 로 분리해서 사용하는 거임
UKismetSystemLibrary
> 타이머 정보가 있다.
UKismetMathLibrary
> 랜덤 정보가 있다.
(Component)->SetupAttachment(parent)
> 컴포넌트를 부모의 자식으로 붙이는 함수
- Componenet 를 parent 의 자식으로 붙이겠다.
SetRelativeLocation(FVector)
SetRelativeRotation(FRotator)
> 해당 컴포넌트의 Transform 기본값을 설정할 수 있다.
SpringArm:: bDoCollisionTest
> 카메라가 벽에 닿으면 충돌 계산을 통해 카메라와 캐릭터의 거리를 좁혀 카메라가 벽을 뚫지 않게 할 것인지? 여부
SpringArm:: bUsePawnControlRotation
> 폰의 카메라 회전을 제어할 것인지? 여부
- false 일 경우 회전 허용 안함. relative rotation 값으로 고정
- true 일 경우 회전을 허용
▼ 카메라에 붙는 SpringArm 의 역할 (SpringArmComponent)
Spring Arm 은 카메라가 이동하면서 유연한 느낌으로 따라붙을 수 있게 도와준다.
카메라가 무언가 ( 다른 오브젝트) 에 방해를 받을 때는 카메라 위치를 자동으로 옮겼다가
더 이상 방해를 받지 않게되면 원래 위치로 되돌려주는 등 부작용을 최소화 시키는데 도와준다.
ex1. 카메라가 이동 시 약간의 시차를 두고 이동하기
ex2. 벽 근처에서 카메라를 회전시키면 자동으로 위치를 조정해서 가까이 오기,
이런 상황이 해제되면 원래대로 돌아오기
UCharacterMovementComponent:: bOrientRotationToMovement
> 이동할 때, 가속되고 있는 값 방향으로 캐릭터 메쉬를 회전시킬 것인지? 여부
- true 일 경우 : 캐릭터가 가속값을 가지고 있다면, 가속되고 있는 값 방향으로 캐릭터 메쉬를 회전시킨다.
- false 일 경우 : 키 입력을 받아도 캐릭터 메쉬가 회전하지 않는다. (가속하는 방향으로 캐릭터가 회전하지 않는다)
> OrientRotation 뜻 : 방향 회전
ConstructorHelpers 클래스
> 생성자에 도움될 클래스들을 모아두는 곳
ConstructorHelpers:: FObjectFinder<T>
> Asset의 내용물을 가져올 때 사용 (= Asset 자체를 가져올 때 사용)
- 생성자에서만 사용 가능.
ConstructorHelpers:: FClassFinder<T>
> Asset의 타입 정보를 가져올 때 사용 (= Asset 타입을 가져올 때 사용)
- 하나의 언리얼 프로젝트는 UClass와 CDO로 나뉘어지는데, UClass 관련 타입을 찾는다.
(- 생성자에서만 사용 가능한듯?)
StaticLoadObject 함수
> 기능은 ConstructorHelpers::FObjectFinder 와 동일. 생성자가 아닌 곳에서 동적 로딩을 해주는 함수이다.
- 반환형이 UObject (최상위 Object 자료형) 이므로 내가 사용할 자료형을 캐스팅해서 사용하면 된다.
UInputComponent:: BindAxis
> 입력 방향키 설정. GameMode 에서 설정한 Key 이름이랑 함수를 매칭시킨다.
APawn:: GetControlRotation
> 컨트롤러의 Rotation 을 반환한다.
> 절대축 기준 회전값을 반환하며, 0 ~ 360 사이 각도 리턴 (절대축 기준으로 플레이어가 얼마나 회전했는지)
- ControlRotation : 플레이어 조작 시 회전을 기준으로 약속
GetControlRotation().Quaternion().Euler()
> 컨트롤러의 Rotation 을 반환한다. 절대축 기준 회전값을 반환하며, -180 ~ 180 사이 각도 리턴
GetActorRotation( )
> 액터의 RootComponent 회전값을 반환
FVector:: GetUnsafeNormal2D
> 벡터의 노말을 구하는 함수. 안전하지 않아서 unsafe 인듯.
APawn:: AddMovementInput
> 폰을 이동시키는 함수
APawn:: AddControllerYawInput
> 마우스를 이동시키는 함수 (Yaw 는 좌우 이동)
(APawn::)
bUseControllerRotationRoll = false
bUseControllerRotationPitch = false
bUseControllerRotationYaw = false
> 캐릭터가 카메라의 회전을 따라서 회전하지 않도록 한다.
> true 일 경우 : 카메라의 회전값에 따라서 캐릭터도 같이 회전한다
DEFINE_LOG_CATEGORY_STATIC
> 에디터 로그 출력창에 표시할 때, 해당 매크로를 통해 로그 카테고리를 설정할 수 있다.
APawn:: TryGetPawnOwner
> 나(오브젝트 또는 컴포넌트)를 포함하고 있는 주인 폰을 반환한다.
Engine/World.h
> UWorld 를 가지고 있는 헤더파일. 월드는 여러 개 존재할 수 있는데 보통 1개인듯
> 직역 : UWorld 는 컴포넌트를 가진 액터를 렌더링하는 맵이나 샌드박스를 나타내는 최상위 객체
GetWorld( )-> GetTimeSeconds( )
> 게임을 시작한 후 현재까지 경과된 시간
GetWorld( )-> GetRealTimeSeconds( )
> 현실 세계의 경과 시간
IsBound
> 델리게이트에 함수가 하나라도 연결되어 있는지 체크
UPointLightComponent
> Light 를 보일지 말지 여부
- 생성자일 경우 : bVisible 변수로 셋팅
- 생성자가 아닐 경우 : SetVisibility( ) 함수로 셋팅
> 빛의 강도 설정 : Intensity
- 1e + 4f = 10^4 = 10000
- 1e - 6f = 10^-6 = 0.000001
( 언리얼이나 C++ 에서 많이 쓰는 표기 방법 )
FLinearColor
> 부동소수점 컬러 범주 ( 0.0f ~ 1.0f )
FColor
> RGB 컬러 범주 ( 0 ~ 255 )
TArray
> 가변형 배열. C++ STL 의 Vector 와 유사하다
UGameplayStatics
> BP 와 C++ 모두에서 접근할 수 있는 정적 클래스. 유용한 게임플레이 유틸리티 함수가 있다.
- GetAllActorsOfClass : 지정한 클래스를 가진 모든 액터를 찾는다. 월드에서..
UPrimitiveComponent:: SetSimulatePhysics( )
> 물리 시뮬레이션 (자유낙하) 을 적용할 것인지? 셋팅
- 자유낙하 : 만유인력을 받아 인정한 가속도로 떨어지는 운동 (ex. 공 떨어뜨리기)
USceneComponent:: GetComponentToWorld( )
> 해당 컴포넌트를 가진 액터의.. 월드 기반 Transform 정보를 가져온다
UGameplayStatics:: SpawnEmitterAtLocation( world, particle, transform )
> 특정 좌표에 파티클을 생성한다.
AttachToComponent
> 호출하는 대상이 parent componenet 의 특정 소켓에 붙는다
- FAttachmentTransformRules(EAttachmentRule:: , bool) : 부착 규칙
UWorld:: SpawnActor
> 특정 월드에 해당 액터를 스폰한다.
FActorSpawnParameters
> SpawnActor 함수에 전달되는 매개변수 구조체 ( 유니티에서 선택적 구조체로 넘기는 param[] 와 같은 개념 )
- 유니티 param[] 은 명시적 변환을 통해 원하는 클래스나 자료형을 넘길 수 있지만
- FActorSpawnParameters 는 보낼 수 있는 구조체 정보들이 정해져있음
AActor:: GetOwner
> 이 액터를 소유한 주인 액터를 반환.
(SpringArm::) SocketOffset
> 스프링 암 끝의 카메라의 위치를 조정
ex)
SpringArm->SocketOffset = FVector(0, 30, 10); // 오른쪽 방향 앞 쪽
'Engine > Unreal' 카테고리의 다른 글
[UE] USceneComponent 와 PrimitiveComponent (0) | 2022.05.09 |
---|---|
[UE] 델리게이트와 이벤트 (0) | 2022.05.09 |
[UE] Unreal C++ 스크립트 규칙 (0) | 2022.05.07 |
[UE] 언리얼 오브젝트와 UClass (0) | 2022.05.01 |
[UE] 리플렉션 (0) | 2022.04.30 |