Unreal Engine’da bulunan geleneksel aktör sisteminin aksine, Scene Graph, dünyada objeler tanımlamak için bir varlıklar ve bileşenler sistemi kullanır. Varlıklar, bileşenler ve diğer varlıklar için kapsayıcı görevi görürken, bileşenler bağlı oldukları varlıklarla ilişkiler sağlar. Scene Graph ile bir oyun objesi oluşturmak için temel bir varlıkla başlayıp ona bileşenler kullanarak veri ve davranışlar eklemek gerekir. Her bileşen yeni bir davranış getirir ve bunları bir araya getirerek yeniden kullanabileceğin ve üzerinde geliştirme yapabileceğin karmaşık objeler oluşturabilirsin.
İnşa Temelleri
Bu noktayı daha iyi anlamak için şablon holünün birinci bölümünde yer alan ışık direği dizisine göz at. Her ışık direği bir prefabdır; yani, tek bir obje olarak kaydedilmiş bir varlıklar ve bileşenler koleksiyonudur. Prefab objesi, kendisinin oluşturulmasında kullanılan varlıkların ve bileşenlerin niteliklerini, davranışlarını, özelliklerini ve özniteliklerini onlarla paylaşır. Varlıklar ve bileşenler hakkında daha fazla bilgi edinmek için Varlıklar ve Bileşenlerle Çalışma dokümantasyonuna bakabilirsin.
Örnekleme Yoluyla Yineleme
Prefablar öğelerdir ve bu, düzenleme veya oynanış sırasında onları, bölümlerinde örneklemene olanak tanır. Bir prefabı İçerik Tarayıcısı’ndan dışarıya sürüklediğinde veya Verse kodu kullanarak bir kopya oluşturduğunda, dünyada o Scene Graph prefabının yeni bir örneğini oluşturmuş olursun.
Her prefabın kendi bellek ve işlem ek yükü olsa da yeni prefablar örneklenmesi belleği iki katına çıkarmaz, çünkü bir prefabda kullanılan öğe kaynakları örnekler arasında paylaşılır.
Aynı objenin birden fazla örneğini örnek oluşturmak güçlü olsa da prefablar da bir tasarımı hızlı bir şekilde geliştirmek için kullanışlı bir yol sağlar. İçerik Tarayıcısı’nda LightPost klasörünü aç. Bu klasörde nihai P_LightPost prefab tasarımını oluşturmak için kullanılan öğeler depolanır.
Holdeki her ışık direği bu prefabın bir parçasını temsil eder. Sen holde ilerledikçe her adımda yeni bir bileşen eklenir ve sonunda nihai prefab tasarımına ulaşırsın.
İlk ışık direği, ışık direği, pivot ve fener olmak üzere üç varlıktan oluşan basit bir kurulumdur. Bu üç varlıktan her biri, varlığın bölümde nerede olduğunu belirleyen bir transform_component’e sahiptir. Hem üst varlıkların hem de Fener varlıklarının, onları görünür kılmak ve üst varlıkların, ışık direği için, fener varlıklarının ise fener için modeller göstermesi için mesh_component’i vardır. Bunlar, ışık direği ile fener arasındaki bağlantıyı temsil eden bir Pivot varlığıyla birbirine bağlıdır.
İkinci ışık direği, Fenerin bir alt öğesi olarak, bir sphere_light_component’e sahip yeni bir varlık ekleyerek orijinal tasarımı geliştirir ve fenerin parlamasına neden olur.
Ancak yalnızca parlama çok ilgi çekici bir özellik değildir; bu nedenle üçüncü ışık direği, bir miktar görsel zarafet sağlamak için SphereLight varlığının etrafında uçan güveler simüle etmek amacıyla bir particle_system_component ekler.
Ardından dördüncü ışık direği örneği, Pivot varlığına, hem özel bir simple_movement_component hem de keyframe_movement_component ekler. Bu bileşenler, varlık ve alt öğelerinden herhangi biri üzerinde hareketi simüle etmek için birlikte çalışarak fenerin ileri geri sallanmasına olanak tanır.
Bu bileşenler, fenerin hareket ettiği yolu, o yolda ne kadar uzağa gittiğini ve rüzgârın ışığı savurmasını taklit etmek üzere fenerin dönüşünü belirlemek için Verse’ü kullanır. Anahtar kare hareket bileşeni, simple_movement_component’teki koordinatlara dayalı olarak düzgün ve sürekli bir hareket oluşturur.
Son olarak, son ışık direği örneği, ışık direğine özel bir Verse lantern_interaction_component, Fenere ise bir interactable_component ekler. Oyuncu fenere yaklaştığında ve fenerle etkileşime girdiğinde lantern_interaction_component, ışık direğinin tamamındaki her light_component’i ve particle_system_component’i etkinleştirip devre dışı bırakarak feneri açar ve kapatır.
Geçersiz Kılmalar
Bir prefabı örneklendiğinde, o prefab ilk başta, onu örneklemek için kullandığın prefab tanımındaki varsayılan değerlerin aynılarına sahiptir. Peki ya prefab örneklerinden birinin belirli bir unsurunu değiştirmek istersen? Belki farklı renkte bir ışık ya da ahşap bir ışık direği yerine metal bir direk istiyorsundur. Geçersiz Kılmalar, işte bu noktada devreye girer.
Geçersiz kılmalar, üst prefabı değiştirmeden her bir örneği özelleştirmek için bir prefab sınıfının örneklerinin değerlerini değiştirmene olanak tanır. Bir prefab örneğinde iç içe yerleştirilmiş olan bir bileşende seçenekleri değiştirdiğinde bu değişiklikler, üst prefabdaki seçenekleri geçersiz kılar ve varlığın ilgili bileşen bölümünde yalnızca o örneğe yönelik davranış şeklini etkiler.
Sahnede çeşitlilik oluşturmak için bağımsız prefab örnekleri üzerinde geçersiz kılmalar ve değişiklikler yapılabilir. Değişiklikleri prefabın belirli örneklerine değil de tüm örneklerine yaymak istersen bu değişiklikleri sahnedeki her prefaba yansıtmak için Prefab Editörü’nü kullanabilirsin.
Scene Graph’ta Verse İşlevselliği
Scene Graph, yerel bir Verse sistemidir ve bu, her ikisinden de birçok güçlü şekilde yararlanmana olanak tanır. Projende oluşturduğun prefablar, Assets.digest.verse dosyan aracılığıyla Verse’te öğe sınıfları olarak kullanıma açılır ve bunlara hem Verse bileşenlerinde hem de Verse cihazlarında kod içinde referans verebilirsin.
Verse’ü, sahnendeki bağımsız varlıkları ve bileşenleri sorgulamak için de kullanabilirsin. GetComponents() fonksiyonu, türlerine göre belirli bileşenleri almana olanak tanırken GetEntities(), belirli bir üst öğenin altındaki tüm alt varlıkları döndürmeni sağlar. Ayrıca alt ve üst varlıklar bulmak için Scene Graph hiyerarşisinde yukarıya ve aşağıya doğru arama yapabilirsin. Bu şablonda kullanılan P_LightPost prefabı, fenerin sallanma hareketini ve etkileşime geçilebilirliğini oluşturmak için Verse’ü kullanır.
İşlevsel oyun objeleri oluşturma konusunda daha fazla bilgi edinmek için Hareket ve Etkileşim adlı bir sonraki bölüme devam et.
Hareket ve Etkileşim
Varlıklara hareketler eklenmesinin nasıl, bir Verse bileşeni ile anahtar kare hareket bileşenine sahip işlevsel oyun objeleri oluşturduğunu öğren.