Prosedürel modeller

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

ProceduralModels, kod kullanarak 3D nesneler oluşturmanıza ve üretmenize olanak tanıyan parametre odaklı bir Model türüdür. Bir modelin içeriğini manuel olarak düzenlemek yerine, yapısını bir üretici modülü ve bir dizi özellik aracılığıyla tanımlarsınız. Bu özellikler değiştiğinde veya model yeniden boyutlandırıldığında, üretici otomatik olarak çalışarak modeli günceller.

Prosedürel modeller, şunları kolaylaştırır:

  • Modelleri yeniden inşa etmek yerine parametreleri değiştirerek yıkıcı olmayan bir şekilde ayarlama yapın. Örneğin, bir spiral merdivendeki AdımBüyüklüğü değerini değiştirmek, merdiveni güncellenmiş adım sayısıyla otomatik olarak yeniden üretir.
  • Tek bir OnGenerate fonksiyonu uygulayarak geri alma/geri alma, Takım Oluşturma ve sürükleyici araçlar gibi mevcut Stüdyo sistemleriyle otomatik olarak entegrasyon sağlayın.
  • Modellerin parametreleri değişene kadar standart nesneler gibi davranması sayesinde performansı yüksek tutun.
  • Hem düzenleme sırasında hem de çalışma zamanında içerik üretin, Stüdyo ve oyun içinde aynı sistemi kullanarak.
  • Parametreli modelleri Yaratıcı Mağazası'nda paylaşarak, varlıkları daha esnek ve özelleştirilebilir hale getirin.
Örnek: Masanın genişliği veya uzunluğu arttıkça dinamik olarak daha fazla sandalye ekleyen prosedürel model.

Prosedürel modelleri ekleme

Oyununuza prosedürel modelleri aşağıdaki yollarla ekleyebilirsiniz:

  • Bir ProceduralModel nesnesini Workspace'e manuel olarak ekleyin. Bu seçenek, başlamak için bir şablon üretici ModuleScript içerir.

    Explorer penceresinin yakın çekim görüntüsü. İç içe üç çocuk olan bir Model nesnesi vurgulanmış.
  • Yardımcı veya Roblox Studio MCP sunucusu kullanarak bir prosedürel model oluşturun.

  • Mevcut bir modeli kullanmak veya özelleştirmek için Yaratıcı Mağazası'ndan bir prosedürel model ekleyin.

Prosedürel modellerin nasıl oluşturulacağını özelleştirmek için kendi üretici modüllerinizi tanımlayabilirsiniz.

OnGenerate fonksiyonu

OnGenerate fonksiyonu, OnGenerate(params, targetContainer) biçiminde her ProceduralModel'in kalbinde yer alır.

Bu geliştirici tanımlı fonksiyon, sağlanan parametrelere dayalı olarak modelin içeriğini üretme ve sonuçları verilen konteynıra yazma sorumluluğunu taşır.

OnGenerate'in iki ana sorumluluğu vardır:

  • Giriş parametrelerini işleyerek modelin yapısını belirlemek
  • Üretilen sonuçları verilen targetContainer'a yazmak

Aşağıdaki bölümler:

  • Motorun OnGenerate'i ne zaman ve nasıl çağırdığını açıklar
  • Motorun yazılan içeriği targetContainer'a nasıl işlediğini açıklar

Üretici modülleri

OnGenerate fonksiyonu, üretici modül olarak bilinen bir ModuleScript içinde tanımlanır. ProceduralModel, hangi üretici modülünün kullanılacağını Generator özelliği aracılığıyla belirler.

Üretici modülleri standart Luau modülleridir, ancak üretim sürecinin bir parçası olarak motor tarafından doğrudan gereklidirler. Belirli bir yapıyı izlerler ve standartlaştırılmış alanlarla bir tablo döndürürler.

Üretici modül yapısı

