본문 바로가기

게임프로그래밍/실습1

[언리얼 실습] 36. 무기로 필드 시스템 생성하기


목차

  1. 무기로 파괴가능한 매시 부수기

1. 무기로 파괴가능한 매시 부수기

 

전의 포스트에서 필드시스템액터를 이용해서 파괴가능한 매시를 부수었다. 이번에는 필드시스템액터가 아닌 무기를 통해 이를 구현해보도록 하자.

 

비주얼스튜디오를 키고 웨폰 헤더파일로 들어가자.

 

UFUNCTION(BlueprintImplementableEvent)
void CreateFields(const FVector& FieldLocaion);

 

C++에서는 단순히 함수를 호출만 하고 구현은 블루프린트에서 할 거라 BlueprintImplementableEvent 속성을 주었다.

 

필드를 생성하기 좋은 곳은 어디일까? 무기가 무언가와 부딪힐 때일 것이다.

 

void AWeapons::OnBoxOverlap()
{
	// 생략
  if (HitResult.GetActor())
 {
	IHitInterface* HitInterace = Cast<IHitInterface>(HitResult.GetActor());
	if (HitInterace)
	{
		HitInterace->GetHit(HitResult.ImpactPoint);
	}
	IgnoreActors.AddUnique(HitResult.GetActor());

	CreateFields(HitResult.ImpactPoint);
 }
}

 

 

위의 함수에서 CreateFields 함수를 호출할 것이다.

 

 

이제 컴파일하고 무기 블루프린트에서 함수를 구현하도록 해보자.

 

 

무기 블루프린트의 이벤트 그래프에서 C++에서 선언한 함수를 찾자. 그 다음 필드시스템액터에서 했던 것과 같은 일을 할 것이다.

 

필드시스템액터

 

필드시스템액터에서 만들었던 컴포넌트들을 생성할 것이다.

무기 클래스

 

이렇게 컴포넌트들을 추가하였다. 나머지는 필드시스템 액터에서 했던 그대로 다시 하면 된다.

 

 

이런 식으로 연결해주자.

 

이제 히트 이벤트를 발생시켜야 하는데 그러기 위해서 파괴가능한 액터의 설정을 해줄 필요가 있다.

 

 

오버랩 이벤트 생성에 체크를 해주고,

 

 

지오메트리 콜렉션 디테일창으로 들어가 Implicit Type을 Capsule로 바꿔준다. (이건 꼭 안해도 정상적으로 부서지기는 한다. 박스트레이싱이 좀 더 쉽게 작동하게 하기 위해 설정을 바꿔준 것인데 정확히 어떻게 바뀌는 지는 코드를 뜯어보지 않는 이상 알기 힘들다고 한다.)

 

(추가 - 캡슐로 하면 파편이 너무 돌아다녀 Box로 설정하는 편이 좋을 수도 있다.)

 

이제 테스트를 하면 잘 부서지는 것을 볼 수 있다. magnitude의 경우 계속 숫자를 바꿔가며 테스트를 해보면서 어느정도가 적당한지 확인해봐야한다.

 

이제 한가지 문제가 있다. 부서진 파편이 카메라와 충돌하여 문제가 생긴다. 이 부분은 다음에 해결해보기로 한다. 단순히 카메라 충돌을 없애버리면 파괴가 되기 전부터 물체를 투과해서 볼 수 있게 된다.

 

그렇기 때문에 물체가 파괴된 순간에만 충돌을 제거할 것이다.