시작하기
- 대시보드에서 NEW 버튼으로 새 프로젝트를 만들거나, 목록에서 프로젝트 이름을 눌러 개요를 열고 EDITOR로 에디터를 엽니다.
- Import Project로 .oasisw.json 씬 파일을 올리면 새 프로젝트로 만들어집니다.
- 에디터 툴바의 Projects 버튼으로 언제든 대시보드로 돌아올 수 있습니다.
에디터 화면
- 왼쪽 HIERARCHY: 씬의 엔티티 트리 — 선택/구조 변경.
- 가운데 뷰포트: 3D 씬 — 클릭으로 엔티티 선택, 기즈모로 변형.
- 오른쪽 INSPECTOR: 선택한 엔티티의 트랜스폼과 컴포넌트 편집.
- 아래 ASSETS: 에셋 패널 (에셋 임포트는 추후 지원 예정).
저장
- 클라우드 프로젝트는 편집 내용이 자동으로 서버에 저장됩니다. Cloud Save로 즉시 저장할 수도 있습니다.
- 툴바의 Save/Load로 씬을 .oasisw.json 파일로 내려받거나 불러올 수 있습니다.
실시간 협업
- 여러 명이 같은 프로젝트를 열면 실시간으로 함께 편집됩니다.
- 툴바에 접속 인원이 표시되고, 다른 사람의 선택은 하이어라키에 색 표식으로 보입니다.
단축키
| 1 / 2 / 3 | 기즈모 모드 — 이동 / 회전 / 크기 |
|---|---|
| F | 선택한 엔티티로 카메라 포커스 |
| Delete / Backspace | 선택한 엔티티 삭제 |
| Cmd/Ctrl + Z | 실행 취소 |
| Cmd/Ctrl + Shift + Z | 다시 실행 |
REST API
https://oasisw.ai/api/rest
Authorization: Bearer [access_token]
- 조직 ACCOUNT의 API Tokens에서 GENERATE TOKEN으로 토큰을 만든다 — 만든 창에서만 보이니 적어 둔다.
- 토큰은 그 조직 신원으로 동작한다: 조직이 소유한 프로젝트만 보인다. 에셋은 브랜치를 가르지 않는다(branchId는 받되 무시).
- 오류는 { "error": "..." } — 401 Unauthorized · 403 Disk allowance exceeded · 404 Project not found · 404 Project or Asset not found · 429 Too many requests.
- 한도(분당): normal 240 · strict 10 · assets 120. 응답 헤더 X-RateLimit-Limit·Remaining·Reset. 현재 값은 GET /api/rest/ratelimits.
| Route | 설명 (rate limit) |
|---|---|
| GET /api/rest/apps/:id | 게시된 앱(다 구운 Publish 빌드) 한 건 (normal) |
| GET /api/rest/projects/:projectId/app | 프로젝트의 Primary 앱 (normal) |
| GET /api/rest/projects/:projectId/apps | 프로젝트의 게시된 앱 목록 — pagination (normal) |
| POST /api/rest/assets | multipart/form-data — name·projectId·file(필수), branchId·parent·preload. script·html·css·text·shader·json만(확장자로 가린다) (assets) |
| DELETE /api/rest/assets/:assetId | 에셋을 지운다(폴더면 자손까지) — 되돌릴 수 없다 (normal) |
| GET /api/rest/assets/:assetId/file/:filename | 에셋 파일 내용 (normal) |
| GET /api/rest/assets/:assetId | 에셋 한 건(data 없음) (normal) |
| GET /api/rest/projects/:projectId/assets | 에셋 목록 — ?skip=&limit=(기본 16, 최대 100000), pagination.total (normal) |
| PUT /api/rest/assets/:assetId | multipart/form-data — file로 파일을 바꾼다(텍스트 계열만) (assets) |
| POST /api/rest/branches | JSON {projectId, name, sourceBranchId, sourceCheckpointId?} — 기준 체크포인트(없으면 그 브랜치의 마지막)에서 새 브랜치 (normal) |
| GET /api/rest/projects/:projectId/branches | 열린 브랜치 목록(이름순). ?skip=<브랜치 id>로 이어 받는다 — pagination.hasMore (normal) |
| POST /api/rest/checkpoints | JSON {projectId, branchId, description} — 잡을 돌려준다(우리 서버는 바로 끝나 complete, data에 체크포인트) (normal) |
| GET /api/rest/checkpoints/:id | 체크포인트 한 건 (normal) |
| GET /api/rest/branches/:branchId/checkpoints | 새것부터 — ?limit=(최대 50)&skip=<체크포인트 id>, pagination.hasMore (normal) |
| GET /api/rest/jobs/:id | 잡 상태 — running · complete · error (normal) |
| GET /api/rest/projects/:projectId/scenes | 씬 목록. ?branchId= 를 안 주면 기본 브랜치 (normal) |