Bu sayfa, deneyimli Unity geliştiricilerine Roblox ile başlamaları için bilgi içermektedir; temel oryantasyon, kavramsal karşılaştırmalar ve iki platform arasındaki temel farklılıklar gibi konulara değinmektedir.
Oryantasyon


Unity'nin Hiyerarşi penceresi ve Roblox Studio'nun Explorer penceresi, 3D sahnelerde ögeleri düzenlemek için ana pencerelerdir:
- Her ikisi de nesneleri (örneğin, karakterler ve çevresel varlıklar) yönetmenizi ve düzenlemenizi sağlar.
- Her ikisi de nesneler arasındaki ebeveyn-çocuk ilişkileri için bir ağaç yapısı kullanır.
Ancak, Hiyerarşi penceresinin önceden tanımlanmış bir yapısı yoktur, oysa Explorer penceresinin katı bir yapısı vardır. Explorer penceresini, Workspace klasörünün en belirgin öğe olarak bulunduğu, Unity'nin Hiyerarşi ve Proje pencerelerinin birleşimi olarak düşünmek faydalı olabilir.
Benzer şekilde, Roblox Studio'daki Asset Manager ve Toolbox, Unity'nin Proje penceresi ile örtüşmektedir. Asset Manager, oyununuz içindeki tüm varlıkları yönetmenizi sağlarken, Toolbox yayımladığınız herhangi bir varlığa erişmenizi sağlar. Toolbox ayrıca Roblox veya topluluktan varlıklar aramak için Creator Store'u kullanmanızı sağlar; bu, Unity'nin Asset Store'una benzer.
Felsefi farklılıklar
Roblox, geleneksel bir oyun motoru yerine "simülasyon motoru"dur. Unity GameObjects ve Roblox Parts, 3D ortamda nesneler oluşturmak için temel yapı taşları olarak görev yapar, ancak pratikte, ikisi oldukça farklıdır:
- Temsili: Unity'deki GameObjects, sahnedeki herhangi bir nesne için daha yüksek bir kavramdır; oysa Roblox'taki Parts, soyut geometri (Unity'deki ilkel nesneler gibi) yerine ahşap bloklar ve plastik küreler gibi fiziksel nesneleri temsil etmek için tasarlanmıştır.
- Fizik: Unity'de fizik simülasyonları gerçekleştirmek için bir GameObject'e Rigidbody ve Collider gibi bileşenler eklersiniz. Roblox'ta ise fizik, Parts veri türüne entegre edilmiştir; motor etkileşimleri otomatik olarak yönetir.
Bir GameObject ve bir Part oluşturduğunuzda, fark hemen görünür. GameObject sadece bir konum, rotasyon ve ölçek bilgisine sahiptir. Part ise bu bilgilere ek olarak bir malzeme ve renk, yansıma ve şeffaflık değerleri, kütle ve şekil gibi çok daha fazla bilgiye sahiptir. Bir Part'ı daha çok boş bir GameObject'e benzer hale getirmek, çok sayıda yerleşik özellik kaldırmayı gerektirir. Aksine, MeshFilter, MeshRenderer, Collider ve Rigidbody bileşenlerini ekleyerek bir GameObject'ı, bir Part gibi görünür hale getirebilirsiniz.
Scripting perspektifinden, GameObject, Roblox'un tüm diğer sınıfları için temel sınıf olan Instance ile en benzer olanıdır; ancak, Instance türünde nesneler oluşturmadığınız ve oluşturamayacağınız için, karşılaştırma özellikle pratik değildir.
Bir başka karşılaştırma, Unity GameObject ile Roblox Model arasındadır. Modeller, birden fazla GameObject için ebeveyn-çocuk ilişkisi kurmak gibi, birbirleriyle bağlantılı parçalar topluluğu için bir konteyner olarak işlev görür. Modelin bir parçasını birincil parça olarak belirleyerek pivot noktasını tanımlarsınız. Modeller ayrıca scriptler, animasyonlar, ses efektleri, istemler, kısıtlamalar, parçacık yayıcılar ve daha fazlasını barındırır.
Örneğin, bir Unity GameObject'ının ParticleSystem, Physics3D, SpringConstraint ve bir script için bileşenleri olabilir. Hiyerarşi penceresinde, SpringyFireball adında tek bir GameObject görüntülersiniz. İnceleme penceresi, bileşenler ve özelliklerin topluluğunu gösterir.
Roblox'ta karşılaştırılabilir bir SpringyFireball modeli Explorer penceresinde yukarıdaki gibi görünebilir:
Model|- ParticleEmitter|- MeshPart|- SpringConstraint|- ClickDetector| |- Script
Roblox'un varsayılan olarak fizik felsefesi, 3D modeller oluşturma sürecine de yayılır. Roblox'ta birden fazla parçayı birleştirerek bir montaj oluşturmak, hızlı bir şekilde şeyler inşa etmek için harika bir yoldur, çünkü Roblox, kaynak parçaları tek bir sert cisim olarak değerlendirir. Bu yaklaşım Unity'de mevcut değildir.
Roblox, uzunluk ve kütle için standart metrik birimlerini kullanmak yerine, "stud" adı verilen hayali birimler ve Roblox Kütle Birimleri (RMUs) kullanır. Yaklaşık metrik dönüşümler ve kullanım önerileri için Units sayfasına bakın.
Lokasyon önemli
Roblox oyunları varsayılan olarak çok oyunculu olduğundan, Roblox Studio farklı davranışlara sahip birçok depolama yeri sunar. Daha fazla bilgi için client-server runtime ve object organization sayfalarını inceleyin.
| Location | Description |
|---|---|
| Workspace | Oyunun 3D dünyasını temsil eder. Bu konum, nesnelere doğrudan bağlanan ve davranışlarını kontrol eden sunucu scriptleri için iyi çalışır. |
| ReplicatedFirst | İlk önce istemciye kopyalanan nesneleri içerir. Bu konum, bir yükleme ekranı görüntülemek için gerekli olan en az nesne ve istemci scriptlerinin kopyalanması için idealdir. |
| ReplicatedStorage | Hem istemciye hem de sunucuya kopyalanan nesneleri içerir. Bu konum, hem sunucuda hem de istemcide kullanmak istediğiniz ModuleScripts için idealdir. LocalScripts bu konumdan çalışmaz, ancak RunContext'ı Client olan Scripts bu konumdan çalışır. |
| ServerScriptService | Sunucu scriptlerini içerir. Bu konum, oyun mantığı ve bulut depolama gibi sunucu tarafı işlevsellik veya nesnelere erişmesi gereken scriptler için idealdir. |
| ServerStorage | Sunucu tarafı nesnelerini içerir. Bu konum, oyununa katıldıklarında istemcilere hemen kopyalanması gerekmeyen büyük nesneler için idealdir. Scriptler bu konumdan çalışmaz, ancak burada sunucu tarafı ModuleScripts saklayabilirsiniz. |
| StarterPlayer ⟩ StarterCharacterScripts | Karakterin doğduğunda çalışan LocalScripts içerir. |
| StarterPlayer ⟩ StarterPlayerScripts | Oyuncu oyuna katıldığında çalışan genel amaçlı LocalScripts içerir. |
| StarterGui | İstemcinin oyunu yüklediğinde görüntülediği GUI öğelerini içerir. LocalScripts bu konumdan çalışabilir. Bu konum, oyunun kullanıcı arayüzünü değiştirerek düğmeler, menüler ve açılır pencereler eklemek gibi scriptler için idealdir. |
| StarterPack | Genel olarak yalnızca Tools içerir, ancak oyuncu sırt çantalarını kurmak için LocalScripts de içerebilir. |
Programlama
Roblox oyunları, üç farklı Luau script türünü destekler:
İstemci scriptleri
Bu scriptler istemcide çalışır ve sunucunun davranışları üzerinde herhangi bir görünürlüğü yoktur. Eski nedenlerden dolayı, bu scriptler LocalScripts veya Scripts biçiminde olabilir ve RunContext değerleri Client olmalıdır. İstemci scriptleri genellikle ReplicatedStorage, StarterPlayerScripts veya StarterCharacterScripts içinde yer alır.
Sunucu scriptleri
Bu scriptler sunucuda çalışır ve istemcinin davranışları üzerinde herhangi bir görünürlüğü yoktur. Sunucu scriptlerinin RunContext değeri Server olmalıdır ve genellikle ServerScriptService içinde bulunur; bu içerik istemciye kopyalanmaz.
Modül scriptleri
Bu scriptler, genellikle bir fonksiyon veya tablo (veya fonksiyonların bir tablosu) döndüren tekrar kullanılabilir kod parçalarıdır. Kodun, istemci ve sunucu scriptlerinde çoğaltılmasını önlemek için, iki taraf arasında kod ve veri paylaşmak için modül scriptlerini kullanın. Modül scriptleri genellikle ReplicatedStorage içinde yer alır, ancak istemci-sunucu sınırının aynı tarafındaki scriptler arasında kod paylaşmak istiyorsanız başka yerlerde de bulunabilir.
Unity, farklı script türleri kavramına sahip değildir. Çok oyunculu bir oyun yapmayı seçerseniz, Unity, bir GameObject'in (ve onun scriptlerinin) sunucuya özel olması gerektiğinde sunduğu ağ kütüphanelerini kullanır.
Unity'de, motorun işlevselliği büyük ölçüde MonoBehaviour metotları aracılığıyla mevcuttur. Örneğin, render döngüsünden önce kod çalıştırmak için, kodu Update() metoduna eklersiniz. Fizik çarpışma olaylarını yönetmek için, kodu OnCollideEnter() metoduna eklersiniz.
Roblox scriptleri daha çok olay yönümlüdür. Benzer işlevselliğe hizmetlere abone olarak ve güncellemeleri dinleyerek erişirsiniz.
C# ve Luau
Programlama için Unity C# kullanır. Roblox ise Luau, Lua 5.1'den türetilmiş bir script dilidir.
C# ile karşılaştırıldığında, Luau kademeli olarak tiplenmiştir ve genellikle daha az ayrıntılı bir sözdizimine sahiptir. Ancak, daha büyük projelerde kademeli tipleme, C# gibi güçlü tipli dillerin kaçındığı bazı hata kategorilerini ortaya çıkarabilir, bu nedenle Roblox scriptlerinde katı tip kontrolünü etkinleştirmeyi değerlendirin.
Programlama dilleri arasındaki temel sözdizimi farkları için Luau ve C# karşılaştırması sayfasına bakın.
Luau kod örneği
Aşağıdaki Luau kod örneği, bir oyuncu bir olta takımı taktığında, kullanıcı girişlerini (bu durumda E tuşu) dinlemeyi ve ek fonksiyonları çağırmayı göstermektedir:
local ContextActionService = game:GetService("ContextActionService")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- ReplicatedStorage'dan tek bir fonksiyon döndüren bir modül betiği al
local performSomeAction = require(ReplicatedStorage.performSomeAction)
-- Bu betiğin olta takımının çocuğu olduğu varsayılmaktadır
local fishingPole = script.Parent
local ACTION_CAST = "Cast"
-- Tuşun basılı olduğunu kontrol et, sonra başka bir fonksiyonu çağır
local function castLine(_actionName, inputState, _inputObject)
if inputState == Enum.UserInputState.Begin then
performSomeAction()
end
end
-- Sadece oyuncu olta takımını taktığında eylemi etkinleştir
fishingPole.Equipped:Connect(function()
ContextActionService:BindAction(ACTION_CAST, castLine, true, Enum.KeyCode.E)
end)
-- Oyuncu olta takımını çıkardığında eylemi devre dışı bırak
fishingPole.Unequipped:Connect(function()
ContextActionService:UnbindAction(ACTION_CAST)
end)
Roblox scripti, Roblox'un birçok yerleşik varsayımı olduğu için nispeten kısa olabilir: sunucuya bağlı bir Humanoid karaktere sahip bir Player ve Tools ile donatılabilir. Bu varsayımlar Unity'de mevcut değildir, bu yüzden uygulama çok farklı olacaktır.
Varlıklar
Unity ve Roblox, .fbx formatında özel biçimler ve modeller içe aktarmayı destekler. Belirli türdeki varlıkların üçüncü taraf modelleme yazılımından özel yapılandırmalar ve dışa aktarma ayarları gerektirebilir. Daha fazla bilgi için aşağıdaki sayfalara bakın:
Unity'de nesneler, Proje penceresinde görünen Assets dizinine içe aktarılır. Roblox'ta ise varlıklar Workspace'a ve Toolbox veya Asset Manager'a içe aktarılır.
Roblox ayrıca içe aktarma sürecini hızlandırmak için açık kaynaklı bir Blender eklentisi sunar.
Dönüşümler
Unity'in dönüşümleri ve Roblox'un CFrames 3D nesnelerin dönüşümlerini temsil etmede benzer amaçlara hizmet eder:
- Hem dönüşümler hem de CFrames bir nesnenin 3D alandaki konumunu ve rotasını temsil eder. Dönüşümler ölçek içerirken, Roblox bir BasePart.Size özelliği kullanır ve bu özellik CFrame'in parçası değildir.
- Her ikisi de karmaşık dönüşümler için çarpma desteği sunar ve diğer manipülasyonlar için yerleşik yöntemlere sahiptir.
İşbirliği
Unity'de, standart sürüm kontrol sistemleri veya Unity Version Control gibi ücretli hizmetlerle işbirliği yaparsınız.
Roblox dosyaları bulutta yaşar (ancak kopyalarını dışa aktarabilirsiniz), bu nedenle Roblox Studio, eş zamanlı düzenleme, grup yönetimi, izinler, script taslağı hazırlama ve daha fazlası için yerleşik işbirliği iş akışları sunar. İşbirliği sayfasına bakın.
Eklentiler
Unity araçlarına benzer şekilde, Roblox Studio da eklenti destekler, bu da gelişim sürecinin çeşitli yönleri üzerinde daha fazla kontrol veya basitlik sağlar. Eklentiler, varlıklar gibi Creator Store'da mevcuttur, birçoğu ücretsizdir.
Sözlük
| Unity | Roblox | Notlar |
|---|---|---|
| Scene | Place | |
| GameObject | Part veya Model | Felsefi farklılıklar bölümüne bakın. |
| Prefab | Package | |
| Transform | CFrame | CFrame ölçek bilgilerini içermez. Dönüşümler sayfasına bakın. |
| Hiyerarşi | Explorer | |
| İnceleme | Properties | |
| Sahne görünümü | 3D viewport | |
| Oyun görünümü | 3D viewport | Görünüm, oyununuzu test ettiğinizde bir oyun oynama görünümüne geçer. |
| Proje penceresi | Asset Manager veya Toolbox | |
| Arazi İnceleme | Terrain Editor | |
| Doğma noktası | SpawnLocation | |
| Konsol | Output | |
| Varlık Mağazası | Creator Store | |
| Örtüler | Toolbar | |
| Araç | Plugin |