Streamingle_URP/StreamDock-Plugin-SDK/Unity_StreamDock_통신_가이드.md

283 lines
7.3 KiB (Stored with Git LFS)
Markdown

# Unity ↔ StreamDock 통신 플러그인 사용 가이드
## 🎮 개요
이 가이드는 Unity 게임과 Mirabox StreamDock 간의 실시간 통신을 위한 플러그인 사용법을 설명합니다.
## 📋 시스템 요구사항
### StreamDock 측
- **Node.js**: v14.0.0 이상
- **StreamDock 소프트웨어**: 미라박스에서 제공하는 최신 버전
- **포트**: 15732 (WebSocket), 15733 (HTTP)
### Unity 측
- **Unity**: 2019.4 LTS 이상
- **.NET 4.x** 또는 **.NET Standard 2.1**
- **WebSocket 지원**: System.Net.WebSockets
## 🚀 설치 및 설정
### 1. StreamDock 플러그인 설치
```bash
# 플러그인 폴더로 이동
cd SDNodeJsSDK/unity-communication-plugin
# 의존성 설치
npm install
# 플러그인 실행
npm start
```
### 2. Unity 프로젝트 설정
1. **스크립트 복사**
- `Unity_Scripts/StreamDockCommunicator.cs` → Unity 프로젝트의 `Scripts` 폴더
- `Unity_Scripts/GameController.cs` → Unity 프로젝트의 `Scripts` 폴더
2. **GameObject 설정**
```
GameManager (Empty GameObject)
├── StreamDockCommunicator 컴포넌트
└── GameController 컴포넌트
```
## 🔧 사용법
### StreamDock 플러그인 설정
1. **StreamDock 소프트웨어 실행**
2. **플러그인 폴더 지정**: `SDNodeJsSDK/unity-communication-plugin`
3. **버튼 추가**:
- "Unity 이벤트 전송" 버튼
- "Unity 상태 수신" 버튼
### Unity 스크립트 설정
```csharp
// StreamDockCommunicator 설정
[SerializeField] private string serverUrl = "ws://localhost:15732";
[SerializeField] private bool autoConnect = true;
// 이벤트 연결
streamDock.OnStreamDockMessageReceived.AddListener(OnStreamDockMessage);
streamDock.OnConnected.AddListener(OnStreamDockConnected);
streamDock.OnDisconnected.AddListener(OnStreamDockDisconnected);
```
## 📡 통신 프로토콜
### WebSocket 메시지 형식
#### Unity → StreamDock
```json
{
"type": "game_state_update",
"data": {
"playerHP": 100,
"playerScore": 1500,
"currentLevel": 3
},
"timestamp": 1640995200000
}
```
#### StreamDock → Unity
```json
{
"type": "streamdock_button_clicked",
"data": {
"buttonId": "action1",
"action": "send_event"
},
"timestamp": 1640995200000
}
```
## 🎯 이벤트 타입
### Unity에서 전송하는 이벤트
- `game_state_update`: 게임 상태 업데이트
- `player_action`: 플레이어 액션
- `level_complete`: 레벨 완료
- `test_message`: 테스트 메시지
### StreamDock에서 전송하는 이벤트
- `streamdock_button_clicked`: 버튼 클릭
- `dial_rotate`: 다이얼 회전
- `dial_press`: 다이얼 누름
- `request_game_state`: 게임 상태 요청
## 🛠️ 개발 예제
### 1. 기본 연결 테스트
```csharp
public class StreamDockTest : MonoBehaviour
{
[SerializeField] private StreamDockCommunicator communicator;
void Start()
{
// 연결 이벤트 구독
communicator.OnConnected.AddListener(() => {
Debug.Log("StreamDock 연결됨!");
});
// 메시지 수신 이벤트 구독
communicator.OnStreamDockMessageReceived.AddListener((type, data) => {
Debug.Log($"이벤트 수신: {type}");
});
}
}
```
### 2. 게임 상태 동기화
```csharp
public class GameStateManager : MonoBehaviour
{
[SerializeField] private StreamDockCommunicator communicator;
public void UpdatePlayerHP(int newHP)
{
// Unity 내부 상태 업데이트
playerHP = newHP;
// StreamDock으로 상태 전송
communicator.UpdateGameState(hp: newHP);
}
public void AddScore(int points)
{
// Unity 내부 상태 업데이트
score += points;
// StreamDock으로 상태 전송
communicator.UpdateGameState(score: score);
}
}
```
### 3. StreamDock 버튼 이벤트 처리
```csharp
public class StreamDockEventHandler : MonoBehaviour
{
[SerializeField] private StreamDockCommunicator communicator;
void Start()
{
communicator.OnStreamDockMessageReceived.AddListener(HandleStreamDockEvent);
}
private void HandleStreamDockEvent(string eventType, object data)
{
switch (eventType)
{
case "button_clicked":
// 버튼 클릭 시 게임 액션 실행
ExecuteGameAction();
break;
case "dial_rotate":
// 다이얼 회전 시 볼륨 조절
AdjustVolume(data);
break;
}
}
}
```
## 🔍 디버깅
### StreamDock 플러그인 로그 확인
```bash
# 플러그인 실행 시 로그 출력
npm start
```
### Unity 콘솔 로그
- Unity Console 창에서 연결 상태 및 메시지 확인
- `Debug.Log()` 출력 확인
### HTTP API 테스트
```bash
# 상태 확인
curl http://localhost:15733/status
# 이벤트 전송
curl -X POST http://localhost:15733/send-event \
-H "Content-Type: application/json" \
-d '{"eventType": "test", "data": {"message": "test"}}'
```
## 🚨 문제 해결
### 연결 문제
1. **포트 확인**: 15732, 15733 포트가 사용 가능한지 확인
2. **방화벽 설정**: Windows 방화벽에서 포트 허용
3. **서버 실행 확인**: `npm start` 명령어로 서버 실행
### Unity 연결 실패
1. **WebSocket 지원 확인**: .NET 4.x 또는 .NET Standard 2.1 사용
2. **URL 확인**: `ws://localhost:15732` 올바른지 확인
3. **재연결**: 자동 재연결 기능이 5초마다 시도
### 메시지 전송 실패
1. **JSON 형식 확인**: 올바른 JSON 형식인지 확인
2. **연결 상태 확인**: Unity와 StreamDock이 모두 연결되어 있는지 확인
3. **로그 확인**: Unity Console과 StreamDock 로그 확인
## 📚 고급 기능
### 1. 커스텀 이벤트 추가
```csharp
// Unity에서 커스텀 이벤트 전송
communicator.SendMessageToStreamDock("custom_event", new {
action = "special_skill",
power = 100,
target = "boss"
});
```
### 2. 다중 Unity 인스턴스 지원
```csharp
// Unity 인스턴스 ID 추가
communicator.SendMessageToStreamDock("game_state_update", new {
instanceId = "unity_001",
gameState = currentGameState
});
```
### 3. 실시간 게임 통계
```csharp
// 게임 통계 전송
communicator.SendMessageToStreamDock("game_stats", new {
playTime = Time.time,
enemiesKilled = enemyCount,
itemsCollected = itemCount
});
```
## 🎮 게임 통합 예제
### RPG 게임
- **HP/MP 표시**: StreamDock 버튼에 실시간 표시
- **스킬 단축키**: StreamDock 버튼으로 스킬 발동
- **인벤토리 관리**: 다이얼로 아이템 선택
### 액션 게임
- **콤보 카운터**: StreamDock에 콤보 수 표시
- **특수 액션**: StreamDock 버튼으로 특수 스킬
- **보스 체력**: StreamDock에 보스 HP 표시
### 퍼즐 게임
- **레벨 진행도**: StreamDock에 현재 레벨 표시
- **힌트 시스템**: StreamDock 버튼으로 힌트 제공
- **타이머**: StreamDock에 남은 시간 표시
---
**Happy Gaming! 🎮**