EDR_Project / TurnToTarget (1)

24.11.25 TurnToTarget 수정 사항 입니다.

기존에 코드에서 잘못 캐스팅 했어서 회전이 안되었었는데 수정 했습니다.

공격시에 플레이어 캐릭터를 계속해서 바라보게 회전하고 전투 시작 애니메이션 재생시에도 똑같이 플레이어 캐릭터를 바라보게 하였습니다.

 

BTT_EDR_TurnToTarget.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "BehaviorTree/BTTaskNode.h"
#include "BTT_EDR_TurnToTarget.generated.h"

/**
 *
 */
UCLASS()
class EDR_API UBTT_EDR_TurnToTarget : public UBTTaskNode
{
	GENERATED_BODY()

public:
	UBTT_EDR_TurnToTarget();
	virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)override;

};
반응형

BTT_EDR_TurnToTarget.cpp

// Fill out your copyright notice in the Description page of Project Settings

#include "BTT_EDR_TurnToTarget.h"
#include "Enemy_EDR_AIController.h"
#include "MyCharacter.h"
#include "EDR/YS/EDRCharacter.h"
#include "BehaviorTree/BlackboardComponent.h"

UBTT_EDR_TurnToTarget::UBTT_EDR_TurnToTarget()
{
	NodeName = TEXT("Turn");
}

EBTNodeResult::Type UBTT_EDR_TurnToTarget::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
{
	EBTNodeResult::Type Result = Super::ExecuteTask(OwnerComp, NodeMemory);

	// MyCharacter 캐스팅
	auto MyCharacter = Cast<AMyCharacter>(OwnerComp.GetAIOwner()->GetPawn());
	if (nullptr == MyCharacter)
	{
		GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, TEXT("MyCharacter NULL"));
		return EBTNodeResult::Failed;
	}

	// target 캐스팅
	auto Target = Cast<AEDRCharacter>(OwnerComp.GetBlackboardComponent()->GetValueAsObject(AEnemy_EDR_AIController::TargetKey));
	if (nullptr == Target)
	{
		GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, TEXT("Target NULL"));
		return EBTNodeResult::Failed;
	}

	// target과 mycharacter의 차이 벡터값
	FVector LookVecter = Target->GetActorLocation() - MyCharacter->GetActorLocation();

	// 로케이션 변경
	LookVecter.Z = 0.0f;
	FRotator TargetRot = FRotationMatrix::MakeFromX(LookVecter).Rotator();
	MyCharacter->SetActorRotation(FMath::RInterpTo(MyCharacter->GetActorRotation(), TargetRot, GetWorld()->GetDeltaSeconds(), 2.0f));


	return EBTNodeResult::Succeeded;
}

비헤이비어트리

전투시작 애니메이션이 끝나지 않았을경우에도 오른쪽 노드에서 플레이어를 계속 쳐다봅니다.

Attack실행시에도 플레이어를 계속 쳐다봅니다.

실행화면