본문 바로가기

게임프로그래밍/실습1

[언리얼 실습] 43. 다양한 부실 수 있는 액터 만들기


목차

  1. 부실 수 있는 액터 종류 늘리기
  2. Infinite loop detected 오류 해결하기

1. 부실 수 있는 액터 종류 늘리기

 

보물에서 했던 것처럼 베이스 블루프린트 클래스를 놔두고 자식 클래스들을 만들어 다양환 종류의 액터를 만들어보려고 한다.

 

부실 수 있는 액터를 만들기 위해서는 지오메트리 컬렉션들이 필요하다. 부실만한 매시를 찾고 프랙쳐모드에서 지오메트리 컬렉션들을 만들자.

 

 

저기 항아리를 부실 것이다. 항아리의 크기가 작기 때문에 너무 잘게 부술 필요는 없다.

 

 

제네레이트의 new 아이콘을 눌러 지오메트리 컬렉션을 만들자. 이름은 알아보기 쉽게 바꾸는 편이 좋다.

 

 

프랙쳐는 유니폼으로 하고 보로노이 사이트의 숫자를 줄였다. 그 다음 본의 색깔을 원래대로 되돌리자.

 

 

 

bone 을 검색해서 Show Bone Colors의 체크를 해제하면 된다.

 

이제 프렉쳐를 하면 이 지오메트리 컬렉션을 부실 수 있게 된다. 이러한 지오메트리 컬렉션을 여러개 만들고 부실 수 있는 액터를 그만큼 늘리면 된다.

 

 

3가지 다른 종류의 부실 수 있는 액터들을 만들었다.


2. Infinite loop detected 오류 해결하기

 

이대로 블루프린트 클래스들을 배치하고 테스트 하다 보면 아래와 같은 오류가 종종 발생한다.

 

해당 오류는 너무 많이 부서져서, 즉 한번 부서진 액터가 또 부서지고 부서져서 발생하는 오류이다.

 

한번 히트하면 다시는 히트하지 않게 바꿔주어야 한다.

 

비주얼 스튜디오로 들아가자.

 

class PRACTICE_API ABreakableActor : public AActor, public IHitInterface
{

private:

	bool bBroken = false; // 액터가 부서졌는지 여부
    
}

 

불리언 변수 하나를 추가하여 해당 변수가 false일때만 함수를 작동하고 싶다.

 

void ABreakableActor::GetHit_Implementation(const FVector& ImpactPoint)
{
	if (bBroken) return;

	bBroken = true;
    // 생략

 

다음과 같이 설정하여 함수가 중복 호출되는 것을 방지할 수 있다.

 

이렇게 해서 부술 수 있는 액터들을 완성하였다.