공부/Unreal

24.07.11

월러비 2024. 7. 14. 22:49
  • 블루프린트 클래스는 자동으로 ‘루트 컴포넌트’를 만들어주지만, C++ 클래스는 ‘루트 컴포넌트’를 직접 만들어야한다.
  • 상속관계에서 부모의 헤더는 이미 상속으로 인해 전파를 받았으므로, 상속의 마지막 자료형에 대한 헤더만 추가하면 된다.
  • 블루프린트에서는 ‘이벤트’라고 부르는 함수들을 C에서는 ‘델리게이트’라고 표현한다.

01 예제, Overlap

  • 일반 오버랩 이벤트는 ‘액터에 직접’ 오버랩을 만든 것이다.
    • ‘오버랩 시작’ ‘오버랩 종료’ 2가지만 가능하다.

겹침 테스트용 블루프린트 생성

  • 헤더 파일 - ‘루트 컴포넌트’용 씬 컴포넌트 변수를 ‘컴포넌트용 변수 메크로’로 선언한다. - ‘박스 컴포넌트’ 변수를 ‘컴포넌트용 변수 메크로’로 선언한다. - ‘텍스트 렌더 컴포넌트’ 변수를 ‘컴포넌트용 변수 메크로’로 선언한다. - cpp 파일 - ‘박스 컴포넌트’와 ‘텍스트 렌더 컴포넌트’ 헤더 추가 - 커스텀 함수 ‘컴포넌트 생성 함수’를 호출하여 ‘루트’, ‘박스’, ‘텍스트’ 컴포넌트를 생성한다. - ‘박스’와 ‘텍스트’의 디테일 설정 함수들을 호출하고 설정한다.
//header
//컴포넌트는 visibleAnywhere로 선언한다.
//그냥 붙일 수 있는 기능만 있는 자료형이다.
UPROPERTY(VisibleAnywhere)
	class USceneComponent* Root;

//붙일 수 있는 컴포넌트들은 모두 씬 컴포넌트를 상속받고있다.
UPROPERTY(VisibleAnywhere)
	class UBoxComponent* Box;

UPROPERTY(VisibleAnywhere)
	class UTextRenderComponent* Text;
	
//cpp
//루트 컴포넌트 생성
CHelpers::CreateComponent<USceneComponent>(this, &Root, "Root");

//박스 컴포넌트 생성
CHelpers::CreateComponent<UBoxComponent>(this, &Box, "Box", Root);

//텍스트 렌더 컴포넌트 생성
CHelpers::CreateComponent<UTextRenderComponent>(this, &Text, "Text", Root);

//텍스트 렌터 디테일 설정
Text->SetRelativeLocation(FVector(0, 0, 100)); //위치
Text->SetRelativeRotation(FRotator(0, 180, 0)); //회전
Text->SetRelativeScale3D(FVector(2)); //글씨 크기 : 2배
Text->TextRenderColor = FColor::Red; //글씨 색
Text->HorizontalAlignment = EHorizTextAligment::EHTA_Center; //글자 정렬
Text->Text = FText::FromString(GetName().Replace(L"Default__", L"")); //FromString : 텍스트 자료형을 스트링으로 바꿔주는 함수다.

Box->bHiddenInGame = false;
Box->SetRelativeScale3D(FVector(3));

겹침 델리게이트(이벤트)

  • 델리게이트 함수는 “반드시” ‘UFUNCTION’ 메크로를 써야한다.
  • 모든 이벤트와 델리게이트의 함수 이름은 ‘On’으로 시작한다. - 관례다.

