Birliktelik geliştiricileri için Roblox

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

Bu sayfa, deneyimli Unity geliştiricilerinin Roblox'la başlamasına yardımcı olacak bilgileri içerir: temel yönlendirme, konsept karşılaştırma ve iki platform arasındaki ana farklılıklar.

Yönlendirilmeye başla

Unity'nin Hierarchy penceresi ve Roblox Studio'nun Kâşif özelliği, 3B sahnelerde öğeleri düzenlemek için ana pencerelerdir:

  • Her ikisi de nesneleri yönetmenizi ve düzenlemenizi sağlar (örneğin, karakterler ve çevresel kaynaklar).
  • Her ikisi de nesneler arasındaki ebeveyn-çocuk ilişkileri için bir ağaç yapısı kullanır.

Ancak, Hierarchy penceresinin önceden tanımlanmış bir yapısı yokken Explorer penceresinin katı bir yapısı var.Araştırıcı penceresini Unity'nin hiyerarşisi ve Proje pencerelerinin bir kombinasyonu olarak ve çalışma alanı klasörü en tanınır öğe olarak düşünmek yardımcı olabilir.

Benzer şekilde, Roblox Studio Varlık Yöneticisi ve Araç Kutusu Unity Proje penceresiyle örtüşür.Varlık Yöneticisi, deneyiminizdeki tüm varlıkları yönetmenize izin verirken, Araç Kutusu yayınladığınız herhangi bir varlığa erişmenize izin verir.Alet çantası ayrıca Roblox veya topluluk için kaynaklar için Yaratıcı Mağazasını aramanıza izin verir, Unity Asset Store'a benzer.

Felsefi farklar

Roblox, geleneksel bir oyun motorundan ziyade bir "simülasyon motoru"dur.Birlik GameObjects ve Roblox Parts her ikisi de 3B çevrede nesneler oluşturmak için temel yapı blokları olarak hizmet ediyor, ancak pratikte iki kişi oldukça farklı:

  • Temsil : GameObjects Unity'de bir sahnedeki herhangi bir nesne için daha yüksek seviyeli bir konsept, Roblox'taki Parts ise, Unity'deki temel nesneler gibi soyut geometri yerine, ahşap bloklar ve plastik küreler gibi fiziksel nesneleri temsil etmek üzere tasarlanmıştır.
  • Fizik : Unity'te fizik simülasyonları yapmak için, Rigidbody ve Collider gibi bileşenleri bir GameObject 'a bağlarsınız.Roblox'ta, fizikler Parts veri yazyerleştirilir; motor, etkileşimleri otomatik olarak ele alır.

Bir GameObject ve bir Part oluşturursanız, hemen farkı görebilirsiniz.The GameObject hiçbir konum, dönüş ve ölçekten daha fazlasına sahip değildir.The Part aynı bilgiye sahiptir - artı bir malzeme ve renk, yansıtma ve saydamlık için değerler, kütle ve şekil ve çok daha fazlası.Bir Part 'yi boş bir GameObject 'ye daha yakın bir şeye dönüştürmek, çok sayıda yerleşik özelliği kaldırmak demektir kaldırmak .Tersine, çok fazla bir GameObject görünen bir Part ekleyerek, MeshFilter , MeshRenderer , Collider ve Rigidbody bileşenlerini ekleyerek yapabilirsiniz.

Bir senaryo bakış açısından, GameObject Roblox'un Instance 'ine en çok benzer, ancak tüm diğer Roblox sınıflarının temel sınıfı, çünkü Instance tipinde nesne oluşturmuyorsunuz (ve oluşturamıyorsunuz) karşılaştırma özellikle pratik değil.

Bir başka karşılaştırma, Roblox'a olan Unity'dir.Modeller, bir koleksiyonun bağlantılı parçaları için bir konteyner olarak davranır, tıpkı Unity'de birçok GameObjects arasında ebeveyn-çocuk ilişkisi kurabileceğiniz gibi.Modelin parçalarından birini ana parça olarak tanımlamak için pivot noktasını tanımlamak için modelin bir parçasını belirtiyorsunuz.Modeller ayrıca senaryolar, animasyonlar, ses efektleri, uyarılar, parçacık yayıcılar ve daha fazlasını tutar.

Örneğin, bir Unity , , , ve bir senaryo içerebilir.Hiyerarşi penceresinde, tek bir GameObject adlı SpringyFireball görüyorsunuz.Müfettiş penceresi bileşen ve özellik koleksiyonunu gösterir.

Roblox'ta, Araştırıcı penceresinde karşılaştırılabilir bir SpringyFireball modeli böyle görünebilir:


Model
|- ParticleEmitter
|- MeshPart
|- SpringConstraint
|- ClickDetector
| |- Script

Roblox'un varsayılan fiziği felsefesi, 3D modellerin oluşturulması sürecine genişletilir.Roblox'ta, çeşitli parçaları bir montaja birleştirerek kaynaklamak, şeyleri hızlı bir şekilde inşa etmenin mükemmel bir yoludur, çünkü Roblox kaynaklanmış parçaları tek bir sert vücut olarak ele alır.Bu yaklaşım Unity'de mevcut değildir.

