# 오후의 틈 — 로컬 소셜 기능과 확인 범위

## 프로젝트 구조

PC 웹 1인 광장을 대상으로 합니다. 멀티플레이·계정 서버·외부 AI API는 연결하지 않습니다. 모든 다른 방문자는 표시된 로컬 AI이며, 게스트 프로필·차단·신고 기록은 기기 내 PlayerPrefs에 저장하도록 작성했습니다.

| 기능 | 파일 구현 | 실행 확인 |
| --- | --- | --- |
| 벤치 3인 착석 | 6개 벤치·18석, 최근접 빈자리 예약·반환, 높이·앞뒤 보정 | 실제 Play 착석·3석 동시 점유·중복 차단·기립 후 재사용 통과 |
| 입장·닉네임 | 2~16자 닉네임·첫 입장 랜덤 외형·저장값 재사용·머리 위 이름표 | 정책·실제 입장 버튼·한글 이름표 확인, QA 후 기존 저장값 복원 |
| 캐릭터 선택 | 일상형 16종 목록·페이지·미리보기 스테이지·외형만 교체 | 실제 Play 착석 중16종 교체·위치·점유 유지 통과 |
| 텍스트 대화 | 기록 최대80건·말풍선·정해진 AI 응답·Enter 전송 | 실제 기록·말풍선·AI 응답 확인. 멀어진 뒤 직접 응답 유지 재현·수정·재검사 통과 |
| 상태 | 대화 가능·일하는 중·자리 비움·탭 복귀 시 이전 상태 복원 | 실제 자리 비움·복귀 시 일하는 중 상태 복원 통과 |
| 프로필 | 캐릭터 클릭·자기소개·대표 이미지·HTTPS 링크 최대3건·선택 공개 | 정책·실제 프로필 저장·UI·PNG 디코딩 통과. 외부 링크 실행 미검사 |
| 동작 목록 | 휴머노이드 클립147개·검색·19페이지·반복·중단 | 147개 실제 Animator 샘플·루트 이동 억제·Idle 복귀 통과. 전체 길이 미술 품질 미확인 |
| AI 다양화 | 배회·벤치 접근/착석/기립·인사·휴대폰·휴식·짧은 대화 | 실제 Play 배회·착석·동작·대화 관찰. 모든 무작위 전이 장시간 검사 미실행 |
| 기본 운영 | 차단/해제·신고 사유 로컬 기록·2초 간격·10초당4건·같은 내용30초 제한 | 정책·실제 차단/해제·차단 AI 발화 거부·로컬 신고 저장 통과 |
| 한국어 입력 | 한글 완성형11,172자 포함 OFL 폰트 | cmap·실제 한글 닉네임·대화 화면 확인. 브라우저 IME 미검사 |
| 미니멀 UI | 1920×1080·넓은 배경3개 제거·대화 기록 접기·우측420px 상세 창 | 실제 화면·영역·Inspector 이벤트·입장 오류 카드 표시 확인 |
| 상대 선택 | 주황 링·작은 선택 바·명시적 프로필·방문자 목록 연결 | 실제 마우스 클릭·입력 시스템 Raycast·선택 해제 통과 |
| 따라가기 | NavMesh 경로·1.6m 거리 유지·0.5초 경로 갱신·시점 정렬 | 실제 마우스 시작/해제·대상 재추적·수동/채팅/차단/비활성/탭/경로 없음/정체 중단 통과 |
| 웹·성능 | 기존 탭 숨김 중단·계측 코드 유지, 미리보기 카메라는 패널을 열 때만 활성화 | 새 웹 빌드·성능·장시간·배경 탭 검증 미실행 |

2026-11-04 화면 사용 재허용 후 Unity 6000.0.83f1에서 회귀 검사555개가 통과했습니다(오류0·경고0). 휠은 실제 마우스 이벤트로5.30→4.65→5.30m를 확인했습니다. Enter·Esc·Shift는 Input System 이벤트 주입으로 검사했습니다. 화면 자동화 Enter는 원시 키 이벤트에서 관찰되지 않아 물리 키보드 검증으로 표시하지 않습니다. 이전 빌드 성능은 이번 버전 수치가 아닙니다.

## 기능 연결

```mermaid
flowchart LR
    Entry[입장 UI] -->|닉네임 검증| World[PlazaSocialWorld]
    World -->|선택·저장| Identity[VisitorIdentity]
    World -->|외형 프리팹만 교체| Appearance[CharacterAppearance]
    World -->|로컬 전송·AI 응답| Chat[PlazaChat]
    Identity -->|이름·상태·말풍선| Nameplate[PlazaNameplate]
    Stage[CharacterStage] -->|한 외형 미리보기| Catalog[CharacterDefinition 16종]
    Interaction[CharacterInteraction] -->|가까운 빈자리 예약| Seat[PlazaSeat 3석]
    AI[PlazaAIController] -->|같은 점유 규칙| Interaction
```

