스켈레톤 형 잡몹 클래스 입니다.
기본 잡몹 으로 스켈레톤형 몬스터를 만들었습니다.
무기로는 EDR_Enemy_SWeapon을 소캣 장착 해주었습니다.
기존에 보스에서 사용하던 aicontroller와 베헤이비어트리를 공유하지만 캐릭터에서 IsBoss를 만들어 보스와 잡몹을 분기처리 하였습니다.
기존에 보스일 경우에 실행되던 로직은 IsBoss가 true일 경우에만 실행하도록 하였습니다.
EDR_Enemy_Skeleton.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "MyCharacter.h"
#include "EDR_Enemy_Skeleton.generated.h"
/**
*
*/
UCLASS()
class EDR_API AEDR_Enemy_Skeleton : public AMyCharacter
{
GENERATED_BODY()
public:
AEDR_Enemy_Skeleton();
protected:
//virtual void BeginPlay()override;
virtual void BeginPlay() override;
};
반응형
EDR_Enemy_Skeleton.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "EDR_Enemy_Skeleton.h"
#include "EDR_Enemy_SWeapon.h"
AEDR_Enemy_Skeleton::AEDR_Enemy_Skeleton()
{
IsBoss = false;
IsFightStarting = true;
// hp 재정의
hp = 100.0f;
AttackDamage = 20.0f;
AttackRange = 200.0f;
AttackRadius = 150.0f;
SkillDamage = 20.0f;
SkillRange =300.0f;
SkillRadius = 150.0f;
// 속도
TargetSpeed = 200.0f;
Acceleration = 120.0f;
// 캐릭터 메시랑 캡슐콜리전
RootComponent = GetCapsuleComponent();
GetMesh()->SetupAttachment(GetCapsuleComponent());
GetCapsuleComponent()->SetCapsuleHalfHeight(88.0f);
GetCapsuleComponent()->SetCapsuleRadius(34.0f);
GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -88.0f), FRotator(0.0f, -90.0f, 0.0f));
// 메시 받아오기
static ConstructorHelpers::FObjectFinder<USkeletalMesh>MODEL(TEXT("/Game/SKnight_modular/Skeleton_Knight_01/mesh/SK_SKnigh_01_full.SK_SKnigh_01_full"));
if (MODEL.Succeeded())
{
GetMesh()->SetSkeletalMesh(MODEL.Object);
}
// 공격
static ConstructorHelpers::FObjectFinder<UAnimMontage> ATTACK_MONTAGE1(TEXT("/Game/GJ/Animation/Enemy_Anim/SkeletonEnemy/Attack/Anim_Sword_1H_Attack_Combo1_Montage.Anim_Sword_1H_Attack_Combo1_Montage"));
if (ATTACK_MONTAGE1.Succeeded())
{
AttackMontage.Add(ATTACK_MONTAGE1.Object);
}
static ConstructorHelpers::FObjectFinder<UAnimMontage> ATTACK_MONTAGE2(TEXT("/Game/GJ/Animation/Enemy_Anim/SkeletonEnemy/Attack/Anim_Sword_1H_Attack_Slash2_Montage.Anim_Sword_1H_Attack_Slash2_Montage"));
{
AttackMontage.Add(ATTACK_MONTAGE2.Object);
}
// 사망 애니메이션 몽타주 저장
static ConstructorHelpers::FObjectFinder<UAnimMontage>DEATHANIM(TEXT("/Game/GJ/Animation/Enemy_Anim/SkeletonEnemy/Deaths_Hit_Head_Spinning_Montage.Deaths_Hit_Head_Spinning_Montage"));
if (DEATHANIM.Succeeded())
{
DeathMontage = DEATHANIM.Object;
}
}
void AEDR_Enemy_Skeleton::BeginPlay()
{
Super::BeginPlay();
// 게임 실행시 캐릭터 손에 무기 장착
FName WeaponSocket(TEXT("hand_rSocket"));
CurrentWeapon = GetWorld()->SpawnActor<AEDR_Enemy_SWeapon>(FVector::ZeroVector, FRotator::ZeroRotator);
if (nullptr != CurrentWeapon)
{
CurrentWeapon->AttachToComponent(GetMesh(), FAttachmentTransformRules::SnapToTargetNotIncludingScale, WeaponSocket);
//CurrentWeapon->SetActorRelativeRotation(FRotator(0.0f, 0.0f, 180.0f)); // 180도 회전
//CurrentWeapon->SetActorRelativeLocation(FVector(0.0f, 0.0f, -10.0f)); // 무기이동
}
}
BP_EDR_Enemy_Skeleton
보스캐릭터와 동일한 aicontroller 사용
PointDamage로 피격 받은 부분에 직접적으로 이펙트를 출력하도록 하였습니다.
애니메이션
애니메이션 블루프린트도 제작해 주었고, 공격 및 사망 애니메이션도 추가하였습니다.
실행 화면
'Unreal Engine 5 > EDR_Project' 카테고리의 다른 글
EDR_Project / Character (12) (1) | 2024.12.12 |
---|---|
EDR_Project / EDR_Boss_Knight (4) 피격 사운드 출력 수정 (0) | 2024.12.02 |
EDR_Project / AnimInstance (3) 공격 판정 끝 (0) | 2024.12.02 |
EDR_Project / Character (11) 공격, 판정 수정 (3) | 2024.12.02 |
EDR_Project / Weapon (1) 무기 캡슐화 (0) | 2024.12.02 |