델리게이트(이벤트) 함수에 필요한 매개변수 찾는법

  • 사용할 델리게이트(이벤트)를 블루프린트에서 찾는다. - C++ 파일에 입력하고 f12를 누른다. - ‘signiture’ 자료형이 나오면 f12를 누른다. - ~~~_델리게이트_파라미터 개수(델리게이트 명(자료형 타입이자 이름이다.) , 이벤트를 사용할 주체에 연결된 자료형 , 델리게이트(이벤트) 이름(작성된 이름을 사용하라고 강제한다.) , 파라미터 개수만큼의 파라미터(자료형, 파라미터명 으로 작성되어있어서 ‘,’는 지우고 ‘자료형 파라미터명’으로 써야한다.)
    • 즉, 간단하게 앞의 파라미터 3개는 건너뛰고 복사하면 된다.

델리게이트 연결 함수 정의

  • 헤더 파일 - ‘오버랩 시작’ 함수 선언 및 매크로 지정 - cpp 파일 - ‘On’을 붙여서 사용할 델리게이트(이벤트) 입력 - f12 클릭 - 함수의 파라미터 복사 - 헤더파일 - 함수가 선언된 곳에 복붙한다. - cpp 파일 - 델리게이트(이벤트) 함수와 ‘선언한 함수 주소’를 연결하는 함수를 호출한다. - 선언한 함수 정의
//header
private:
	//c에서 이벤트를 '델리게이트'라고 한다.
	//델리게이트는 반드시 UFUNCTION()이 있어야한다.
	UFUNCTION()
		void BeginOverlap(AActor* OverlappedActor, AActor* OtherActor);
		
//cpp
//델리게이트의 시작은 On으로 시작한다.
OnActorBeginOverlap.AddDynamic(this, &AC01_ActorOverlap::BeginOverlap);

void AC01_ActorOverlap::BeginOverlap(AActor* OverlappedActor, AActor* OtherActor)
{
	FString str;
	str = FString::Printf(L"Begin - Overlapped : %s, Other : %s", *OverlappedActor->GetName(), *OtherActor->GetName());

	CLog::Print(str);
}

 

  • PCH : 미리 컴파일을 시도하는 헤더들을 의미한다.
    • 미리 컴파일 될 헤더들을 한곳에 모아놓고 한번만 컴파일 하는 방법이다.
    • 컴파일 속도를 줄여준다.
    • 면접에서 나오니까 정리해라
  • 매직 넘버 : 미리 지정된 값을 의미한다.
    • 지구의 둘레, 빛의 세기 등을 의미한다.
    • 보통 어떠한 값을 넣을때 매크로 함수처럼 미리 지정하여 모아놓고 필요할떄 사용하는 방식으로 사용된다.

새 C++ 파일 생성 기본 형태 설정 변경 방법

  • 에디터 엔진 폴더 - Content - Editor - Templates - ActorClass ‘cpp 파일’과 ‘헤더 파일’ 클릭
  • 주석과 띄어쓰기 제거

02 예제, 컴포넌트 오버랩

  • 컴포넌트에 오버랩 이벤트를 넣어 실행한다.

텍스트 렌더 컴포넌트 생성 ‘매크로’ 함수 정의

  • #define은 ‘한 줄’ 로 작성해야한다.
    • 매크로 함수를 여러줄로 작성하기 위해서는 ‘\’ 를 한줄마다 끝에 붙이면 된다.
  • 헤더 파일 - 함수 정의 - 컴포넌트 생성 함수 호출 ‘ 위치 지정 ‘ 회전 지정 ‘ 크기 지정 ‘ 색 지정 ‘ 문자 정렬 지정 ‘ 그 외 커스텀 지정(자동으로 출력되는 문자, 문자 중 일부 제거 등)
#define CreateTextRenderComponent()\\
{\\
	Text->SetRelativeLocation(FVector(0, 0, 100));\\
	Text->SetRelativeRotation(FRotator(0, 180, 0));\\
	Text->SetRelativeScale3D(FVector(2));\\
}

컴포넌트 오브랩 연결 함수 정의 및 연결

  • 오버랩 이벤트와 정의는 같고 함수명이 다르다.

03 예제, 오버랩과 히트

  • 컴포넌트 오버랩 이벤트와 히트 이벤트는 동시에 사용할 수 있다.
  • 움직이는 액터와 ‘히트 이벤트’는 해줘야할 조건이 필요하다.
    1. 움직이는 액터 ‘모빌리티 → 무버블’ 로 지정해야한다.
    2. 피직스 - 피직스 시뮬레이트 를 체크해야한다.
    3. 히트 이벤트를 발생시킬 액터에 ‘콜리전 - 시뮬레이션 중 히트이벤트 발생 을 체크해야한다.
    4. 움직이는 액터의 콜리전 프리셋의 ‘오브젝트 타입’을 확인한다.
    5. 히트 이벤트를 발생시킬 ‘콜리전 프리셋’을 설정한다. (오버랩과 히트를 어떻게 조절할지 정한다.)

04 예제, 트리거

  • 어디를 밟았다. 또는 어디를 들어갔다. 할때 이벤트를 발생시키는 방법 중 하나다.

지수값

  • 1e + 4f ⇒ 1 * 10^4 = 10000
  • 1e - 6f = 1 * 10^-6 = 0.000001
  •  

'공부 > Unreal' 카테고리의 다른 글

24.07.15  (1) 2024.07.17
24.07.12  (0) 2024.07.15
24.07.10  (1) 2024.07.12
24.07.04  (0) 2024.07.07
24.07.03  (2) 2024.07.05