SOJ 개발 일지

more

10 - 4. 적 AI Controller 구현(2)

이전 글에서 AI 구현의 1, 2단계를 완료하였다. 이제 마지막 3단계를 구현하고 AI를 완성시키도록 하자. 구현 계획1. EnemyCharacter 클래스 기본 설정- Mesh, Stat, AnimInstance, etc 설정2. SOJBA_Enemy 기본 구조 잡기- Idle, Run, Hit, Dead, etc 설정3. 적 공격 구현- AttackComponent 부착 및 TryAttack 테스트4. 적 피격 구현- ISOJDamageableInterface 상속 후, ApplyDamage_Implementation 구현- BaseStatComponent 부착하여 체력 감소 처리5. 적 사망 구현- 상태 전환, 애니메이션 전환, 콜리젼 비활성화, AI 중지, 타겟팅 해제 등 후처리6. AICont..

10 - 3. 적 AI Controller 구현(1)

이제는 Enemy와 관련된 기본적인 기능들을 다 구현했으므로, 실제로 이 적들이 플레이어를 감지하고 쫓아와서 공격할 수 있도록 AI를 구현해보자 구현 계획1. EnemyCharacter 클래스 기본 설정- Mesh, Stat, AnimInstance, etc 설정2. SOJBA_Enemy 기본 구조 잡기- Idle, Run, Hit, Dead, etc 설정3. 적 공격 구현- AttackComponent 부착 및 TryAttack 테스트4. 적 피격 구현- ISOJDamageableInterface 상속 후, ApplyDamage_Implementation 구현- BaseStatComponent 부착하여 체력 감소 처리5. 적 사망 구현- 상태 전환, 애니메이션 전환, 콜리젼 비활성화, AI 중지, 타겟..

10 - 2. 적 공격, 사망 처리 구현

적 캐릭터 클래스도 작성하고, 작성하는 김에 피격 까지 구현하였다.이미 BA_Common에서 기본적인 기능을 대부분 구현해놓았기 때문에, 이를 상속받은 BA_Enemy에 현재 딱히 추가할 내용들은 없어보이므로 일단은 이대로 사용하도록 하자.이번에는 적 공격 및 사망 처리 기능들을 구현할 차례이다. 구현 계획1. EnemyCharacter 클래스 기본 설정- Mesh, Stat, AnimInstance, etc 설정2. SOJBA_Enemy 기본 구조 잡기- Idle, Run, Hit, Dead, etc 설정3. 적 공격 구현- AttackComponent 부착 및 TryAttack 테스트4. 적 피격 구현- ISOJDamageableInterface 상속 후, ApplyDamage_Implementati..

10 - 1. EnemyCharacter 클래스 구현

이제 적을 구현할 차례이다. 가장 먼저, 적 캐릭터의 기본 뼈대를 EnemyCharacter과 ABP를 통해 만들자.이후, 만든 뼈대를 가지고 3가지 종류의 일반 몬스터를 만들 것이다부모 클래스로는 세 종류의 몬스터 모두 SOJEnemyCharacter를 상속받을 것임캐릭터 BP와 ABP는 각각 따로 만들어줄 예정 부모 클래스는 왜 공통으로 사용해도 되나?SOJEnemyCharacter의 설계를 뜯어보면 알 수 있다SOJEnemyStatComponent(구현예정) : 레벨에 따라 스탯이 자동으로 설정됨SOJAttackComponent(구현됨) : 공격 애니메이션만 바꿔 끼우면 재사용 가능SOJBA_Enemy(구현예정) 기반의 AnimInstance : 상태 전환 시스템은 모두가 사용함ApplyDamage..

코딩 공부

more

클래스 생성 시, 부모 클래스 선택

