inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

강의 외 질문입니다..!

85

ajkdfj

작성한 질문수 16

0

지금 AI가 플레이어가 공격할 때 플레이어가 움직이거나 또는 AI 뒤쪽으로 이동하면 AI가 플레이어를 향해 회전을 해야 하는데 회전을 하지 않습니다.. 강의 코드와 한 줄 정도 다른데 왜 안되는 것인지 모르겠습니다..

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

	APawn* NPC = OwnerComp.GetAIOwner()->GetPawn();	// NPC 가져오기
	if (NPC == nullptr)
	{
		return EBTNodeResult::Failed;
	}

	FName PlayerName = TEXT("Target");
	APawn* Player = Cast<APawn>(OwnerComp.GetBlackboardComponent()->GetValueAsObject(PlayerName));	// Target 가져오기
	if (Player == nullptr)
	{
		return EBTNodeResult::Failed;
	}

	float TurnSpeed = 1.0f;
	FVector LookTargetVector = Player->GetActorLocation() - NPC->GetActorLocation();
	FRotator LookTarget = FRotator(0.0f, LookTargetVector.Rotation().Yaw, 0.0f);	// 회전 값
	NPC->SetActorRotation(FMath::RInterpTo(NPC->GetActorRotation(), LookTarget, GetWorld()->GetDeltaSeconds(), TurnSpeed));

	return EBTNodeResult::Succeeded;
}

그리고 갑자기 루트 노드에서 멈춥니다.. 하위 노드들을 실행을 해야 하는데 루트노드에만 노란색으로 고정되어있는데 뭐를 확인해야 하나요?

unreal-engine ue-blueprint 언리얼-c++

답변 2

0

이득우

음.. 어떤 부분을 수정해서 문제가 발생한 것일까요?
실행이 안되거나 BT가 루트노드에서만 멈추고 있다면 여러가지 복잡적인 이유가 있을 것 같은데, 해당 코드만으로는 제가 조언드리기가 쉽지 않네요.

0

ajkdfj

지금 멈추는 BT가 BT_NPC인데 BT_NPC와 동일하게 BT_Attack을 만들어주었습니다. 근데 BT_Attack은 동작을 하는데 BT_NPC는 동작하지 않습니다. 수정을 한 부분은 없었는데 갑자기 루트노드에서 멈추었습니다.(이 문제는 언리얼 포럼에도 물어보았습니다..!)

0

이득우

루트 노드가 반짝인다는 것은 우선 동작은 한다는 것인데, 하위 노드로 안가는 문제는 컴포짓 노드로의 조건이 안맞아서 진행이 안되는 것으로 보여집니다. 각 조건을 한 번 확인해보세요.

0

ajkdfj

image.png

데코레이터에 빨간 색 표시가 조건이 맞지 않아서 그렇다는 것인가요? 그럼 동일하게 만들어진 BT_Attack은 왜 실행이 되는 것인지 궁금합니다..

0

이득우

오른쪽의 시퀀서가 실패하는 것으로 보여지는데요.
다음 위치를 못 찾는게 아닌가 생각됩니다. 내비메시 설정은 잘 되었을까요?

아니면 Origin 값이 내비메시 가능한 지역에 올바로 설정되어 있는지도 한번 점검해보세요

0

ajkdfj

알고보니까 TargetChase가 Selector 노드에 연결되어 있지 않아서 발생한 문제 같습니다..

플레이를 해보니 노드가 TargetChase가 연결되어 있지 않으면 빨간색 표시가 나타나고, 노드를 연결해주면 정상적으로 BT가 실행이 됩니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. ajkdfj님.

AI가 플레이어를 향해 회전할 때 해당 코드에서 발생할 수 있는 문제에 대해 알아보겠습니다. AI가 플레이어를 즉시 바라보지 않는 이유는 태스크가 매 프레임 실행되지 않고, EBTNodeResult::Succeeded를 반환하면서 태스크가 종료되기 때문입니다.

문제 원인

현재 UBTTask_Turn 클래스의 ExecuteTask 메서드는 매 프레임마다 AI의 회전을 점진적으로 변경하려고 하지만, 실행 후 즉시 종료됩니다. 이 때문에 AI는 한 번 회전한 후 그대로 멈춰버립니다.

해결 방법

  1. Tick Function 사용:
    태스크의 지속적인 업데이트를 위해서는 Tick 함수로 회전 로직을 옮기는 것이 필요합니다. 그러나 Behavior Tree Task에서 Tick 함수를 사용하는 것은 일반적이지 않기 때문에 ServiceDecorator로 구현하는 것이 더 나을 수 있습니다.

  2. Parallel Node 활용:
    Behavior Tree 내에서 해당 태스크를 Parallel 노드와 함께 사용하여 지속적으로 실행할 수 있도록 구조를 변경할 수 있습니다. ServiceDecorator를 통해 AI의 회전 상태를 지속적으로 체크하고 변경할 수 있습니다.

참고 자료

여기 유사한 질문과 해결 방법을 다룬 게시물을 참고하시면 좋을 것 같습니다:
- BTTask_TurnTo 확장에 대한 추가적인 방법 논의 - Tick 함수나 Parallel Node의 사용 사례

우선은 AI의 회전 로직을 계속적으로 갱신하기 위한 설계와 Behavior Tree의 구조에 대해 다시 한 번 고찰해 보시길 권장드립니다. 문제가 해결되지 않거나 추가적인 기술 지원이 필요하다면 언제든지 질문해 주세요. 더 많은 정보와 코드가 도움이 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

무한맵 제작과정중에 GetWorld 가 Nullptr 을 반환합니다.

0

44

2

12강 행동트리에서 질문이 있습니다.

0

51

1

위젯 사이즈랑 위치 질문드려요.

0

81

3

행동트리의 데코레이션 관련하여 질문이 있습니다.

0

93

3

VS 2026 의 문제일까요?

0

480

2

에셋참조 블루프린트질문

0

67

2

애님 몽타주 콤보 관련질문

0

70

2

ThirdPerson CDO 에러가 생깁니다.

0

95

3

캐릭터가 움직이지 않습니다.

0

179

4

쿠킹 폴더 지정시 , Item 이외에는 지정하지 않는지 궁금합니다.

0

62

2

TSoftObjectPtr 를 사용했음에도, 메모리에 로드 됩니다.

0

94

2

7강에 나오는 생성자에 대해서 궁금합니다.

0

78

2

6강을 마무리하며 트레이스 채널 을 이해하지 못했습니다.

0

73

2

3강을 마무리 하며, 카메라가 움직이지 않습니다.

0

70

2

Use Controller Rotation 옵션값이 궁금합니다.

0

83

2

3강 입력 시스템 적용 중, 5.6 버전은 입력 매팅이 2개 입니다.

0

64

2

PlayerController 에 대헤 제가 잘못 이해한 것 같습니다.

0

78

2

13강 UpdateStat 부분에서 문제를 겪고 있습니다.

0

63

2

BP_PlayerController의 CustomEvent노드 이유가 궁금합니다.

0

64

1

콤포넌트 포인터 선언시 TObjectPtr<>과 UStaticMeshComponent* 차이점

0

72

2

CharacterMovementComponent의 RotationRate관련해서 질문이 있습니다.

0

114

2

언리얼 공부방법에 대해 질문드립니다.

0

86

2

4강 에서 이상한 그림자가 남습니다.

0

46

1

2강에서 카메라 회전안되시는분 참고

2

90

2