289 lines
6.6 KiB (Stored with Git LFS)
Markdown
289 lines
6.6 KiB (Stored with Git LFS)
Markdown
# Streamingle 플러그인 구현 가이드
|
|
|
|
## 1. 개발 환경 설정
|
|
|
|
### 1.1 필수 도구
|
|
- Unity 2022.3 LTS 이상
|
|
- Node.js 18.x 이상
|
|
- StreamDock 플러그인 SDK
|
|
- WebSocketSharp (Unity)
|
|
- ws 라이브러리 (Node.js)
|
|
|
|
### 1.2 프로젝트 구조
|
|
```
|
|
Streamingle_URP/
|
|
├── Assets/
|
|
│ └── Scripts/
|
|
│ └── Streamingle/
|
|
│ ├── WebSocketServer.cs
|
|
│ ├── ControllerManager.cs
|
|
│ ├── IController.cs
|
|
│ ├── CameraController.cs
|
|
│ └── ItemController.cs
|
|
└── Streamdeck/
|
|
└── com.mirabox.streamingle.sdPlugin/
|
|
├── plugin.js
|
|
├── manifest.json
|
|
└── package.json
|
|
```
|
|
|
|
## 2. 유니티 서버 구현
|
|
|
|
### 2.1 WebSocket 서버 설정
|
|
- 포트: 10701
|
|
- 바인딩: 127.0.0.1
|
|
- 프로토콜: ws://
|
|
- 경로: /
|
|
|
|
### 2.2 핵심 컴포넌트
|
|
1. **WebSocketServer**: 메인 서버 클래스
|
|
2. **ControllerManager**: 컨트롤러 관리
|
|
3. **IController**: 컨트롤러 인터페이스
|
|
4. **MessageHandler**: 메시지 처리
|
|
|
|
### 2.3 연결 시 즉시 데이터 전송
|
|
- 클라이언트 연결 시 자동으로 전체 데이터 전송
|
|
- 컨트롤러 목록, 아이템 목록, 액션 목록 포함
|
|
- UI 상태 정보 포함
|
|
|
|
## 3. 스트림덱 플러그인 구현
|
|
|
|
### 3.1 플러그인 구조
|
|
- WebSocket 클라이언트
|
|
- 메시지 파서
|
|
- UI 업데이트 핸들러
|
|
- 에러 처리 및 재연결
|
|
|
|
### 3.2 연결 관리
|
|
- 자동 연결 시도
|
|
- 연결 상태 모니터링
|
|
- 재연결 로직 (지수 백오프)
|
|
- 하트비트 처리
|
|
|
|
### 3.3 데이터 동기화
|
|
- 연결 시 초기 데이터 수신
|
|
- 실시간 업데이트 처리
|
|
- 로컬 캐시 관리
|
|
- UI 상태 동기화
|
|
|
|
## 4. 구현 단계
|
|
|
|
### 4.1 Phase 1: 기본 통신 (1-2주)
|
|
**목표**: WebSocket 연결 및 기본 메시지 교환
|
|
|
|
**유니티 측**:
|
|
1. WebSocketSharp 서버 설정
|
|
2. 기본 메시지 수신/전송
|
|
3. 연결 상태 관리
|
|
4. 로깅 시스템
|
|
|
|
**스트림덱 측**:
|
|
1. WebSocket 클라이언트 설정
|
|
2. 연결 시도 및 재연결
|
|
3. 기본 메시지 파싱
|
|
4. 연결 상태 표시
|
|
|
|
**테스트**:
|
|
- 연결 성공/실패
|
|
- 기본 메시지 교환
|
|
- 재연결 동작
|
|
|
|
### 4.2 Phase 2: 컨트롤러 시스템 (2-3주)
|
|
**목표**: 확장 가능한 컨트롤러 아키텍처
|
|
|
|
**유니티 측**:
|
|
1. IController 인터페이스 정의
|
|
2. ControllerManager 구현
|
|
3. CameraController 예시 구현
|
|
4. 동적 컨트롤러 등록
|
|
|
|
**스트림덱 측**:
|
|
1. 컨트롤러 목록 표시
|
|
2. 컨트롤러별 아이템 표시
|
|
3. 액션 버튼 생성
|
|
4. 선택 상태 관리
|
|
|
|
**테스트**:
|
|
- 컨트롤러 등록/해제
|
|
- 아이템 목록 표시
|
|
- 액션 실행
|
|
|
|
### 4.3 Phase 3: 고급 기능 (2-3주)
|
|
**목표**: 실시간 업데이트 및 고급 UI
|
|
|
|
**유니티 측**:
|
|
1. 실시간 데이터 업데이트
|
|
2. 액션 실행 결과 처리
|
|
3. 에러 처리 및 복구
|
|
4. 성능 최적화
|
|
|
|
**스트림덱 측**:
|
|
1. 실시간 UI 업데이트
|
|
2. 고급 에러 처리
|
|
3. 사용자 설정 저장
|
|
4. 성능 모니터링
|
|
|
|
**테스트**:
|
|
- 실시간 업데이트
|
|
- 에러 상황 처리
|
|
- 성능 테스트
|
|
|
|
### 4.4 Phase 4: 확장 및 최적화 (1-2주)
|
|
**목표**: 추가 컨트롤러 및 최적화
|
|
|
|
**유니티 측**:
|
|
1. ItemController 구현
|
|
2. AnimationController 구현
|
|
3. 메시지 압축
|
|
4. 배치 처리
|
|
|
|
**스트림덱 측**:
|
|
1. 추가 컨트롤러 지원
|
|
2. 고급 UI 기능
|
|
3. 설정 관리
|
|
4. 플러그인 배포 준비
|
|
|
|
**테스트**:
|
|
- 전체 시스템 통합 테스트
|
|
- 부하 테스트
|
|
- 사용자 테스트
|
|
|
|
## 5. 핵심 구현 포인트
|
|
|
|
### 5.1 연결 시 즉시 데이터 공유
|
|
```javascript
|
|
// 스트림덱 측 연결 처리
|
|
ws.on('open', () => {
|
|
console.log('유니티 서버에 연결됨');
|
|
// 연결 즉시 초기 데이터를 받음
|
|
});
|
|
|
|
ws.on('message', (data) => {
|
|
const message = JSON.parse(data);
|
|
if (message.type === 'connection_established') {
|
|
// 즉시 UI 업데이트
|
|
updateUIWithInitialData(message.data);
|
|
}
|
|
});
|
|
```
|
|
|
|
### 5.2 컨트롤러 등록 시스템
|
|
```csharp
|
|
// 유니티 측 컨트롤러 등록
|
|
public class ControllerManager : MonoBehaviour
|
|
{
|
|
private Dictionary<string, IController> controllers = new Dictionary<string, IController>();
|
|
|
|
public void RegisterController(IController controller)
|
|
{
|
|
controllers[controller.GetControllerId()] = controller;
|
|
// 연결된 클라이언트들에게 즉시 알림
|
|
NotifyControllerAdded(controller);
|
|
}
|
|
}
|
|
```
|
|
|
|
### 5.3 실시간 업데이트
|
|
```csharp
|
|
// 유니티 측 데이터 변경 알림
|
|
public void OnDataChanged(string controllerId, string itemId, object changes)
|
|
{
|
|
var message = new {
|
|
type = "data_update",
|
|
timestamp = DateTime.UtcNow.ToString("o"),
|
|
version = "1.0",
|
|
data = new {
|
|
controller_id = controllerId,
|
|
item_id = itemId,
|
|
changes = changes
|
|
}
|
|
};
|
|
|
|
BroadcastMessage(message);
|
|
}
|
|
```
|
|
|
|
## 6. 에러 처리 전략
|
|
|
|
### 6.1 연결 에러
|
|
- 자동 재연결 (지수 백오프)
|
|
- 연결 상태 표시
|
|
- 사용자 알림
|
|
|
|
### 6.2 데이터 에러
|
|
- JSON 파싱 에러 처리
|
|
- 필수 필드 검증
|
|
- 기본값 처리
|
|
|
|
### 6.3 액션 에러
|
|
- 액션 실행 실패 처리
|
|
- 사용자 피드백
|
|
- 롤백 처리
|
|
|
|
## 7. 성능 최적화
|
|
|
|
### 7.1 메시지 최적화
|
|
- 필요한 데이터만 전송
|
|
- 메시지 압축
|
|
- 배치 처리
|
|
|
|
### 7.2 UI 최적화
|
|
- 가상 스크롤링
|
|
- 이미지 캐싱
|
|
- 렌더링 최적화
|
|
|
|
### 7.3 메모리 관리
|
|
- 객체 풀링
|
|
- 가비지 컬렉션 최적화
|
|
- 리소스 해제
|
|
|
|
## 8. 테스트 전략
|
|
|
|
### 8.1 단위 테스트
|
|
- 컨트롤러 인터페이스 테스트
|
|
- 메시지 파싱 테스트
|
|
- 에러 처리 테스트
|
|
|
|
### 8.2 통합 테스트
|
|
- 전체 시스템 테스트
|
|
- 성능 테스트
|
|
- 부하 테스트
|
|
|
|
### 8.3 사용자 테스트
|
|
- 실제 스트리밍 환경 테스트
|
|
- 사용자 피드백 수집
|
|
- UI/UX 개선
|
|
|
|
## 9. 배포 및 유지보수
|
|
|
|
### 9.1 배포 준비
|
|
- 플러그인 패키징
|
|
- 문서 작성
|
|
- 사용자 가이드
|
|
|
|
### 9.2 버전 관리
|
|
- Semantic Versioning
|
|
- 변경 로그 관리
|
|
- 호환성 유지
|
|
|
|
### 9.3 업데이트 시스템
|
|
- 자동 업데이트 체크
|
|
- 점진적 업데이트
|
|
- 롤백 지원
|
|
|
|
## 10. 개발 팁
|
|
|
|
### 10.1 디버깅
|
|
- 구조화된 로깅 사용
|
|
- WebSocket 메시지 모니터링
|
|
- 성능 프로파일링
|
|
|
|
### 10.2 코드 품질
|
|
- 코드 리뷰
|
|
- 단위 테스트 작성
|
|
- 문서화
|
|
|
|
### 10.3 협업
|
|
- Git 브랜치 전략
|
|
- 코드 컨벤션
|
|
- 리뷰 프로세스 |