네트워크 멀티플레이 테스트를 위한 코드 추가
This commit is contained in:
307
Assets/Scripts/NETWORK_SETUP_GUIDE_KO.md
Normal file
307
Assets/Scripts/NETWORK_SETUP_GUIDE_KO.md
Normal file
@@ -0,0 +1,307 @@
|
||||
# 🎮 네트워크 연결 설정 가이드
|
||||
|
||||
## 📋 상황 요약
|
||||
|
||||
✅ 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. 성공하면 게임 시작! 🎉
|
||||
|
||||
---
|
||||
|
||||
**행운을 빕니다!** 🚀
|
||||
Reference in New Issue
Block a user