Uzunluk ve kütle için standart ölçü birimlerini kullanmak yerine, Roblox stud ve Roblox Kütle Birimleri (RMU) adlı soyut birimleri kullanır.Yaklaşık ölçü dönüşümleri ve kullanım etrafındaki öneriler için, bakın Birimler.

Konum önemlidir

Roblox deneyimleri varsayılan olarak çok oyunculudur, bu nedenle Roblox Studio, belirli davranışlarla birçok farklı depolama yeri içerir.Örneğin, bir senaryo ReplicatedStorage içine koyduğunuzda çalışabilir, ancak StarterPlayerScripts içine koyduğunuzda değil.Daha fazla bilgi için, İstemci-sunucu çalışma zamanı ve Nesne organizasyonu göz atın.

Konum | Açıklama :--- | :--- Çalışma Alanı | Oyun dünyasını temsil eder.Bu konum, doğrudan nesnelere bağlanan ve davranışlarını kontrol eden sunucu kodları için iyi çalışır.ReplicatedFirst | Her şeyden önce müşteriye yansıtılan nesneleri içerir.Bu konum, yüklenme ekranını görüntülemek için gerekli mutlak minimum nesne ve istemci kodları için ideal bir yerdir.ReplicatedStorage | Hem istemciye hem de sunucuya yeniden yazılan nesneleri içerir.Bu konum, hem sunucu hem de istemci üzerinde kullanmak istediğiniz Class.ModuleScript\|ModuleScripts için idealdir.Bu konumdan kaçmayın, ancak bir çalışma bağlamı ile çalışın.ServerScriptService | Sunucu kodlarını içerir.Bu konum, sunucu tarafı işlevlere veya nesnelere erişmesi gereken senaryolar için ideal bir konumdur, örneğin oyun mantığı ve bulut depolama.ServerStorage | Sunucu tarafı nesneleri içerir.Bu konum, bir deneyime katıldıklarında hemen müşterilere yansıtılması gerekmeyen büyük nesneler için idealdir.Scriptler bu konumdan çalışmaz, ancak sunucu tarafında Class.ModuleScript\|ModuleScripts.StarterPlayer.StarterCharacterScripts | Karakter oluştuğunda çalışan Class.LocalScript\|LocalScripts içerir çalıştırma.StarterPlayer.StarterPlayerScripts | Oyuncu deneyime katıldığında çalışan genel amaçlı Class.LocalScript\|LocalScripts içerirBaşlangıç ​​GUI | Müşteri oyunu yüklendiğinde gösterdiği GUI öğelerini içerir.Class.LocalScript\|LocalScripts can run from this location.Bu konum, düğmeler, menüler ve pop-up'lar gibi oyunun kullanıcı arayüzünü değiştiren kodlar için ideal bir yerdir.Başlangıç Paketi | Genel olarak yalnızca Class.Tool\|Tools içerir, ancak oyuncu sırt çantalarını ayarlamak için Class.LocalScript\|LocalScripts da ekleyebilir.

Kodlama

Roblox deneyimleri üç farklı Luau senaryosunu destekler:

  • Müşteri kodları

    Bu senaryolar istemci üzerinde çalışır ve sunucunun davranışlarına ilişkin görüşü yoktur.Miras nedenleriyle, bu senaryolar LocalScripts veya Scripts ile bir RunContext değeri ile şekil alabilir Client .Müşteri kodları genellikle ReplicatedStorage , StarterPlayerScripts veya StarterCharacterScripts 'da yaşar.

  • Sunucu kodları

    Bu senaryolar sunucuda çalışır ve istemci onların davranışlarına erişemez.Sunucu kodlarının RunContext değeri Server ve genellikle ServerScriptService 'da yaşıyor, içeriği oyun istemcisine yansıtılmaz.

  • Modül kodları

    Bu senaryolar, tipik olarak bir işlev veya tablo (veya bir tablo içindeki işlevler) geri dönen yeniden kullanılabilir kod parçalarıdır.Müşteri ve sunucu kodunu kopyalamak yerine, aralarında kod ve verileri paylaşmak için modül kodlarını kullanın.Modül kodları genellikle ReplicatedStorage 'de yaşar, ancak aynı client-server sınırındaki kodlar arasında paylaşmak istiyorsanız başka bir yerde yaşayabilir.

Birlik farklı senaryo türlerinin konseptine sahip değildir.Bir çok oyunculu oyun yapmayı seçerseniz, Unity, bir GameObject (ve senaryolarının) sunucuya özel olması gerektiğini belirtmek için ağ kütüphanelerini kullanır.

Birleşiklikte, motorun işlevlerinin çoğu MonoBehaviour 'nin yöntemleri aracılığıyla mevcuttur.Örneğin, render döngüsünden önce kod çalıştırmak için, kodu Update() yöntemine ekleyin.Fizik çarpışma olaylarını ele almak için, OnCollideEnter() yöntemine kod eklersiniz.

