목차
- 특정 상황에서만 트레이싱 진행하기
1. 특정 상황에서만 트레이싱 진행하기
공격 몽타주에서 노티파이를 이용해서 공격시작지점과 종료지점을 정한 뒤 이 사이에서만 콜리전을 활성화 시킬 것이다.
공격 시작 지점과 종료지점 각각 노티파이를 추가하자.
이제 C++에서 콜리전을 활성화 시키는 방법을 알아보자. 그전에 활성화를 시키려면 먼저 비활성화 시킬 필요가 있을 것이다.
무기 cpp파일로 가서 생성자에서 콜리전을 비활성화 시키자
AWeapons::AWeapons()
{
// 생략
WeaponBox->SetCollisionEnabled(ECollisionEnabled::NoCollision);
// 생략
}
이제 캐릭터 헤더파일에서 블루프린트에서 호출이 가능한 콜리전 활성화/비활성화 함수를 만들 것이다.
UFUNCTION(BlueprintCallable)
void EnableWeaponCollision();
UFUNCTION(BlueprintCallable)
void DisableWeaponCollision();
함수를 선언했으니 이를 정의해보자. 하지만 그 전에 생각해보면 굳이 이렇게 함수 두개를 만드는 것이 아니라 콜리전 설정을 매개변수로 받아서 콜리전 설정을 할 수 있을 것 같다.
매개변수를 받는 함수로 바꿔보자
UFUNCTION(BlueprintCallable)
void SetWeaponCollisionEnabled(ECollisionEnabled::Type CollisionEnabled);
다음과 같이 함수가 콜리전을 세팅할 수 있다는 의미로 이름을 바꾸고 매개변수로 ECollisionEnabled 열거형을 받을 수 있게 하였다.
함수를 정의해보자
void AKnight::SetWeaponCollisionEnabled(ECollisionEnabled::Type CollisionEnabled)
{
if (EquippedWeapon)
{
EquippedWeapon-> // 여기서 박스 컴포넌트를 호출
}
}
EquippedWeapon에 있는 박스 컴포넌트를 가져와야하는데 박스 컴포넌트가 현재는 프라이빗 영역에 있다. 이 박스 컴포넌트를 퍼블릭 영역에 옮기기 보다는 Getter를 만들어 가져와보도록 하자.
무기 헤더파일로 들어간다.
public:
FORCEINLINE UBoxComponent* GetWeaponBox() const { return WeaponBox; }
이렇게 Getter를 만들었으니 이를 이용해 박스 컴포넌트를 가져오자.
#include "Components/BoxComponent.h" // 박스컴포넌트 헤더파일을 가져와야 한다.
void AKnight::SetWeaponCollisionEnabled(ECollisionEnabled::Type CollisionEnabled)
{
if (EquippedWeapon && EquippedWeapon->GetWeaponBox())
{
EquippedWeapon->GetWeaponBox()->SetCollisionEnabled(CollisionEnabled);
}
}
이렇게 하면 박스 컴포넌트의 콜리전을 설정할 수 있다.
if문에서 박스 컴포넌트가 있는지 여부또한 체크하여 만약을 대비하였다.
이제 컴파일을 해서 블루프린트에서 설정하자
노티파이에 각각 콜리전을 설정해주면 된다.
이렇게 하면 평소에는 콜리전이 발생하지 않다가 공격시에만 콜리전이 활성화 되는 것을 볼 수 있다.
'게임프로그래밍 > 실습1' 카테고리의 다른 글
[언리얼 실습] 26. 에너미 클래스 만들기 (0) | 2024.10.28 |
---|---|
[언리얼 실습] 25. 언리얼 인터페이스 만들기 (0) | 2024.10.27 |
[언리얼 실습] 23. 무기 히트를 위한 콜리전 박스 추가랑 트레이싱 추가하기 (1) | 2024.10.27 |
[언리얼 실습] 22. C++에서 아이템 습득시 사운드 재생하기 (0) | 2024.10.27 |
[언리얼 실습] 21. 실제로 무장 해제하기 (0) | 2024.10.27 |