본문 바로가기
Unreal StaticClass() StaticClass()이 함수는 클래스의 UClass 객체를 반환하는 정적 메서드로 주어진 클래스에 대한 정보를 저장한다.특정 클래스의 인스턴스를 생성할 때 또는 해당 클래스와 관련된 작업을 수행할 때 유용하게 사용된다.더보기정적 메서드: 객체 인스턴스와 관련 없이 클래스 자체에 속하는 메서드이다.객체를 생성하지 않고 호출이 가능하며 보통 클래스의 공통 기능이나 유틸리티 기능을 제공하는데 사용된다.더보기UclassUClass는 UE에서 클래스를 정의하고 관리하는 시스템.모든 UObject 파생 클래스(Actor, Component)는 UClass를 통해 인스턴스를 생성하고 조작이 가능하다. 또한 클래스의 구조, 속성, 메서드, 가상 함수, 에디터 노출 등 다양한 메타 정보를 저장한다. StaticCla.. 2024. 10. 3.
Effective C++ 항목 2: #define보단 const, inline을 사용하자. #define의 문제점#define은 매크로 상수나 매크로 함수를 정의하는데 사용된다. 이때 발생하는 문제점은 다음과 같다. #define으로 만들어진 매크로 상수는 기호식 이름(symbolic name)으로 보이지만 컴파일러에겐 보이지 않는다.#define A_define 16.3#define은 컴파일러가 처리하기 전에 전처리기가 작동해서 코드 내에 있는 모든 A_define를 16.3으로 바꾸는 텍스트 치환을 수행한다.즉, 컴파일러는 매크로 자체에 대해 아무 정보를 갖지 않고 치환된 값을 기준으로 컴파일한다. 그래서 생기는 문제점이 뭔가?이렇게 정의되어 있다면 A에 16.3이라는 값을 매크로로 할당한 것이다.그럼 이 값이 어떤 타입(int, double, float)인지 알 수 없다. 컴파일러는 매크.. 2024. 9. 30.
Unreal BehaviorTree RequestExecution(), StopTree() Player를 쫓아오는 AI를 만들 때 일정 거리에 도달하면 근처에서 대치하는 상황을 만들고 싶었다. 이때 이상한 현상이 발생했다.코드는 다음과 같다.void UBTD_IsWithInIdealRange::TickNode(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory, float DeltaSeconds){ CalculateRawConditionValue(OwnerComp, NodeMemory); if(!TickFlag){ UE_LOG(LogTemp, Display, TEXT("Tick Node!!")); TickFlag = true; }}bool UBTD_IsWithInIdealRange::CalculateRawCon.. 2024. 9. 24.
Unreal BehaviorTree OnBecomeRelevant & OnCeaseRelevant OnBecomeRelevant & OnCeaseRelevant먼저 OnBecomeRelevant를 도큐먼트에 검색해보면 두가지가 나온다.https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Runtime/AIModule/BehaviorTree/Decorators/UBTDecorator_BlueprintBase/OnBecomeRelevant?application_version=5.4https://dev.epicgames.com/documentation/en-us/unreal-engine/API/Developer/AITestSuite/BehaviorTree/UTestBTDecorator_Blackboard/OnBecomeRelevant?applic.. 2024. 9. 24.
Unreal Behavior Tree 'Check Condition Only if Blackboard Changes' Behavior Tree의 Decorator를 Blueprint로 만든 것에서 CPP로 만들다가 발생한 이슈에 대한 풀이이다.이 영상이 의도한대로 구현된 것이다. 일정거리 이상 멀어지면 바로 따라오도록 만들고 싶었다.Blueprint로 만든 것은 이렇게 생겼다. 이걸 그대로 구현하고 싶어서 cpp에는 이렇게 만들었다.#include "Enemy/EnemyAI/Decorator/BTD_IsWithInIdealRange.h"#include "AIController.h"#include "BehaviorTree/BlackboardComponent.h"UBTD_IsWithInIdealRange::UBTD_IsWithInIdealRange(){}bool UBTD_IsWithInIdealRange::Calculate.. 2024. 9. 23.
Unreal Behavior Tree SetFocus Not Working 우와... 이거 찾는다고 너무 오래 걸렸다.특이하게 SetFocus를 활용하려면 해당 Actor의UseController Desired Rotation은 활성화 되어 있어야하고Orient Rotation to Movement는 비활성화 되어 있어야한다. 어느 순간 Strafe를 하면서 Player를 쳐다보지 않아서 계속 헤매다가 발견했다.이렇게 메모장에 끄적이면서 찾았는데 원인이 맞았다. 내가 찾았을 때는 이렇게 설정이 되어있었다. 두 설정 설명Use Controller Desired Rotation캐릭터가 Controller (Player or AI System)의 회전 방향을 따라가도록 하는 설정이다.Player의 경우 마우스나 게임패드로 조종하는 Yaw(수평 회전) 방향을 그대로 캐릭터가 회전하며A.. 2024. 9. 10.
Unreal BehaviorTree Task C++ ShowPropertyDetails 위의 FocusTarget은 C++로 만든 Task이고 아래는 BP로 만든 Task이다.기능을 만들다가 BP로 만든 것은 아래에 Attack Target Key가 어떤 것을 지정하고 있는지 나타내는게 한눈에 확인하기가 편해서 C++로 만든 Task로도 보고 싶어서 찾아봤다. 해당 옵션을 활성화 시키면 원하는 동작이 되는 것을 확인하고 찾아보았다.  C++ 제작 방법C++에는  이런 함수가 있다는 것을 확인했다.이걸 .h파일에 적는다.virtual FString GetStaticDescription() const override; 그리고 cpp 파일에 다음과 같이 작성했다.FString UBTTask_FocusTarget::GetStaticDescription() const{ return FStrin.. 2024. 9. 9.
C++ 람다 표현식 (Lambda expression) auto basicLambda = [] (int i) {cout C++ 코드를 보니 람다 표현식이 많이 나오는데 정확하게 무엇인지 몰라서 공부하게 되었다. 람다 표현식함수나 객체를 별도로 정의하지 않고 필요한 시점에서 바로 함수를 만들어 쓸 수 있는 일종의 익명함수이다.잘 사용하면 코드를 깔끔하게 만들 수 있다. 문법기본적인 문법auto basicLambda = [] {cout 람다 표현식은 람다 선언자(람다 소개자)라는 []로 시작하고 람다 표현식의 본문을 담는 {}가 나온다.람다 표현식은 auto 타입 변수인 basicLambda에 대입된다. auto basicLambda = [] (int i) {cout 람다 표현식도 일반 함수와 마찬가지로 ()안에 매개변수를 넣을 수 있다.람다 표현식에서 매개변수.. 2024. 9. 5.
Unreal Behavior Tree EQS 에러 해결 지금 적이 공격을 받고 체력이 떨어졌을 때 벽 뒤로 숨는 기능을 EQS로 만들다가 특이한 에러가 있어서 기록하려고 한다.Item Height Offset에 관한 설명은 다음과 같이 나온다. 그래서 EQS로 생성하는 Point는 같은 평면에 있어서 움직이지 않아도 되겠지라고 생각하며 Default인 0으로 두고 다양하게 시도 해봤지만 되지 않았다.아무거나 건들여보자라는 생각으로 Item Height Offset을 100으로 수정하니 원하는 결과가 나왔다. EQS의 오류인지 아니면 내가 이해하지 못한 무언가가 있는지는 아직까지는 잘 모르겠다. EQS는 Player Start를 기준으로 생성되고 있으며 Test Pawn과 Player Start의 Z값은 서로 같다.겨우 0.1의 값만 넣어도 원하는 방향으로 적.. 2024. 8. 26.