본문 바로가기

언리얼 입문12

[언리얼 입문] 언리얼 컨테이너 일반적인 c++의 STL을 사용하면 크래쉬나서 문제생길 가능성이 매우높음 자체적으로 만들어진걸 사용해야함 string FString vector TArray unordered_map TMap TArray의 Empty()는 Vector의 clerar()와 같은기능 주의필요, 비어있는걸체크하는게아니다. 2023. 11. 6.
[언리얼 입문] BehaviorTree #2 이번엔 저번 실습에 새노드를을 추가해서 적탐색과 적추적과 공격하는 AI를 추가하는 과정을 정리해봤다. 이번엔 저번에 사용햇던 시퀀스와는달리 셀렉터 라는 노드가 새로 추가되는데 이 셀렉터노드의 역할은 if else같은 역할을 한다고 보면된다 자식노드를 왼쪽부터 순차적으로 실행해 자식노드가 실패하면 다음 자식을 실행하는 구조로 되어있고 자식이 성공하면 다른 자식은 실행되지않는다. 이런 특성을 통해 타겟을 발견하면 추적 - 공격 하고 실패시 랜덤이동하는 AI를 구성하는 실습이었다. 먼저 셀렉터에대한 조건을 추가해줘야한다. 타겟서치에대한 서비스를 새로 생성해줘야했는데 BTService를 상속받는 새 C++를 하나 만들어준다. 서비스의 역할이 뭔지 궁금해서 따로 GPT로 검색해봤는데 서비스는 다른 노드의 실행중에.. 2023. 11. 6.
[언리얼 입문] BehaviorTree #1 이번엔 Behaivor Tree를 사용한 AI 구현에 대해 실습해봤다. 유니티에서는 에셋으로 샘플정도만 사용해봤는데 언리얼은 해당툴이 기본으로제공이된다. Behavior Tree를 사용하기위해선 먼저 BlackBoard와 BehaviorTree 파일을 하나씩 생성해줘야한다. 이후 사용하기 위해서는 이전에 만들었던 AI컨트롤러에 OnPossess를 수정해줘야하는데 //AI컨트롤 헤더 UPROPERTY() class UBehaviorTree* BehaviroTree; UPROPERTY() class UBlackboardData* BlackboardData; //AI컨트롤 CPP void AMyAIController::OnPossess(APawn* InPawn) { Super::OnPossess(InPawn).. 2023. 11. 6.
[언리얼 입문] AI Controller 간단한 랜덤이동 AI구현 실습내용 이다. 먼저 AIController를 상속받는 새 C++파일을 하나 생성하고 내용을 작성한다. //AI컨트롤 헤더 public: AMyAIController(); virtual void OnPossess(APawn* InPawn) override; virtual void OnUnPossess() override; private: void RandomMove(); private: FTimerHandle TimerHandle; //AI컨트롤 CPP void AMyAIController::OnPossess(APawn* InPawn) { Super::OnPossess(InPawn); //3초마다 반복 GetWorld()->GetTimerManager().SetTimer(Time.. 2023. 11. 4.