Scene, görsel ve 3B modeller
Bu sayfa oyunun dünyasını oluşturan üç parçayı anlatır: gerçek zamanlı scene (sahne/oda) kaydı, panelden ve sunucudan yüklenen görseller ve operatörün yüklediği 3B modeller. Şehir odalarını sunucudan açmak, ikon ve afiş görselini yönetmek ya da modelleri oyuna sunmak istiyorsanız okuyun.
Ne işe yarar
- Scene: Gerçek zamanlı eklentinin oyuncuları topladığı oda. Oyun sunucusu açılışta ihtiyaç duyduğu scene’leri kaydeder; kayıt idempotenttir.
- Görsel (asset): PNG, JPEG ya da WebP. İçerik adreslidir: adres dosyanın
sha256özetidir, aynı dosya bir kez saklanır. Mağaza afişi, para birimi ikonu ve içerik grubuimagealanları bu depoyu kullanır. - 3B model: Operatörün panelde yüklediği
glb(ya da dönüştürülen kaynak dosya). Yayınlanınca eşyaya ya da karaktere bağlanır ve oyun onu katalogdan alır.
Scene ve görsel yazma uçları scenes modülüne bağlıdır; modül kapalıysa 404 ve {"code":"module_disabled","module":"scenes"} döner. Görsel ve model okuma uçları çekirdektir ve modül kapalıyken de çalışır. Modülü Oyun ayarları › Modüller sayfasından açın.
Panelde nerede
| Ne yapacaksınız | Panel sayfası |
|---|---|
| 3B model yüklemek, önizlemek, yayınlamak, arşivlemek, klip eklemek | 3D modeller, Model profili |
| Modeli eşyaya ya da karaktere bağlamak | İçerik (yerleşik eşya/karakter grupları) |
| Mağaza afişi ve ürün görseli, para birimi ikonu yüklemek | Mağaza, Para birimleri |
| Şehir sohbetini denetlemek (sahne eklentisi) | Şehir sohbeti |
| Scene eklentisinin kurulu olduğunu ve yetkisini görmek | Eklentiler |
Veri modeli (düz dille)
Scene
- Kimlik üç parçadan türetilir:
plugin_id(eklenti),module_id(gerçek zamanlı modül) vekey(en çok 96 karakter). Aynı üçlü her zaman aynı scene’e çıkar. capacity: Odanın oyuncu kapasitesi; en çok 10 000.state:open,draining(boşalıyor) ya daclosed.partition_id: Scene’in dağıtık çalıştığı bölüm kimliği (sunucu üretir).
Görsel
- Tür dosyanın ilk baytlarından çıkarılır;
Content-Typebaşlığı yalnız tavsiyedir. Kabul edilen türlerimage/png,image/jpeg,image/webp. - En çok 2 MiB; genişlik ve yükseklik her biri en çok 4096 piksel.
- Yanıt
sha256,contentType,byteSizevecreated(bu çağrıda yazıldı mı) verir.
3B model
- Yükleme
glbolabilir ya dafbx,obj,usdz,stl,blend,3mf,dxfgibi kaynak biçimlerinden dönüştürülür. Dönüştürme durumuqueued,converting,ready,failed’dır; başarısızlığın nedeni panelde Türkçe cümleyle görünür (ör. harici kaynağa başvuru, bütçe aşımı, 2B DXF). - Her model sürümlüdür; yayınlanan sürüm katalogda görünür. Yaşam döngüsü
active,archived,purged. - Varsayılan sınırlar: yüklenen dosya 50 MiB, ortam kotası 1 GiB, ortamda 200 model, model başına 20 sürüm, operatör başına 10 dakikada 10 yükleme.
- Dönüştürücü yalnız amd64 mimarisinde çalışır; başka mimaride yalnız
glbyüklenebilir.
Oyunun yaptığı çağrılar
| Yöntem ve yol | Kimlik | Ne yapar |
|---|---|---|
PUT /v1/scenes | sunucu anahtarı | Scene’i idempotent sağlar |
PUT /v1/assets | sunucu anahtarı | Görseli ham gövdeyle yükler |
GET /v1/assets | sunucu anahtarı | Ortamın görsellerini listeler (cursor, limit) |
DELETE /v1/assets/{sha256} | sunucu anahtarı | Görsel satırını siler (204) |
GET /v1/assets/{sha256} | kimliksiz | Görsel baytlarını okur |
GET /v1/model-files/{sha256} | kimliksiz | Yayınlanmış modelin glb dosyasını okur |
Yönetim uçları Authorization: Bearer crx_live_<önek>_<gizli> ister; istemci anahtarı 403 alır.
Scene sağlamak
PUT /v1/scenes
Authorization: Bearer crx_live_<önek>_<gizli>
Content-Type: application/json
{ "plugin_id": "package-ride", "module_id": "package-ride.presence", "key": "istanbul-1", "capacity": 200 }
{ "scene_id": "…", "plugin_id": "package-ride", "module_id": "package-ride.presence", "key": "istanbul-1", "partition_id": "…", "capacity": 200, "state": "open", "created": true }
- Scene yoksa yazılır (
201,created: true); varsa değiştirilmeden döner (200,created: false).Idempotency-Keygerekmez. 400: kimlik, anahtar ya da kapasite geçersiz (gövde hataları da400’dür).403: istemci anahtarı.409: aynı anahtarda farklı kimlikli scene.422: eklenti bu ortamda etkin değil.
Bir eklentinin gerçek zamanlı modüllerini ve oyuncu tarafı akışı için bkz. Gerçek zamanlı: genel bakış ve Eklentiler.
Görsel yüklemek
PUT /v1/assets
Authorization: Bearer crx_live_<önek>_<gizli>
Content-Type: image/png
<ham PNG baytları>
{ "sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08", "contentType": "image/png", "byteSize": 18234, "created": true }
201 ve created: true ilk yazımdır; aynı baytlar zaten varsa 200 ve created: false döner ve satır değişmez, yani yükleme idempotenttir. Boş gövde, tanınmayan tür, 2 MiB’ı aşan boyut ya da 4096 pikseli aşan en/boy 400 ile reddedilir (hata kodları asset_empty, asset_unsupported_type, asset_too_large, asset_dimensions_too_large).
Görseli oyunda göstermek için <img src="…/v1/assets/<sha256>?env=<ortam uuid>"> kullanın: uç kimliksizdir, ortamı x-crx-env başlığından ya da (başlık gönderemeyen <img>/doku yükleyicileri için) env sorgu parametresinden alır. Yanıt ETag olarak sha256 taşır ve süresiz önbelleğe alınabilir (immutable); If-None-Match eşleşirse 304 döner. Yeni görsel yeni sha256, yani yeni adres demektir.
Not
Görsel ve model okuma uçları, tarayıcının doku yükleyicisinin kullanabilmesi için çapraz kökenden okunabilir yanıt başlıkları gönderir. Diğer kamusal uçlar CORS’u yalnız ortamın alan adı listesindeki origin’lere verir; bkz. Mimari ve barındırma.
Uyarı
DELETE /v1/assets/{sha256}yalnız satırı siler; depo, başka kayıtların (ürün, ikon, içerik) bu görsele başvurup başvurmadığını bilmez. Silmeden önce görselin kullanılmadığından emin olun.
3B modeli oyuna almak
Modeli panelde yükleyip yayınlayın ve eşyaya ya da karaktere bağlayın. Oyun modelin adresini ve hesaplanmış gerçeklerini (üçgen sayısı, kemik, klipler, sınır kutusu) katalogdan okur; model.glb.url /v1/model-files/<sha256>?env=<ortam uuid> biçimindedir. Ayrıntı: İçerik grupları › Katalog ve Oyun katalog entegrasyonu (docs/oyun-katalog-entegrasyonu.md).
GET /v1/model-files/{sha256} kimliksizdir ve içerik adreslidir:
- Ortam
x-crx-envbaşlığıyla ya daenvsorgusuyla verilir; ikisi de verilip farklıysa ya da ikisi de yoksa400. - Yalnız hazır, dosyaları tutulan ve silinmemiş modelin
glbdosyası döner; silinmiş modelde404. - Eşleşen
If-None-Matchdosyayı açmadan304verir.200yanıtıContent-Length,model/gltf-binarytürü ve süresiz önbellek başlıklarını taşır.Rangedesteklenmez. - Aynı
sha256her zaman aynı baytlardır: dosyayısha256ile önbelleğe alın, yeniden indirmeyin.
Not
Model yükleme ve yayınlama yalnız panelden yapılır; modeller için herkese açık bir yazma ucu yoktur. Unity SDK’sında katalog ve model okuma yardımcıları yoktur; ham REST kullanılır.
Sürümleme ve tekrar güvenliği
PUT /v1/scenesvePUT /v1/assetsdoğal olarak idempotenttir (türetilmiş kimlik, içerik adresi);Idempotency-Keyistemezler.- Model dosyası ve görsel içerik adreslidir: aynı adres hiçbir zaman başka bayt vermez.
- Model sürümleri panelde izlenir; oyun her zaman yayınlanmış güncel sürümü katalogdan görür.
Olaylar
Bu yüzeyler webhook olayı üretmez. Model değişikliği katalogda yeni sha256 olarak yansır; ETag ile yoklayın.
Sınırlar
- Görsel en çok 2 MiB ve 4096×4096 piksel; yalnız PNG, JPEG, WebP.
- Scene
keyen çok 96 karakter,capacityen çok 10 000. - Model varsayılan sınırları yukarıdadır (50 MiB, 1 GiB kota, 200 model, 20 sürüm).
GET /v1/assetssayfa boyu en çok 200 (varsayılan 50).
Sık görülen hatalar
| Belirti | Neden | Çözüm |
|---|---|---|
422 (scene) | Eklenti bu ortamda etkin değil | Eklentiyi etkinleştirin (Eklentiler) |
409 (scene) | Aynı anahtarda farklı kimlikli scene | Anahtarı değiştirin |
400 (görsel) | Tür tanınmadı, 2 MiB ya da 4096 piksel aşıldı | PNG/JPEG/WebP, 2 MiB ve 4096 piksel altında yükleyin |
<img> yüklenmiyor | env ya da x-crx-env eksik | Adrese ?env=<ortam uuid> ekleyin |
404 (model dosyası) | Model silinmiş ya da henüz hazır değil | Katalogdaki model alanını kontrol edin |
Panelde model failed | Dönüştürme hatası | Panelin gösterdiği nedene göre dosyayı düzeltin |
Çalışan örnek
Görsel yükleme ve okuma:
curl -X PUT "$API/v1/assets" \
-H "Authorization: Bearer $SERVER_KEY" -H "Content-Type: image/png" \
--data-binary @afis.png
curl "$API/v1/assets/<sha256>?env=$ENV" -o afis.png