Загружаем каталог…
Загружаем каталог…
GitHub 링크 Notion 링크 오늘 보고서부터 기존에 ‘TODO’ 항목으로 정리하던 향후 개선 및 검토 사항은 노션 보고서에 기록하고, 본 게시물에는 실제 개발 내용과 개발 과정에서 새롭게 알게 된 내용만 작성할 예정이다. 적 캐릭터의 공격 스킬 추가 위처럼 Special Attack 타입의 PerformAttack 노드를 만들어주고, 위와 같이 Selector를 하나 더 두고 Decorator를 Selector로 올려준다. 이제 Special Attack의 발동 조건을 설정해주자. 반경과 발동 확률을 기준으로 Decorator를 설정해줄 예정이다. 위와 같이 Decorator들을 만들어준다. 첫번째는 확률을 체크하는 Decorator이고, 또 다른 하나는 반경을 확인하는 Decorator이다. BTDecorator_Chance.h #pragma once #include "CoreMinimal.h" #include "BehaviorTree/BTDecorator.h" #include "BTDecorator_Chance.generated.h" /** * */ UCLASS() class SOULLIKEGAME_API UBTDecorator_Chance : public UBTDecorator { GENERATED_BODY() protected: UPROPERTY(EditAnywhere, BlueprintReadWrite) int32 ChanceRate = 30; protected: virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override; }; BTDecorator_Chance.cpp #include "AI/Decorator/BTDecorator_Chance.h" bool UBTDecorator_Chance::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const { return ChanceRate > FMath::RandRange(1, 100); } BTDecorator_InRangeCheck.h #pragma once #include "CoreMinimal.h" #include "BehaviorTree/BTDecorator.h" #include "BTDecorator_InRangeCheck.generated.h" /** * */ UCLASS() class SOULLIKEGAME_API UBTDecorator_InRangeCheck : public UBTDecorator { GENERATED_BODY() protected: UPROPERTY(EditAnywhere, BlueprintReadWrite) FBlackboardKeySelector TargetBlackboardKey; UPROPERTY(EditAnywhere, BlueprintReadWrite) float RangeMin = 100.f; UPROPERTY(EditAnywhere, BlueprintReadWrite) float RangeMax = 200.f; protected: virtual bool CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const override; }; BTDecorator_InRangeCheck.cpp #include "AI/Decorator/BTDecorator_InRangeCheck.h" #include "AIController.h" #include "BehaviorTree/BlackboardComponent.h" #include "Kismet/KismetMathLibrary.h" bool UBTDecorator_InRangeCheck::CalculateRawConditionValue(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) const { const APawn* ControlledPawn = OwnerComp.GetAIOwner()->GetPawn(); if (!ControlledPawn) { return false; } const AActor* TargetActor = Cast<AActor>(OwnerComp.GetBlackboardComponent()->GetValueAsObject(TargetBlackboardKey.SelectedKeyName)); if (!TargetActor) { return false; } const float Distance = ControlledPawn->GetDistanceTo(TargetActor); return UKismetMathLibrary::InRange_FloatFloat(Distance, RangeMin, RangeMax); } 위와 같이 Decorator를 설정해준다. CalculateRawConditionValue() 함수를 오버라이딩해서 구현하면 된다. 실행해보면 스킬 자체는 사용하고 있는데, 방향을 제대로 못잡고 있는 것을 확인할 수 있다. 그전에 적의 무기 DA를 따로 만들어주자. 적 캐릭터의 행동 패턴 구현 Contents
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
2026.09.28 디벨로켓 언리얼5 개인 프로젝트 개발 노트. GitHub 링크 Notion 링크 오늘 보고서부터 기존에 ‘TODO’ 항목으로 정리하던 향후 개선 및 검토 사항은 노션 보고서에 기록하고, 본 게시물에는 실제 개발 내용과 개발 과정에서 새롭게 알게 된 내용만 작성할 예정이다. 적 캐릭터의 공격 스킬 추가 위처럼 Special Attack 타입의 PerformAttack 노드를 만들어주고, 위와 같이 Selector를 하나 더 두고 Decorator를 Selector로 올려준다. 이제 Special Attack의 발동 조건을 설정해주자. 반경과 발동 확률을 기준으로 Decorator를 설정해줄 예정이다. 위와 같이 Decorator들을 만들어준다. 첫번째는 확률을 체크하는…
Открыть источник2026.09.28 디벨로켓 언리얼5 개인 프로젝트 개발 노트. GitHub 링크 Notion 링크 적 캐릭터의 공격 스킬 추가 Contents 적 캐릭터의 행동 패턴 구현 Contents
Открыть источник