OasisWStudio Docs← 대시보드로

시작하기

  • 대시보드에서 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/assetsmultipart/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/:assetIdmultipart/form-data — file로 파일을 바꾼다(텍스트 계열만) (assets)
POST /api/rest/branchesJSON {projectId, name, sourceBranchId, sourceCheckpointId?} — 기준 체크포인트(없으면 그 브랜치의 마지막)에서 새 브랜치 (normal)
GET /api/rest/projects/:projectId/branches열린 브랜치 목록(이름순). ?skip=<브랜치 id>로 이어 받는다 — pagination.hasMore (normal)
POST /api/rest/checkpointsJSON {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)