개발일지공부아이디어
    • 3월
    • 2월
    • 1월
  • 2차 프로젝트 일지 - 5일차

    26. 3. 9.

  • 09

    26. 3. 9.

  • 2차 프로젝트 일지 - 4일차

    26. 3. 8.

  • 2차 프로젝트 일지 - 3일차

    26. 3. 7.

  • 06

    26. 3. 6.

  • 2차 프로젝트 일지 - 2일차

    26. 3. 6.

  • 05

    26. 3. 5.

  • 2차 프로젝트 일지 - 1일차

    26. 3. 5.

  • C++ 기본기 연습 프로젝트: 아이템 사전 프로그램

    26. 3. 4.

  • 03

    26. 3. 3.

  • C++ 기본기 연습 프로젝트: 카드 덱 브라우저

    26. 3. 2.

로딩 중...

2차 프로젝트 일지 - 4일차

2026. 3. 8.

4일차: behavior tree & Astar algorithm

적 AI

매 틱마다 두 개의 독립된 트리 실행

EnemyController::Tick()  ├── movementTree  (stateComp->CanMove() 일 때)  └── actionTree    (stateComp->CanAct()  일 때)

movementTree 구조

BTSelector  ← root│├─[1] BTSequence(dangerSequence)│      ├── IsDangerNearbyCondition│      └── FleeFromDangerAction│├─[2] IsMovingCondition│└─[3] BTCooldown (0.5s)       └── BTSelector              ├─[3-A] AStarMoveAction              └─[3-B] BTSequence(attackSequence)                       ├── HasBubbleAmmoCondition                       └── PlaceBubbleNearBoxAction
  1. dangerSequence: 최우선순위인 위험감지 시퀀스 순회
    1. IsDangerNearbyCondition: 현재 위치가 물풍선 폭발 범위이면 Success 반환
    2. FleeFromDangerAction: 1번이 Success면 물풍선이 없고 이동가능한 첫 번째 타일로 RequestMove
  2. IsMovingCondition: Character의 MovementComponent에서 IsMoving일 때 Success 반환해 동기성 보장
  3. BTCooldown: Decorator로, 입력값 동안 Failure 반환해 행동을 멈추게 함(사람같아보이려고)
    1. AStarMoveAction: A* 알고리듬 계산 후 RequestMove하기. 내부는 AStarPathfinder::GetFullPath로 동작하며 휴리스틱은 맨해튼 거리 사용함
    2. innerSequence: 1번으로 움직인 박스 근처 타일에서 물풍선 놓기 액션
      1. HasBubbleAmmoCondition: 남은 물풍선 탄약이 있는지 확인
      2. PlaceBubbleNearBoxAction:
        1. AStarPathfinder::FindBoxPlacement로 물풍선 놓을 타일 계산. 이 때 박스 없다는 가정 하에 A*로 경로 찾음 actionTree
BTSequence  ← root│├─[1] IsPlayerAdjacentCondition└─[2] BTCooldown (1.5s)       └── PlaceBubbleAction
  1. IsPlayerAdjacentCondition:
왼쪽 화살표2차 프로젝트 일지 - 3일차오른쪽 화살표