local MyGenerator = {}
MyGenerator.Attributes = {
DoSomething = true,
AmountOfSomething = 137,
}
type Params = {
Size: Vector3,
Attributes: typeof(MyGenerator.Attributes),
Pause: (self: any) -> (),
}
function MyGenerator.OnGenerate(params: Params, targetContainer: GeneratedFolder)
end
return MyGenerator

Standartlaştırılmış alanlar şunları içerir:

  • Attributes: Parametre adlarını ve varsayılan değerlerini tanımlayan bir harita.
  • OnGenerate: Bir params tablosu ve bir targetContainer alanı alan işlev.

OnGenerate içindeki params tablosu şunları içerir:

  • Attributes: Modül tanımlı özellikleri veya belirtilmediğinde tüm model özelliklerini içeren bir tablo.
  • Size: Modelin bir ölçekle boyutlarını yansıtan bir parametre.
  • Pause: Karmaşık üretim görevleri sırasında üretimin verimli bir şekilde beklemesine olanak tanıyan bir yöntem.

OnGenerate fonksiyonu, targetContainer içindeki köken etrafında içerik üretmelidir. Ana DataModel hiyerarşisini doğrudan değiştirmemelidir.

Parametreler

Parametreler, üretimi kontrol eden girdilerdir. Bunlar, ProceduralModel'ın yerleşik Size özelliği ile üretici modülünde belirtilen özel özellikleri içerir. Bu açık parametreler, doğrudan OnGenerate'e iletilir. Örtük parametreler, modülün kaynak kodu veya sandbox durumu gibi, değiştirildiğinde yeniden üretimi tetikler ancak OnGenerate'e iletilmez.

Tam parametre kümesi şunları içerir:

  • Açık:
    • Size: İçeriğin üretildiği kökenin etrafındaki bölgeyi tanımlar.
    • Attributes: Geçerli giriş özellik değerlerini içeren bir harita.
  • Örtük:
    • Üretici: Üretim mantığını sağlayan modül.
    • Kaynak kodu: Üretici modülünün Luau kodundaki değişiklikler.
    • Sandboxlama: Üretici modülünün sandboxlama durumundaki değişiklikler.

Yeniden üretim davranışı

Performansı korumak ve API etkileşimlerini basitleştirmek için, parametreler değiştiğinde OnGenerate hemen çağrılmaz. Bunun yerine, ProceduralModel kirli olarak işaretlenir; bu, yeniden üretimin beklediğini gösterir. Bu bekleyen yeniden üretim genellikle aynı kare içinde daha sonra gerçekleşir.

Yeniden üretim başarısız olursa, kirli durumu temizlenir ve başka bir parametre değişikliği gerçekleşene kadar bekler. Ancak bir yer kaydedilirse ve model kirli ise, bu durum devam eder ve model, oyunun bir sonraki yüklemesinde yenilenme kuyruğuna eklenir.

Yürütme süreci

Zamanlama işlemi mevcut olduğunda, motor aşağıdaki adımları izleyerek kirli modelleri yeniden üretir:

  1. Gerekli üretici modülünü talep eder, gerekirse bekler.
  2. Üretim süreci için yeni bir iş parçacığı başlatır.
  3. Parametre tablosunu oluşturur, modelin mevcut ölçeği ile Size değerini normalleştirir.
  4. Eksik özellikler için varsayılan özellik değerlerini uygular.
  5. targetContainer olarak geçici bir GeneratedFolder başlatır.
  6. OnGenerate'i çağırır.
  7. OnGenerate döndüğünde:
    • Eğer başarılıysa, targetContainer'daki sonuçları ProceduralModel'e taşır.
    • Eğer üretim başarısız olursa, yerine bir başarısızlık yer tutucu kullanır.

Bir üretim iş parçacığı beklerken parametreler değişirse, outstanding üretim iptal edilir ve güncellenmiş parametrelerle tekrar başlatılır.

Üretim sonuçları