Roblox kodları daha etkinlik tabanlıdır. Hizmetlere abone olarak ve güncelleme bekleyerek benzer işlevlere erişirsiniz.

C# ve Luau

Kodlama için, Unity C#'yi kullanır. Roblox, Luau , bir kodlama dili kullanır Lua 5.1 'den gelir.

C#'ye kıyasla, Luau yavaş yavaş yazılır ve genellikle daha az ayrıntılı bir sözdizimi vardır.Ancak daha büyük projelerde, yavaş yazma yüzünden C# gibi güçlü yazılan dillerden kaçınan hata kategorileri tanıtılabilir, bu nedenle Roblox kodlarında katı tür kontrolü etkinleştirmeyi düşünün.

Senaryo dilleri arasındaki temel sentaks farklılıkları için, Luau ve C# karşılaştırmasına bakın .

Luau kod örneği

Aşağıdaki Luau kod örneği, bir oyuncu bir balık oltası takınca, kullanıcı girişini dinlemeyi (bu durumda, E anahtarı) ve ek fonksiyonlar çağırmayı nasıl gösterir:


-- Gerekli oyun hizmetlerini alın
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- Tek bir işlev döndüren ReplicatedStorage'dan bir modül senaryosu alın
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Bu senaryonun balık oltasının bir çocuğu olduğunu varsayar
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Anahtarın aşağıda olduğundan emin olun, ardından başka bir işlev çağırın
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Sadece oyuncu balık oltasını takınca eylemi etkinleştirin
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Oyuncu balık oltasını çıkardığında eylemi devre dışı bırak
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)

Roblox kodu nispeten kısa olabilir çünkü Roblox'un birçok yerleşik varsayımı vardır: sunucuya bağlı bir Player karakterle bir Humanoid ve donatabilir Tools .Bu varsayımlar Unity'de bulunmuyor, bu nedenle uygulama çok farklı olurdu.

Varlıklar

Hem Unity hem de Roblox, özel dokuları ve modelleri .fbx formatında ithal etmeyi destekliyor.Bazı varlık türleri üçüncü taraf modelleme yazılımından özel yapılandırmalar ve ihracat ayarları gerektirebilir.Daha fazla bilgi için aşağıdaki sayfalara bakın:

Unity'de, nesneler Assets dizinine aktarılır ve Proje penceresinde görülebilir.Roblox'ta, varlıklar çalışma alanınıza ve Araç Kutusu veya Envanter bölümünün Varlık Yöneticisi bölümüne aktarılır.

Roblox ayrıca ithalat sürecini hızlandırmak için açık kaynaklı bir Blender eklentisi sunuyor.

Dönüşümler

props.engine'in dönüşümleri ve Roblox'un CFrames 3B nesnelerin dönüşümlerini temsil etmek için benzer amaçlara hizmet ediyor:

  • Hem dönüşümler hem de CFrames bir nesnenin 3B uzaydaki konumunu ve dönüşünü temsil eder.Dönüşümler ölçek içerirken, Roblox BasePart.Size parçası olmayan bir özellik kullanır CFrame.
  • Her ikisi de karmaşık dönüşümler için çarpan desteği (yani kompozisyon) sağlar ve diğer manipülasyonlar için yerleşik yöntemler vardır.

İşbirliği

Unity'de, standart sürüm kontrol sistemleri veya Unity Sürüm Kontrolü gibi ücretli hizmetlerle işbirliği yaparsınız.

Roblox dosyaları bulutta yaşar (ancak kopyaları ihraç edebilirsiniz), bu nedenle Roblox Studio, aynı anda düzenleme, grup yönetimi, izinler, senaryo taslakları ve daha fazlası için yerleşik iş akışları sağlar.Bakın İşbirliği .

Eklentiler

Unity araçlarına benzer şekilde, Roblox Studio pluginleri destekler, bu da geliştirme sürecinin çeşitli yönleri üzerinde basitleştirme veya size ek kontrol sağlar.Eklentiler Yaratıcı Mağazada mevcuttur, tıpkı varlıklar gibi, birçoğu ücretsizdir.

Sözlük

| Birliği | Roblox | Notlar | | :--- | :--- | :--- | | Sahne | Yerleştirin | | | OyunNesnesi | Part veya Model | Görün Felsefi farklılıklar .| | Prefab | Paket | | | Dönüştür | CFrame | CFrame ölçek bilgisi içermez.Bakın Dönüşümler.| | Hierarchy penceresi | Explorer penceresi | | | Müfettiş | Özellikler penceresi | | Scene görüntüsü | Görüntü alanı | | | Oyun görüntüsü | Görüntü alanı | Deneyiminizi test ettiğinizde Deneyim penceresi bir oyun oynama görüntüsüne dönüşür.| | Proje penceresi | Varlık Yöneticisi veya Araç Kutusu | | | Arazi Kontrolörü | Arazi Editörü | | | Doğrulama noktası | | | | Konsol | Çıktı | | | Varlık Deposu | Yaratıcı Deposu | | | Üstbilgiler | Menü çubuğu | | | Araç | Plugin | | | Overlays | Menü çubuğu | | | Araç | Plugin | |