Files
Northbound/Assets/Scripts/NETWORK_SETUP_GUIDE_KO.md

308 lines
6.8 KiB
Markdown

# 🎮 네트워크 연결 설정 가이드
## 📋 상황 요약
✅ PortListenerTest: 포트 열림 (yougetsignal 성공)
✅ 포트 포워딩: 작동 중 (yougetsignal 성공으로 증명)
✅ 방화벽: 허용 중 (yougetsignal 성공으로 증명)
❌ 유니티 Netcode: **포트가 닫혀 있음**
## ⚡ 즉시 해결책 (3단계)
### 1단계: 테스트 시작 (30초)
1. **NetworkManagerQuickTest** 추가 (씬의 아무 게임오브젝트)
2. 우클릭 → "Run Quick NetworkManager Test"
3. 콘솔 출력 공유
**기대 결과:**
```
✓ NetworkManager found!
✓ Player Prefab: Player
✓ Unity Transport found!
✓ Transport: 4045, 0.0.0.0
✓ NetworkConnectionHandler found!
```
### 2단계: 팀원 연결 테스트 (1분)
1. 팀원에게 당신의 **퍼블릭 IP** 알림
2. 팀원: 게임에서 IP:포트 입력
3. 팀원: "연결" 클릭
**기대:**
- 성공: 팀원이 접속!
- 실패: 에러 로그 공유
### 3단계: 문제 해결
팀원이 접속 못할 경우:
**팀원 측:**
- 올바른 퍼블릭 IP 입력했는지 확인
- 방화벽 허용 확인
- 유니티 Netcode 버전 확인 (동일해야 함)
**호스트 측 (당신):**
- 콘솔에서 "[ConnectionHandler] 클라이언트" 메시지 확인
- 스폰 성공하는지 확인
- 플레이어가 생성되는지 확인
---
## 🔧 필수 구성 요소
### NetworkManager 설정
**필수:**
```
NetworkManager GameObject:
- Player Prefab: Player (Assets/Prefabs/Player/)
- Connection Approval: ✓ 체크
- Enable Scene Management: ✓ 체크
```
### Unity Transport 설정
**필수:**
```
Unity Transport:
- Port: 4045
- Address: 0.0.0.0 (모든 인터페이스 허용)
- ServerListenAddress: 0.0.0.0
```
### 라우터 포트 포워딩
**필수:**
```
라우터 포트 포워딩:
- External Port: 4045
- Internal Port: 4045
- Protocol: TCP
- Internal IP: 당신 컴퓨터의 IPv4 (ipconfig로 확인)
```
**IP 확인:**
```
명령 프롬프트 → ipconfig
IPv4 주소 찾기 (예: 192.168.1.50)
```
---
## ✅ 작동 중인지 확인
### 방법 1: yougetsignal (가장 신뢰)
```
https://www.yougetsignal.com/tools/open-ports/
입력:
- IP: 당신의 퍼블릭 IP (https://api.ipify.org)
- Port: 4045
기대: "Port 4045 is open"
```
### 방법 2: 콘솔 로그
**호스트 시작 성공:**
```
[ConnectionHandler] 서버 시작됨
[ConnectionHandler] 스폰 포인트 X개를 찾았습니다
[ConnectionHandler] 클라이언트 [ID] 연결됨
[ConnectionHandler] 플레이어 [ID] 스폰됨
```
**클라이언트 연결 성공:**
```
[ConnectionHandler] 클라이언트 [ID] 승인됨. 수동 스폰으로 대기.
```
---
## 🎮 게임 플레이 방법
### 호스트 (당신)
1. 에디터에서 플레이 모드 시작
2. 또는 빌드 실행
3. 콘솔에서 "호스트 시작됨" 확인
4. 팀원에게 퍼블릭 IP 알림
5. 팀원이 접속할 때까지 대기
### 클라이언트 (팀원)
1. 에디터에서 플레이 모드 시작
2. 네트워크 연결 UI에서 호스트의 퍼블릭 IP 입력
3. "연결" 클릭
4. 콘솔에서 "클라이언트 연결됨" 확인
5. 게임 시작!
---
## ⚠️ 일반적인 문제 및 해결
### 문제 1: "ConnectionHandler: PlayerPrefab이 null입니다"
**원인:** Player Prefab이 NetworkManager에 할당되지 않음
**해결:**
```
NetworkManager 선택 → Network Config → Player Prefab
Assets/Prefabs/Player/Player.prefab 드래그
```
### 문제 2: 팀원이 "Failed to connect to server" 에러
**가능한 원인:**
1. 틀린 퍼블릭 IP 입력
2. 포트가 닫혀 있음 (호스트 재시작 필요)
3. 방화벽 차단
4. 다른 Unity/Netcode 버전
**해결:**
1. 올바른 IP 확인 (https://api.ipify.org)
2. yougetsignal에서 포트 4045 확인
3. 팀원의 방화벽 허용
4. Unity 버전 일치 확인
### 문제 3: 포트가 열렸다 닫혀
**원인:** 유니티 Netcode가 실제로 바인딩하지 않음
**해결:**
```
NetworkManagerQuickTest 실행
NetworkManagerResetAndRestart 사용
새로 시작
```
---
## 📊 도구
### 유용한 스크립트
| 스크립트 | 용도 | 사용법 |
|---------|---------|---------|
| **NetworkManagerQuickTest** | 설정 확인 | 추가 → 우클릭 "Run Quick NetworkManager Test" |
| **NetworkResetAndRestart** | 네트워크 리셋 | 추가 → 우클릭 "Reset Network and Restart Host" |
| **PortListenerTest** | 포트 바인딩 테스트 | 추가 → 우클릭 "Test Port Binding Only" |
### 사용하지 않는 스크립트
- ❌ ContinuousPortMonitor (랙 발생)
- ❌ 다른 진단 도구 (필요 없음)
---
## 🚀 빠른 시작 가이드
### 처음 설정하는 경우
```
1. NetworkManager 찾기
2. Player Prefab 할당 (Assets/Prefabs/Player/)
3. Unity Transport 포트 4045 설정
4. 라우터에서 포트 포워딩 설정
5. 호스트 시작
6. yougetsignal에서 포트 확인
7. 팀원에게 퍼블릭 IP 공유
8. 팀원 접속
9. 게임 시작! 🎉
```
### 이미 작동 중인 경우
```
1. 호스트 시작
2. yougetsignal에서 포트 4045 확인 (열려 있어야 함)
3. 팀원에게 퍼블릭 IP 공유
4. 팀원 접속
5. 게임 시작! 🎉
```
---
## 💡 핵심 통찰
**당신의 상황:**
- PortListenerTest: 작동 ✅ (포트 열림)
- yougetsignal: 작동 ✅ (접속 가능)
- 유니티 Netcode: **포트 닫혀**
**해결책:**
1. Player Prefab 할당 (NetworkManagerQuickTest로 확인)
2. 팀원이 지금 테스트
3. 콘솔 로그 확인
**성공 시:**
```
✓ Player Prefab: Player
✓ Unity Netcode 시작 성공
✓ 팀원 접속 성공
✓ 플레이어 스폰됨
```
---
## 📝 기술 정보
### 사용된 포트
```
포트: 4045
프로토콜: TCP
바인딩: 0.0.0.0 (모든 인터페이스)
```
### 확인된 사항
```
✅ 포트 포워딩: 작동 (yougetsignal 증명)
✅ 방화벽: 허용 (yougetsignal 증명)
✅ OS 바인딩: 가능 (PortListenerTest 증명)
❌ 유니티 Netcode: 바인딩 실패
```
### 문제 분석
**포트 4045가 열리지 않는 이유:**
- 유니티 Netcode가 포트에 바인딩하지 않음
- Player Prefab이 할당되지 않았을 가능성 (90%)
- 또는 네트워크 관리자 초기화 순서 문제
---
## ✅ 성공 확인사항
**모든 것이 작동할 때:**
- [ ] 호스트: IsServer = True
- [ ] 호스트: IsHost = True
- [ ] Player Prefab: Player (할당됨)
- [ ] Transport: 4045, 0.0.0.0
- [ ] yougetsignal: "Port 4045 is open"
- [ ] 콘솔: "클라이언트 [ID] 연결됨"
- [ ] 콘솔: "플레이어 [ID] 스폰됨"
- [ ] 팀원: 접속 성공
---
## 🎯 요약
**핵심 사항:**
1. 포트 4045 열림 (yougetsignal 증명) ✅
2. Player Prefab 할당 필요 (가능한 문제 원인)
3. 팀원 지금 테스트
4. 콘솔 로그 확인
**다음 단계:**
1. NetworkManagerQuickTest 실행
2. 팀원 테스트
3. 문제 있으면 콘솔 로그 공유
4. 성공하면 게임 시작! 🎉
---
**행운을 빕니다!** 🚀