[박치영] Skeletal Enemy 작업

main
PCYPC\pcy35 2023-09-13 21:26:59 +09:00
parent 9da6cabc98
commit ff4c626d33
62 changed files with 63 additions and 21 deletions

Binary file not shown.

View File

@ -109,6 +109,9 @@ AMasterAI::AMasterAI()
//Setting Timeline //Setting Timeline
RotateToTargetTimeLineComponent = CreateDefaultSubobject<UTimelineComponent>(TEXT("RotateToTargetTimeLineComponent")); RotateToTargetTimeLineComponent = CreateDefaultSubobject<UTimelineComponent>(TEXT("RotateToTargetTimeLineComponent"));
static ConstructorHelpers::FObjectFinder<UCurveFloat> UCurveObj(TEXT("/Game/CombatSystem/Blueprints/Timeline/RotateToTargetCurve.RotateToTargetCurve"));
if(UCurveObj.Succeeded())
CurveFloatTimeline = UCurveObj.Object;
} }
void AMasterAI::BeginPlay() void AMasterAI::BeginPlay()
@ -305,6 +308,11 @@ void AMasterAI::OnTargetSet(AActor* NewTarget)
TargetActor = NewTarget; TargetActor = NewTarget;
} }
UPrimitiveComponent* AMasterAI::GetWeaponMesh()
{
return nullptr;
}
void AMasterAI::SetMovementSpeedMode(EMovementSpeedMode NewSpeedMode) void AMasterAI::SetMovementSpeedMode(EMovementSpeedMode NewSpeedMode)
{ {
if (NewSpeedMode == MovementSpeedMode) if (NewSpeedMode == MovementSpeedMode)

View File

@ -80,6 +80,7 @@ public:
virtual void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override { TagContainer = OwnedGameplayTags; } virtual void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override { TagContainer = OwnedGameplayTags; }
public: public:
virtual void OnTargetSet(AActor* NewTarget); virtual void OnTargetSet(AActor* NewTarget);
virtual UPrimitiveComponent* GetWeaponMesh();
public: public:
void SetMovementSpeedMode(EMovementSpeedMode NewSpeedMode); void SetMovementSpeedMode(EMovementSpeedMode NewSpeedMode);
FORCEINLINE EMovementSpeedMode GetMovementSpeedMode() const { return MovementSpeedMode; } FORCEINLINE EMovementSpeedMode GetMovementSpeedMode() const { return MovementSpeedMode; }

View File

@ -32,12 +32,6 @@ AMobEnemy::AMobEnemy()
HealthBarComponent->SetVisibility(false); HealthBarComponent->SetVisibility(false);
} }
//Setting WeaponMeshComponent
WeaponMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("WeaponMeshComponent"));
WeaponMeshComponent->SetRelativeLocationAndRotation(FVector(0.f, 0.f, 0.f), FRotator(0.f, 0.f, 0.f));
WeaponMeshComponent->SetupAttachment(GetMesh(), AttachSocketName);
WeaponMeshComponent->SetCollisionEnabled(ECollisionEnabled::NoCollision);
//Setting MainWeaponCollisionComponent //Setting MainWeaponCollisionComponent
//Setting others is Parents //Setting others is Parents
MainWeaponCollisionComponent->OnHitDelegate.BindUObject(this, &AMobEnemy::OnHit); MainWeaponCollisionComponent->OnHitDelegate.BindUObject(this, &AMobEnemy::OnHit);
@ -51,17 +45,14 @@ void AMobEnemy::BeginPlay()
{ {
Super::BeginPlay(); Super::BeginPlay();
MainWeaponCollisionComponent->SetCollisionMeshComponent(WeaponMeshComponent); MainWeaponCollisionComponent->SetCollisionMeshComponent(GetWeaponMesh());
MainWeaponCollisionComponent->AddActorToIgnore(this); MainWeaponCollisionComponent->AddActorToIgnore(this);
if(APlayerController* playerController = UGameplayStatics::GetPlayerController(GetWorld(), 0)) UUI_HealthBar* HealthBarRef = Cast<UUI_HealthBar>(HealthBarComponent->GetWidget());
if (HealthBarRef) //ExposeOnSpawn 대용으로 사용
{ {
UUI_HealthBar* HealthBarRef = Cast<UUI_HealthBar>(HealthBarComponent->GetWidget()); HealthBarRef->InitializeHealthBar(this->StatsComponent, EStats::Health);
if(HealthBarRef) //ExposeOnSpawn 대용으로 사용 HealthBarComponent->SetWidget(HealthBarRef);
{
HealthBarRef->InitializeHealthBar(this->StatsComponent, EStats::Health);
HealthBarComponent->SetWidget(HealthBarRef);
}
} }
} }
@ -89,7 +80,7 @@ void AMobEnemy::OnCombatToggled(bool IsCombatEnabled)
else else
SocketName = AttachSocketName; SocketName = AttachSocketName;
FAttachmentTransformRules rules(EAttachmentRule::SnapToTarget, EAttachmentRule::SnapToTarget, EAttachmentRule::SnapToTarget, true); FAttachmentTransformRules rules(EAttachmentRule::SnapToTarget, EAttachmentRule::SnapToTarget, EAttachmentRule::SnapToTarget, true);
WeaponMeshComponent->AttachToComponent(GetMesh(), rules, SocketName); GetWeaponMesh()->AttachToComponent(GetMesh(), rules, SocketName);
} }
void AMobEnemy::PerformDeath() void AMobEnemy::PerformDeath()
@ -101,6 +92,6 @@ void AMobEnemy::PerformDeath()
void AMobEnemy::SimulateWeaponPhysics() void AMobEnemy::SimulateWeaponPhysics()
{ {
WeaponMeshComponent->SetCollisionProfileName(TEXT("PhysicsActor"), true); GetWeaponMesh()->SetCollisionProfileName(TEXT("PhysicsActor"), true);
WeaponMeshComponent->SetSimulatePhysics(true); GetWeaponMesh()->SetSimulatePhysics(true);
} }

