기본 센서 시스템 구현 (시각, 청각)
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가 어떻게 반응하는지 관찰하고 필요에 따라 센서 파라미터를 미세 조정하는 과정이 중요합니다.