목차
- GetHit 함수 구현하기
- 캐릭터 매시 콜리전 설정 바꾸기
- 에너미 무기 콜리전 활성화 하기
- 에너미가 자기 자신 때리는 것 수정하기
1. GetHit 함수 구현하기
플레이어도 타격을 받으면 GetHit 함수를 호출하게 할 것이다. GetHit 함수는 인터페이스에 있으니 이것을 오버라이드 하자.
UCLASS()
class PRACTICE_API AKnight : public ABaseCharacter
{
GENERATED_BODY()
public:
AKnight();
virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
virtual void GetHit_Implementation(const FVector& ImpactPoint) override;
// 생략
}
이제 에너미가 검을 휘두를 때 콜리전을 활성화 시켜야 할 것이다.
콜리전을 활성화하고 비활성화 시킬 지점들에 노티파이를 추가하였다.
콜리전을 활성화 시켜도 현재 에너미가 타격을 받지는 않는다.
현재 폰의 경우 콜리전을 무시하도록 되어있다.
2. 캐릭터 매시 콜리전 설정 바꾸기
캐릭터 매시의 콜리전 설정을 바꾸자. C++에서 할 것이다.
#include "Components/StaticMeshComponent.h"
AKnight::AKnight()
{
// 생략
GetMesh()->SetCollisionObjectType(ECollisionChannel::ECC_WorldDynamic);
GetMesh()->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore);
GetMesh()->SetCollisionResponseToChannel(ECollisionChannel::ECC_Visibility, ECollisionResponse::ECR_Block);
GetMesh()->SetCollisionResponseToChannel(ECollisionChannel::ECC_WorldDynamic, ECollisionResponse::ECR_Overlap);
// 생략
}
플레이어의 매시를 Pawn에서 WorldDynamic 으로 바꾸고 콜리전 설정들도 무기에 히트할 수 있게 바꾸었다.
3. 에너미 무기 콜리전 활성화 하기
노티파이를 추가했으니 실제로 콜리전을 활성화하고 비활성화 시켜야 한다.
애니메이션 블루프린트의 이벤트 그래프에서 설정해주었다.
지금 이대로 테스트를 해보면 에너미가 자기 검에 맞아서 죽는 현상이 발생한다. 이를 고쳐야 할 것이다.
4. 에너미가 자기 자신 때리는 것 수정하기
태그를 이용해 이러한 것을 방지해볼것이다. 에너미의 비긴플레이 함수로 들어가자.
Tags.Add(FName("Enemy"));
태그를 추가해준다.
무기의 OnBoxOverlap()함수로 간다. 오너랑 히트한 액터가 같은지 아닌지 비교하면 자기가 자기자신을 때리는 것을 막을 수 있을 것이다.
void AWeapons::OnBoxOverlap(매개변수 생략)
{
if (GetOwner()->ActorHasTag(TEXT("Enemy")) && OtherActor->ActorHasTag(TEXT("Enemy"))) return;
FHitResult HitResult;
BoxTrace(HitResult);
if (HitResult.GetActor())
{
if (GetOwner()->ActorHasTag(TEXT("Enemy")) && HitResult.GetActor()->ActorHasTag(TEXT("Enemy"))) return;
//생략
오버랩된 액터는 물론 히트된 액터가 자기자신인지 확인한다.
이렇게 해서 플레이어의 히트가 구현되었다. 지금은 단순히 히트 이벤트만 발생하고 따로 뭔가 이루어지는 것은 없다. 이 다음에 이러한 것들을 구현하도록 하자
'게임프로그래밍 > 실습1' 카테고리의 다른 글
[언리얼 실습] 70. 방향성 히트 리액션 수정하기 (0) | 2024.11.08 |
---|---|
[언리얼 실습] 69. 플레이어 히트 구현하기 (0) | 2024.11.08 |
[언리얼 실습] 67. 에너미 Engage 상태로 만들기 (0) | 2024.11.07 |
[언리얼] 66. 에너미 공격 반복하기 (0) | 2024.11.07 |
[언리얼 실습] 65. 에너미 어택 몽타주 재생하기 (0) | 2024.11.06 |