icon안동민 개발노트

기본 센서 시스템 구현 (시각, 청각)


 AI 캐릭터에게 시각과 청각 센서를 구현하는 것은 현실적이고 반응적인 AI 행동을 만드는 데 핵심적입니다.

 이러한 센서 시스템을 통해 AI는 주변 환경을 인식하고 적절하게 반응할 수 있습니다.

시각 센서 시스템 구현

 시각 센서는 AI가 주변을 "볼 수 있게" 해주는 시스템입니다.

  1. 시야각 설정
  • AI 캐릭터에 AIPerception 컴포넌트 추가
  • 시야각(Field of View) 및 시야 거리 설정
AI Perception Component:
- Sight Config:
  - Sight Radius: 1000
  - Lose Sight Radius: 1500
  - Peripheral Vision Angle Degrees: 60
  1. 가시성 체크
  • 라인 트레이스를 사용한 장애물 체크
  • 타겟까지의 직접적인 시야 확인
Function: CheckVisibility
[Line Trace by Channel] --> [Branch: Hit?]
                           |
         [Return False] <-- [True]
                           |
            [Return True] <-- [False]
시각 센서 구성 다이어그램

청각 센서 시스템 구현

 청각 센서는 AI가 주변의 소리를 "들을 수 있게" 해줍니다.

  1. 소리 감지 범위 설정
  • AIPerception 컴포넌트에 청각 구성 추가
  • 소리 감지 반경 설정
AI Perception Component:
- Hearing Config:
  - Hearing Range: 1500
  - LOSHearing Range: 2000
  1. 소리 이벤트 처리
  • ReportNoiseEvent 함수를 사용하여 소리 발생 신고
  • AI 컨트롤러에서 소리 이벤트 처리
Function: HandleNoiseEvent
[Get Noise Location] --> [Calculate Distance]
                     --> [Branch: Within Range?]
                           |
        [UpdateBlackboard] <-- [True]
청각 센서 구성 다이어그램

센서 정보와 AI 의사 결정 시스템 연동

 센서에서 감지한 정보를 AI의 의사 결정에 활용하기 위해 비헤이비어 트리와 연동합니다.

  1. 블랙보드 업데이트
  • 감지된 정보를 블랙보드 변수에 저장
Event On Target Perceived (AI Perception)
    |
[Set Blackboard Value] --> Key: "LastSeenLocation"
                       --> Value: Stimulus Location
  1. 비헤이비어 트리에서 센서 데이터 사용
  • 블랙보드 값을 기반으로 결정 수행
[Blackboard Decorator: HasLastSeenLocation?]
    |
[Move To] --> Blackboard Key: LastSeenLocation
센서와 비헤이비어 트리 연동

센서 데이터 필터링 및 우선순위 설정

 모든 감지된 정보가 동등하게 중요한 것은 아니므로, 데이터 필터링과 우선순위 설정이 필요합니다.

  1. 자극 필터링
  • 관련성 있는 자극만 처리하도록 설정
AI Perception Component:
- Sight Config:
  - Detection by Affiliation:
    - Detects Enemies: True
    - Detects Neutrals: False
    - Detects Friendlies: False
  1. 우선순위 기반 처리
  • 자극 유형에 따른 가중치 설정
Function: ProcessStimuli
[Sort Stimuli by Priority] --> [Process Top Priority Stimulus]
센서 데이터 필터링 및 우선순위 설정

센서 시스템 디버깅 기법

 효과적인 센서 시스템 개발을 위해 디버깅 도구를 활용합니다.

  1. 시각적 디버깅
  • DrawDebugHelpers 함수를 사용하여 시야각, 감지 범위 등을 시각화
Event Tick
    |
[Draw Debug Cone] --> Start: AI Location
                  --> Direction: AI Forward Vector
                  --> Angle: Peripheral Vision Angle
  1. 로그 출력
  • 중요 센서 이벤트 발생 시 로그 기록
Event On Target Perceived
    |
[Print String] --> "Perceived target: " + Target Actor Name
센서 시스템 디버깅 화면

효과적인 센서 시스템 설계 팁

  1. 계층적 감지 시스템
  • 대략적인 감지 후 상세 체크 수행
  • 예 : 넓은 시야각으로 1차 감지 후, 좁은 시야각으로 정밀 체크
  1. 기억 시스템 통합
  • 마지막으로 감지된 위치 및 시간 저장
  • 시간 경과에 따른 정보의 신뢰도 감소
  1. 환경 요소 고려
  • 조명, 소음, 날씨 등 환경 요소가 감지에 미치는 영향 구현
Function: CalculateDetectionProbability
[Get Light Level] --> [Get Noise Level]
                  --> [Get Weather Condition]
                  --> [Calculate Final Probability]

성능 최적화 방안

 센서 시스템은 성능에 큰 영향을 줄 수 있으므로 최적화가 중요합니다.

  1. 감지 주기 조절
  • 모든 프레임에서 체크하지 않고 일정 간격으로 수행
Event Tick
    |
[Time Since Last Check > Check Interval?]
    |
[Perform Sensor Check] <-- [True]
  1. LOD (Level of Detail) 시스템 구현
  • 거리에 따라 센서의 정확도와 갱신 빈도 조절
Function: SetSensorLOD
[Get Distance to Player] --> [Branch: Distance > Threshold?]
                               |
               [Set High Detail] <-- [False]
                               |
                [Set Low Detail] <-- [True]
  1. 공간 분할
  • 전체 월드를 섹터로 나누어 관리
  • 관련 섹터의 객체만 감지 대상으로 설정
센서 시스템 최적화 기법

 효과적인 센서 시스템은 AI의 행동을 더욱 현실적이고 반응적으로 만들어 줍니다. 시각과 청각 센서를 적절히 구현하고 AI 의사 결정 시스템과 연동함으로써, 플레이어와 더욱 흥미로운 상호작용을 만들어낼 수 있습니다.

 센서 시스템 설계 시 성능과 정확도 사이의 균형을 잘 맞추는 것이 중요합니다. 필요 이상으로 복잡한 시스템은 성능 저하를 일으킬 수 있으므로, 게임의 요구사항에 맞는 적절한 수준의 센서 시스템을 구현해야 합니다.

 또한, 센서 시스템은 지속적인 테스트와 조정이 필요합니다. 다양한 게임 상황에서 AI가 어떻게 반응하는지 관찰하고, 필요에 따라 센서 파라미터를 미세 조정하는 과정이 중요합니다. 이를 통해 보다 자연스럽고 도전적인 AI 행동을 구현할 수 있습니다.