## 편집 위치

- 씬: `Assets/Scenes/AfternoonPlaza.unity`. `소셜 UI`에서 패널·문구·배치·버튼 이벤트를 편집합니다. `Social Services`에는 World·Chat·HUD·프로필 이미지 수신 컴포넌트가 있습니다.
- 좌석: 벤치의 `PlazaSeat.Slots`에서 세 자리의 앵커·출구를 편집합니다. 기존 `anchor`·`exit`은 가운데 자리의 호환 참조입니다.
- 캐릭터: `Assets/Settings/Characters/Catalog`의 정의와 `Assets/Prefabs/Characters/Models`의 외형을 편집합니다. 공통 Pawn과 컨트롤러는 교체하지 않습니다.
- 닉네임·말풍선: `Assets/Prefabs/UI/VisitorNameplate.prefab`입니다. 폰트는 `Assets/Fonts/PlazaKorean.ttf`입니다. 사용자 입력이 있으므로 UI 문구만 남기도록 폰트를 축소하지 않습니다.
- 스테이지: 씬의 `Character Stage`, Layer9 `CharacterStage`, `Assets/Settings/Plaza/CharacterStage.renderTexture`입니다. 원본 에셋과 런타임 UI 생성 스크립트를 수정할 필요가 없습니다.

## 실행 확인 순서

**AfternoonPlaza 씬을 디스크에서 다시 열어** 확인합니다. 현재 열린 에디터가 새 씬 데이터를 읽었다고 가정하지 않습니다. 저장하지 않은 사용자 변경이 있으면 먼저 보존해야 합니다.

1. Play에서 입장 폼을 확인하고 닉네임 오류·정상 입장·이름표를 확인합니다.
2. 벤치 좌우·가운데에서 상호작용해 가까운 빈자리로 들어가는지 확인합니다. AI와3석 동시 점유·가득 찬 벤치·기립·AI 비활성 후 반환을 반복합니다.
3. 앉은 상태를 포함해 캐릭터를 여러 번 교체하고 Pawn·위치·이름·점유 유지와 Console 오류를 확인합니다.
4. 대화·AI 응답·말풍선·기록·연속 전송·반복 메시지·차단/해제·신고 저장을 확인합니다. 텍스트 입력 중 WASD와 E가 캐릭터에 전달되면 실패입니다.
5. 상태 변경·탭 이탈/복귀, 공개/비공개 프로필·소개·이미지·링크·저장 후 재입장을 확인합니다. 외부 링크 열기는 이용자가 직접 선택합니다.
6. 동작 목록·이동 취소·착석 잠금과 AI의 배회·착석·인사·휴대폰·휴식 전이를 확인합니다.
7. 웹 실행을 승인한 뒤 고정 산출물로0/6/12명·FPS·CPU·메모리·빌드 용량·장시간·백그라운드 복귀를 측정합니다. 현재 `Builds/Web`은 새 버전이 아닙니다.

신고는 실제 운영자에게 전달되지 않습니다. 음성·온라인 계정·멀티플레이·유료 광고·홍보 게시판·전시 공간은 이 로컬 시제품에 포함하지 않습니다.

## 새 조작과 추가 수정

2026-11-04 미니멀 UI 후속: 최종 실제 Play555개 검사와 별도 실제 마우스 선택→따라가기→대기→해제를 통과했습니다. 이름표는16px로 제한하고 가까운 화면 확대·반복 상태 표시를 줄였습니다. 대표 UI와 이름표는 씬·프리팹에서 편집하며 런타임 UI 생성 코드를 두지 않습니다. 새 웹 빌드·성능 수치는 미확인입니다.

휠 줌(2.5~8m), Shift 달리기(5.2m/s), Enter 채팅 선택·전송, Esc 해제, 로컬 플레이어 지면 원형을 추가했습니다. `AllActions.asset`에서147개 캐릭터 애니메이션을 관리합니다. 비휴머노이드 소품 애니메이션6개는 제외했습니다.

추가 수정: 16:9에서 대화창 하단과 입장 배경이 잘리던 앵커·CanvasScaler 배치를 수정했습니다. AI 직접 답장은 거리가 멀어져도 유지하며 일상 발화의 거리·쿨다운은 유지합니다. 사용자 프로필·신고 저장값은 각 QA 종료 후 원래 값으로 복원했습니다.


