[Unreal] 12.AI_정리, 데이터테이블

본 문서는 어소트락 언리얼엔진 게임프로그래머 양성과정의 강의를 토대로 필기한 내용입니다

AI

AIPawn

  • APawn을 상속 받는 뼈대
  • 멤버변수
    • 캡슐컴포넌트 : UCapsuleComponent 타입의 CDO의 기본 서브객체 생성
    • 메쉬컴포넌트 : USkeletalMeshComponent 타입의 CDO의 기본 서브객체 생성
    • 무브먼트컴포넌트 : UFloatingPawnMovement 상속받은 클래스 생성한 후 초기화
    • AI이름 :
    • AI죽음 델리게이트 변수
    • 패트롤 배열과 인덱스
  • 멤버함수로 애니메이션 변경, AI타입 변경, AI죽음 델리게이트 함수, 데미지 처리 가상 함수 가짐
  • 생성자에서 AIControllerClass DefaultAIController의 StaticClass로 초기화하여 사용 가능
  • Possess를 어느 시점에 행할지도 생성자에서 초기화

DefaultAIController

  • AAIController를 상속 받는 AIController의 뼈대
  • 멤버변수
    • 아래 멤버변수 사용을 위해 AIInfo.h에 전처리기 Include
    • UAIPerceptionComponent : 지각정보
    • UAISenseConfig_Sight : 시야정보
    • UBehaviorTree : AI BT
  • 멤버함수
    • 가상함수 OnPossess() : 빙의 등록, 폰을 매개변수로 갖음
    • 가상함수 OnUnPossess() :
// AIInfo.h
#include "Perception/AIPerceptionComponent.h"
#include "Perception/AIPerceptionStimuliSourceComponent.h"
#include "Perception/AIPerceptionTypes.h"
#include "Perception/AISenseConfig_Sight.h"
#include "Perception/AISenseConfig_Hearing.h"
#include "Perception/AISenseConfig_Damage.h"

데이터테이블

몬스터 데이터 매니저

  • FMonsterInfoData 구조체를 FTableRowBase 상속을 받는 USTRUCT(BlueprintType) 프로퍼티를 붙여서 만들기
  • [데이터 테이블] 에셋 생성한 후 각 몬스터별 정보 입력

  • 싱글톤으로 몬스터 매니저를 만들어서 몬스터 각 생성 시에 초기화 후 사용 할 수 있다

  • AIInfo에 몬스터 데이터 구조체를 만들고(FMonsterInfo), mMonsterInfo라는 멤버변수로 잡아둔다
  • mMonsterInfo가 생성한 AI의 실제 Info값(체력, 공격력, 방어력, 경험치 등등)을 가지게 된다

    GENERATED_BODY() 파일

    • .generated.h 언리얼이 제공해주는 그런 기능들의 코드를 내가 만든 오브젝트의 정보를 바탕으로 자동으로 추가해주는 것
    • 이런 자동 생성은 이 코드 경로처럼 UHT(Unreal Header Tool)가 프로젝트를 빌드할 때 알아서 해주는 것

AI 스킬

  • 짤패턴, 기믹패턴(체력기반)
  • 타겟팅 스킬, 논타겟팅 스킬(범위스킬), 자가범위 스킬
  • BT에서 데코레이터를 활용하여 스킬을 사용하였을 때, 분기점을 다르게 주도록 구조를 설계할 수 있다

스킬 몽타쥬 제작

BB_Monster_UseSkill

  • BB_MonsterDefault를 상속받아 제작
  • EnableUseSkill과 같은 스킬 사용가능여부를 판단할 boolean 값을 키로 가짐

BB

코드

BTTask_UseSkill.cpp

  • ExecuteTask
  • TickTask
    • 스킬 모션이 끝난지를 파악하기 위해 BB에 SkillEnd boolean 값 추가하여 사용

데코레이터

  • HP기반 사용 스킬인 경우
    • TakeDamage 함수에서 스킬 발동조건 지점을 잡은 이후
    • BB데코레이터를 기본공격 Task에 달아 두고, 스킬을 사용 할 수 있는 지점에서 관찰자 중단 Self로 자기 자신의 Task를 중단
    • 이전 분기에 존재하는 UseSkill Task가 실행된다

AIInfo.h ReasonData 변수 확인해보기!

피직스 시뮬레이트

  • 랙돌 효과 연출 가능

AIPawn.cpp

void AAIPawn::DeathEnd()
{
	mCapsule->SetCollisionEnabled(ECollisionEnabled::NoCollision);
	mMesh->SetCollisionEnabled(ECollisionEnabled::PhysicsOnly);
	mMesh->SetSimulatePhysics(true);
}

© 2023 Jinsoo Lee. All rights reserved.

Powered by Hydejack v9.1.6