# HUD·광장·로컬 인원 보충 관리

## 클라이언트 전용 인원 보충

`CrowdManager.SetHumanPopulation(int humanCount)`에는 **현재 광장의 실제 접속자 수(본인 포함)**를 전달합니다. AI 수는 `max(0, 5 - humanCount)`이며 씬에 배치한 풀의 개수로 제한합니다. 실제 인원0/1/2/4/5/6명일 때 AI는5/4/3/1/0/0명입니다. 서버에서 AI를 생성하거나 동기화하지 않습니다. 각 클라이언트의 AI 위치·행동은 서로 다를 수 있습니다.

현재는 멀티플레이가 없으므로 실제 인원 기본값1, 로컬 AI4명입니다. 추후 기존 서버/룸의 인원 변경을 받는 클라이언트에서 이 함수를 호출하면 됩니다. 실제 서버 인원 수신 연결을 이번에 구현한 것으로 취급하지 않습니다.

`SetPopulation("0"/"6"/"12")`와 웹 `?crowd=0/6/12`는 비교 검사용 수동 오버라이드입니다. 이후 `SetHumanPopulation`을 호출하면 자동 보충으로 돌아갑니다. 비활성화된 AI는 좌석 점유·제어권을 반환하고 새로 활성화된 AI는 현재 숨김 상태를 적용받습니다.

## AI 대화와 표시

AI 이름표·채팅·방문자 목록에는 AI 꼬리표를 넣지 않습니다. AI 프로필 제목은 `AI 캐릭터`, 안내는 `이 기기에서만 움직이며, 대화는 미리 준비된 응답`으로 명시합니다. 내부 `IsAI`/`Entry.isAI`는 유지하여 실제 이용자를 자동 응답자로 사용하지 않습니다.

`PlazaConversation`은 인사·업무·휴식·카페 등의 준비된 문구를 선택합니다. LLM이나 실제 사람의 대화가 아닙니다. 직전 응답 반복을 피하고 주변 발화는 전체 AI에20~35초 간격을 둡니다. 차단·자리 비움·도배 제한은 유지합니다.

## UI 편집 위치

씬 `AfternoonPlaza`의 `소셜 UI`에서 색·폰트·배치·X 버튼·상태 팝업·Inspector 이벤트를 편집합니다. UI 생성 코드는 Runtime에 없습니다. 이름표는 `VisitorNameplate.prefab`의 어두운 배경과 흰색 이름/상태입니다.

캐릭터·동작의 `PlazaScrollList`는 씬에 저장한10개 행만 재사용합니다. `ScrollRect.onValueChanged → Scroll`, 행 클릭 `PressRow`, 선택 이벤트는 HUD의 `PreviewCharacter`/`PlayCatalogAction`에 연결합니다. 목록 데이터의 절대 번호로 선택하므로 스크롤한 위치에서도 정확한 외형·동작을 선택합니다. Sitting·착석 전환30개는 일반 동작 목록에서 제외하되 원본 카탈로그와 벤치 착석은 보존합니다.

상태는 좌상단 팝업으로 바꾸고, 채팅은 하단 가운데600px에 배치합니다. 상세 창은 비모달로 다른 메뉴·월드 조작을 허용하며, 실제 InputField를 편집할 때만 캐릭터 이동을 중단합니다. Enter는 UI Submit을 처리한 다음 프레임에 채팅 포커스를 적용합니다. 웹은 정적 HTML IME 입력과 Canvas Enter 연결을 함께 사용합니다.

## 이동과 환경

바닥 클릭은 NavMesh의 완전한 경로를 사용합니다. 경로6m 이상은 달리기, 도착2.8m 이내에서는 걷기로 전환합니다. 근거리 클릭은 걷습니다. Movement의 가속10·감속14m/s²를 Inspector에서 조정합니다. 수동 Shift 달리기도 유지합니다.

따라가기는0.5초 경로 갱신·다음 경유점 이동·거리별 감속을 사용하고,6.5m 밖에서 달리기/4.5m 안에서 걷기로 전환합니다.1.6m 근처에 도착하면 기다리고 거리 여유0.55m를 두어 정지/재출발 반복을 줄입니다. 카메라 yaw는 자동으로 회전시키지 않으며 우클릭 시점 조작을 유지합니다. AI는 NavMesh의 원하는 **속도**를 보존하고 애니메이션 속도는 실제 수평 이동에 맞춥니다.

광장은80×64m입니다. 기존 중앙 카페를 보존하고 확장 산책로·분수 테라스·서쪽 쉼터·남쪽 잔디/화단·추가 상점과 벤치를 배치합니다. 새 지형 NavMesh는 `NavMesh-PlazaExpanded.asset`에 저장합니다. 하늘/태양은 자체 `PlazaSky.shader`와 `AfternoonSky.mat`, 광원은 기존 `Afternoon Sun`을 사용합니다. 외부 원본은 수정하지 않습니다.

## 진단 비용

일반 웹 실행에서는 프레임 배열·초당 JSON 진단 발행을 끕니다. 측정할 때만 `?diagnostics=1`을 사용합니다. 탭 숨김·복귀·5FPS/30FPS 제어와 AI 중단은 진단 기능과 분리되어 일반 실행에서도 동작합니다. 성능 수치는 실제 빌드 검사 결과와 함께 기록합니다.