View File

@ -19,8 +19,6 @@ public:
private: private:
UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="UI", meta=(AllowPrivateAccess="true")) UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category="UI", meta=(AllowPrivateAccess="true"))
TObjectPtr<class UWidgetComponent> HealthBarComponent; TObjectPtr<class UWidgetComponent> HealthBarComponent;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Component", meta=(AllowPrivateAccess="true"))
TObjectPtr<class UStaticMeshComponent> WeaponMeshComponent;
protected: protected:
virtual void BeginPlay() override; virtual void BeginPlay() override;
@ -38,7 +36,7 @@ public:
virtual void PerformDeath() override; virtual void PerformDeath() override;
void SimulateWeaponPhysics(); void SimulateWeaponPhysics();
private: protected:
UPROPERTY(EditAnywhere, Blueprintable, Category="Initialization", meta=(AllowPrivateAccess="true")) UPROPERTY(EditAnywhere, Blueprintable, Category="Initialization", meta=(AllowPrivateAccess="true"))
FName AttachSocketName; FName AttachSocketName;
UPROPERTY(EditAnywhere, Blueprintable, Category="Initialization", meta=(AllowPrivateAccess="true")) UPROPERTY(EditAnywhere, Blueprintable, Category="Initialization", meta=(AllowPrivateAccess="true"))

View File

@ -0,0 +1,18 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "AI/SkeletonEnemy.h"
ASkeletonEnemy::ASkeletonEnemy()
{
//Setting WeaponMeshComponent
WeaponMeshComponent = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("WeaponMeshComponent"));
WeaponMeshComponent->SetRelativeLocationAndRotation(FVector(0.f, 0.f, 0.f), FRotator(0.f, 0.f, 0.f));
WeaponMeshComponent->SetupAttachment(GetMesh(), AttachSocketName);
WeaponMeshComponent->SetCollisionEnabled(ECollisionEnabled::NoCollision);
}
UPrimitiveComponent* ASkeletonEnemy::GetWeaponMesh()
{
return WeaponMeshComponent;
}

View File

@ -0,0 +1,26 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "AI/MobEnemy.h"
#include "SkeletonEnemy.generated.h"
/**
*
*/
UCLASS()
class D1_API ASkeletonEnemy : public AMobEnemy
{
GENERATED_BODY()
public:
ASkeletonEnemy();
private:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Component", meta=(AllowPrivateAccess="true"))
TObjectPtr<USkeletalMeshComponent> WeaponMeshComponent;
protected:
virtual UPrimitiveComponent* GetWeaponMesh() override;
};