6.6 KiB (Stored with Git LFS)
6.6 KiB (Stored with Git LFS)
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 핵심 컴포넌트
- WebSocketServer: 메인 서버 클래스
- ControllerManager: 컨트롤러 관리
- IController: 컨트롤러 인터페이스
- MessageHandler: 메시지 처리
2.3 연결 시 즉시 데이터 전송
- 클라이언트 연결 시 자동으로 전체 데이터 전송
- 컨트롤러 목록, 아이템 목록, 액션 목록 포함
- UI 상태 정보 포함
3. 스트림덱 플러그인 구현
3.1 플러그인 구조
- WebSocket 클라이언트
- 메시지 파서
- UI 업데이트 핸들러
- 에러 처리 및 재연결
3.2 연결 관리
- 자동 연결 시도
- 연결 상태 모니터링
- 재연결 로직 (지수 백오프)
- 하트비트 처리
3.3 데이터 동기화
- 연결 시 초기 데이터 수신
- 실시간 업데이트 처리
- 로컬 캐시 관리
- UI 상태 동기화
4. 구현 단계
4.1 Phase 1: 기본 통신 (1-2주)
목표: WebSocket 연결 및 기본 메시지 교환
유니티 측:
- WebSocketSharp 서버 설정
- 기본 메시지 수신/전송
- 연결 상태 관리
- 로깅 시스템
스트림덱 측:
- WebSocket 클라이언트 설정
- 연결 시도 및 재연결
- 기본 메시지 파싱
- 연결 상태 표시
테스트:
- 연결 성공/실패
- 기본 메시지 교환
- 재연결 동작
4.2 Phase 2: 컨트롤러 시스템 (2-3주)
목표: 확장 가능한 컨트롤러 아키텍처
유니티 측:
- IController 인터페이스 정의
- ControllerManager 구현
- CameraController 예시 구현
- 동적 컨트롤러 등록
스트림덱 측:
- 컨트롤러 목록 표시
- 컨트롤러별 아이템 표시
- 액션 버튼 생성
- 선택 상태 관리
테스트:
- 컨트롤러 등록/해제
- 아이템 목록 표시
- 액션 실행
4.3 Phase 3: 고급 기능 (2-3주)
목표: 실시간 업데이트 및 고급 UI
유니티 측:
- 실시간 데이터 업데이트
- 액션 실행 결과 처리
- 에러 처리 및 복구
- 성능 최적화
스트림덱 측:
- 실시간 UI 업데이트
- 고급 에러 처리
- 사용자 설정 저장
- 성능 모니터링
테스트:
- 실시간 업데이트
- 에러 상황 처리
- 성능 테스트
4.4 Phase 4: 확장 및 최적화 (1-2주)
목표: 추가 컨트롤러 및 최적화
유니티 측:
- ItemController 구현
- AnimationController 구현
- 메시지 압축
- 배치 처리
스트림덱 측:
- 추가 컨트롤러 지원
- 고급 UI 기능
- 설정 관리
- 플러그인 배포 준비
테스트:
- 전체 시스템 통합 테스트
- 부하 테스트
- 사용자 테스트
5. 핵심 구현 포인트
5.1 연결 시 즉시 데이터 공유
// 스트림덱 측 연결 처리
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 컨트롤러 등록 시스템
// 유니티 측 컨트롤러 등록
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 실시간 업데이트
// 유니티 측 데이터 변경 알림
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 브랜치 전략
- 코드 컨벤션
- 리뷰 프로세스