언리얼 엔진을 다루다 보니, 문득 언리얼 엔진의 "C++ 클래스 생성 툴"은 왜 있는건지가 궁금해졌다. 이는 전적으로 편의성을 위해 만들어진 것이라고 한다. 초기 언리얼 개발자들은 새 클래스를 만들 때, 1. 헤더파일을 직접 만들고2. 소스파일을 직접 만들고3. #include, UCLASS(), GENERATED_BODY(), public 상속까지 모두 다 직접 코드로 타이핑해야 했다고 함. 그래서 Epic은 편의성을 위해, "New C++ Class Wizard"를 만들어서 수작업으로 할 법한 일들을 자동화하였고, 이것이 지금 우리가 쓰고 있는 C++ 클래스 생성 툴이라고 한다. 이 툴은 이러한 기능들을 한다고 보면 됨.1. 부모 클래스를 선택 : 적절한 헤더를 포함하여 상속 구조까지 자동으로 완성해..

◈ Unreal Engine 2025.06.27 0

Task, Service, Decorator와 BlackboardBase 상속

BlackboardBase 클래스를 상속받는 기준구분 기준- 블랙보드에 있는 Key 값을 직접적으로 사용하는지 여부- 즉, GetSelectedBlackboardKey() 를 쓸 필요가 있는지로 판단하면 된다.일반 클래스(Task, Service, Decorator)- 블랙보드에 직접 접근할 필요가 없거나, 외부 컴포넌트로만 처리 가능할 때ex)- UBTTask_TryAttack : 애니메이션 재생, 타이머 대기 등은 블랙보드 키가 없어도 실행 가능. 상태나 컴포넌트에서 정보만 가져오면 충분하다. 블랙보드에 접근할 필요 없이, 그냥 공격만 수행하면 됨.BlackboardBase기반 클래스- 블랙보드 키를 사용하는 Task / Service / Decorator인 경우- 블랙보드에서 TargetActor,..

◈ Enemy (AI) 2025.06.27 0

언리얼 엔진의 AI

언리얼 엔진 AI의 핵심 구조 : Behavior Tree 시스템- 언리얼에서는 AI의 행동을 시각적으로 구성하고 관리하기 위해 다음과 같은 시스템을 사용함AIController- AI 캐릭터를 제어하는 실제 C++ 클래스- BT를 실행하는 껍데기Behavior Tree(BT)- AI의 생각 구조를 트리 형태로 시각화한 것- 인공지능의 핵심- 위에서 아래, 왼쪽에서 오른쪽으로 판단하고 실행(DFS)Blackboard- AI가 행동을 판단할 때 참고하는 데이터 저장소 / 메모장 / 기억 창고- AI가 기억하고 있는 정보(타겟 위치, 체력, 사망 여부 등)를 저장해둠- BTTask, BTService, BTDecorator 모두 이 데이터를 읽고 판단함BTTask- 실제 행동을 수행하는 노드 (공격, 이동 ..

◈ Enemy (AI) 2025.06.26 6

Interface 1편

특정 기능을 구현할 것을 약속한 추상 형식을 의미.객체(클래스)가 반드시 구현해야 할 기능을 지정하는데 사용.다형성의 구현, 의존성이 분리된 설계에 유용하게 활용잠재적으로 무관한 클래스 세트가 공통의 함수 세트를 구현할 수 있도록 하는데 쓰임. 그대로라면 유사성이 없었을 크고 복잡한 클래스들에 어떤 게임 함수 기능을 공유시키고자 하는 경우에 사용. 언리얼 C++ 인터페이스는 추상 타입으로 강제되지 않고, 내부에 기본 함수를 구현할 수 있음UINTERFACE클래스는 실제 인터페이스가 아니다. 언리얼 엔진의 리플렉션 시스템에 보이도록 하기 위해서만 존재하는 비어 있는 클래스임.함수를 헤더 파일에 직접 작성가능기본적으로 아무것도 하지 않는 함수이거나 사소한 동작을 하는 함수의 경우에 작성. 복잡한 함수는 소스..

◈ Class 2025.06.24 1