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

 2. 가시성 체크

  • 라인 트레이스를 사용한 장애물 체크
  • 타겟까지의 직접적인 시야 확인
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

 2. 소리 이벤트 처리

  • 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

 2. 비헤이비어 트리에서 센서 데이터 사용

  • 블랙보드 값을 기반으로 결정 수행
[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

 2. 우선순위 기반 처리

  • 자극 유형에 따른 가중치 설정
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

 2. 로그 출력

  • 중요 센서 이벤트 발생 시 로그 기록
Event On Target Perceived
    |
[Print String] --> "Perceived target: " + Target Actor Name

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

 1. 계층적 감지 시스템

  • 대략적인 감지 후 상세 체크 수행
  • 예 : 넓은 시야각으로 1차 감지 후, 좁은 시야각으로 정밀 체크

 2. 기억 시스템 통합

  • 마지막으로 감지된 위치 및 시간 저장
  • 시간 경과에 따른 정보의 신뢰도 감소

 3. 환경 요소 고려

  • 조명, 소음, 날씨 등 환경 요소가 감지에 미치는 영향 구현
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]

 2. LOD (Level of Detail) 시스템 구현

  • 거리에 따라 센서의 정확도와 갱신 빈도 조절
Function: SetSensorLOD
[Get Distance to Player] --> [Branch: Distance > Threshold?]
                               |
               [Set High Detail] <-- [False]
                               |
                [Set Low Detail] <-- [True]

 3. 공간 분할

  • 전체 월드를 섹터로 나누어 관리
  • 관련 섹터의 객체만 감지 대상으로 설정

 효과적인 센서 시스템은 AI의 행동을 더욱 현실적이고 반응적으로 만들어 줍니다.

 시각과 청각 센서를 적절히 구현하고 AI 의사 결정 시스템과 연동함으로써 흥미로운 상호작용을 만들어낼 수 있습니다.

 다만 센서 시스템은 지속적인 테스트와 조정이 필요합니다. 다양한 상황에서 AI가 어떻게 반응하는지 관찰하고 필요에 따라 센서 파라미터를 미세 조정하는 과정이 중요합니다.