Üretilen sonuçların modele yerleştirilmesi aşağıdaki adımları içerir:

  1. Üretim sırasında sızan herhangi bir çocuk iş parçacığını sonlandırır.
  2. Sonuçları PivotTo kullanarak konumlandırır.
  3. Modelin Scale değeri 1 değilse, boyut normalleşmesini geri almak için ScaleTo kullanır.
  4. Sonuçları modelin GeneratedFolder'ına bağlar.
  5. Üretici modül sandboxlandığı takdirde, sonucun içindeki ModuleScripts'in üretici modülünün yeteneklerini aşmadığından emin olur.
  6. Modeldeki herhangi bir eksik özelliği varsayılan değerleriyle doldurur.
  7. Modelin kirli durumunu temizler.

Üretim detayları

Temel üretim akışının yanı sıra, aşağıdaki detaylar ProceduralModel üretiminin nasıl çalıştığını etkileyen davranışları ve dikkate alınması gerekenleri tanımlar.

Boyutlandırma

Üretim sırasında uygulanan ölçek normalleştirilmesi nedeniyle, ProceduralModel birden fazla boyutlandırma iş akışını destekler:

  • Size özelliğinin değiştirilmesi, modeli yeni içerik ile yeniden üretir.
  • Scale değiştirildiğinde mevcut sonuçlar ScaleTo kullanılarak tekdüze ölçeklenir.

Zaman aşımı

Bir güvenlik önlemi olarak, çok fazla iş yapan bir üretici modülü sonlandırılır. Eğer üretim "Script Timeout" hatası alırsa, kalan işlemin sonraki bir kareye ertelenmesine olanak tanımak için parameters:Pause() çağrılarının eklenmesi gerekir.

parameters:Pause() çağrısının oldukça masrafsız olduğu ve normal üretici yürütmesi sırasında genellikle hemen döndüğü için, döngülerin başlangıcında performansı etkilemeden serbestçe çağrılabilir.

Geri alma geçmişi

Üretilen sonuçlar, onları tetikleyen parametre değişikliği ile geri alma nokta aşım saptırmaları kullanılarak gruplandırılır. Bir kare içinde birden fazla parametre değişikliği gerçekleşirse, sonuçlar en son noktaya ilişkilendirilir.

Sandboxlama

ProceduralModel sandboxlama desteği sunar. Yaratıcı Mağazası'ndan eklediğiniz tüm üçüncü taraf prosedürel modeller varsayılan olarak sandbox edilir, bu da oyununuzda istenmeyen değişiklikleri önlemeye yardımcı olur.

Üretim kodu, üretici modülün bağlamında çalışır ve o modülün sandboxlama durumunu kullanır. Bu ayarlar varsayılan olarak görünmez. Görmek veya değiştirmek için Workspace.SandboxedInstanceMode = Experimental ayarını yapın. Bu, ModuleScript üzerindeki Sandboxed ve Capabilities özelliklerini açığa çıkarır.

Sandboxlanmış bir üretici modülünün genellikle aşağıdaki yeteneklere sahip olması gerekir:

  • RunServerScript (modülü çalıştırmak için)
  • CreateInstances
  • Basic

ProceduralModel ve onun üretici modülü için sandboxlama birbirinden bağımsızdır. Üretici modülüne uygulandığında, sandboxlama ProceduralModel içindeki normal çalışma zamanı betiklerini etkilemez. Bu, düzenleme süresindeki üretimi sıkı bir şekilde kısıtlamanıza olanak tanır ve oyun içindeki davranışları etkilemez.

İç içe geçme

ProceduralModels, başka ProceduralModels üretebilir. Bu durumda, motor, mümkün olduğunda aynı üretim adımının içinde hiyerarşiyi yukarıdan aşağıya işler ve daha derin iç içe geçmiş modeller en son üretilir.

Sınırlamalar

  • Actor örnekleri içinde üretim desteklenmez.
  • Modeller paketlere dönüştürülemez.
  • Eşleme Yüzeyleri etkinleştirilmişken sürükleyiciler kullanılarak oluşturulan eklemler ProceduralModel yeniden üretimleri arasında korunmaz.
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.