Varlık bileşen sistemi - Entity component system

Varlık-bileşen-sistem (ECS) bir mimari çoğunlukla oyun geliştirmede kullanılan desen. ECS, miras üzerinde kompozisyon Bir oyunun sahnesindeki her nesnenin bir varlık olduğu varlıkların tanımlanmasında daha fazla esneklik sağlayan ilke (örn. düşmanlar, mermiler, araçlar vb.). Her varlık, veri veya durumu içeren bir veya daha fazla bileşenden oluşur. Bu nedenle, bir varlığın davranışı, bileşenleri ekleyen, kaldıran veya değiştiren sistemler tarafından çalışma zamanında değiştirilebilir. Bu, anlaşılması, sürdürülmesi ve genişletilmesi zor olan derin ve geniş kalıtım hiyerarşilerinin belirsizlik sorunlarını ortadan kaldırır. Yaygın ECS yaklaşımları son derece uyumludur ve genellikle veri odaklı tasarım teknikleri.

Tarih

2007 yılında ekip, Operation Flashpoint: Dragon Rising Bilas'tan esinlenenler de dahil olmak üzere ECS tasarımlarını denedi /Zindan Kuşatmasıve Adam Martin daha sonra ECS tasarımının ayrıntılı bir açıklamasını yazdı.[1] temel terminoloji ve kavramların tanımları dahil.[2] Özellikle Martin'in çalışmaları, birinci sınıf bir öğe olarak "Sistemler", "Kimlik olarak Varlıklar", "Ham Veri olarak Bileşenler" ve "Bileşenler veya Varlıklar içinde değil Sistemlerde depolanan Kod" fikirlerini popüler hale getirdi.

2015 yılında Apple Inc. tanıtıldı Oynanış Kiti, bir API için çerçeve iOS, Mac os işletim sistemi ve tvOS ECS'nin bir uygulamasını içeren oyun geliştirme. Bir oyunu işlemek için kullanılan grafik motorundan bağımsız olsa da, Apple'la entegrasyon için kolaylık desteği içerir. SpriteKit, SceneKit ve Xcode Sahne Düzenleyici.[3]

2019 yılında Birlik tanıtıldı Birlik Noktaları.

Özellikler

Martin'in terminolojisi,[2] bugün geniş kullanımda:

  • Varlık: Varlık, genel amaçlı bir nesnedir. Genellikle, yalnızca benzersiz bir kimlikten oluşur. "Her kaba oyun nesnesini ayrı bir öğe olarak etiketlerler". Uygulamalar genellikle bunun için düz bir tamsayı kullanır.[4]
  • Bileşen: nesnenin bir yönü için ham veriler ve dünya ile nasıl etkileşime girdiği. "Varlığı bu belirli özelliğe sahip olarak etiketler". Uygulamalar tipik olarak yapıları, sınıfları veya ilişkisel dizileri kullanır.[4]
  • Sistem: "Her Sistem sürekli olarak çalışır (sanki her Sistem kendi özel iş parçacığına sahipmiş gibi) ve o Sistem ile aynı özellikte bir Bileşene sahip olan her Varlık üzerinde global eylemler gerçekleştirir."

Bir çizim işlevi olduğunu varsayalım. Bu, hem fiziksel hem de görünür bir bileşene sahip olan tüm varlıkları yineleyen ve onları çeken bir "Sistem" olacaktır. Görünür bileşen tipik olarak bir varlığın nasıl görünmesi gerektiğine dair bazı bilgilere sahip olabilir (örneğin insan, canavar, etrafta uçuşan kıvılcımlar, uçan ok) ve onu nereye çizeceğini bilmek için fiziksel bileşeni kullanabilir. Başka bir sistem çarpışma tespiti olabilir. Varlığın nasıl çizildiğini umursamayacağı için, fiziksel bir bileşeni olan tüm varlıklar arasında yineleme yapacaktır. Bu sistem daha sonra, örneğin, canavarlarla çarpışan okları tespit edecek ve bu gerçekleştiğinde bir olay yaratacaktır. Okun ne olduğunu ve başka bir nesneye okla vurulduğunda ne anlama geldiğini anlamasına gerek yoktur. Yine başka bir bileşen sağlık verileri ve sağlığı yöneten bir sistem olabilir. Sağlık bileşenleri, insan ve canavar varlıklara eklenecek, ancak varlıklara ok eklenmeyecek. Sağlık yönetim sistemi, çarpışmalardan kaynaklanan olaya abone olacak ve buna göre sağlığı güncelleyecektir. Bu sistem ayrıca ara sıra sağlık bileşeni ile tüm varlıkları yineleyebilir ve sağlığı yeniden oluşturabilir.

Bir varlık yalnızca bir kimlikten ve bileşenlerden oluşan bir konteynerden oluşur. Buradaki fikir, varlığa gömülü hiçbir oyun yöntemine sahip olmamaktır. Konteynırın varlıkla birlikte fiziksel olarak yerleştirilmesi gerekmez, ancak bulunması ve erişilmesi kolay olmalıdır. Her varlık için benzersiz bir kimlik kullanmak yaygın bir uygulamadır. Bu bir gereklilik değildir, ancak birkaç avantajı vardır:

  • Varlığa bir işaretçi yerine kimlik kullanılarak başvurulabilir. Bu, sarkan işaretçiler bırakmadan varlığın yok edilmesine izin vereceği için daha sağlamdır.
  • Durumu dışarıdan kaydetmeye yardımcı olur. Durum yeniden yüklendiğinde, işaretçilerin yeniden yapılandırılmasına gerek yoktur.
  • Veriler, gerektiğinde bellekte karıştırılabilir.
  • Varlık kimlikleri, varlığı benzersiz bir şekilde tanımlamak için bir ağ üzerinden iletişim kurulurken kullanılabilir.

Bu avantajlardan bazıları kullanılarak da elde edilebilir akıllı işaretçiler.

Sistemler arasında veri göndermenin normal yolu, verileri bileşenlerde saklamaktır. Örneğin, bir nesnenin konumu düzenli olarak güncellenebilir. Bu pozisyon daha sonra diğer sistemler tarafından kullanılır. Çok sayıda farklı seyrek olay varsa, bir veya daha fazla bileşende çok sayıda bayrak gerekli olacaktır. Sistemler daha sonra bu bayrakları her yinelemeyi izlemek zorunda kalacak ve bu da verimsiz hale gelebilir. Bir çözüm, gözlemci deseni. Bir olaya bağlı olan tüm sistemler ona abone olur. Bu nedenle, olaydaki eylem yalnızca bir kez gerçekleştiğinde yürütülecektir ve sorgulamaya gerek yoktur.

Saf ECS uygulamalarında, her sistem tüm varlıkların tam listesini yineler ve yalnızca gerekli olan varlıkları seçer. Tüm sistemler için toplam yineleme maliyeti, sistem sayısı artarsa ​​veya varlık sayısı fazla olursa çok maliyetli hale gelir. Diğer ECS mimarilerinde, her bileşen türü ayrı bir listede saklanır, bu nedenle belirli bir bileşen türü üzerinde çalışan sistemler, varsayılan olarak yalnızca önem verdikleri nesneler üzerinde yineleme yapar. Bu yaygın ECS mimarisinde, açıklanan dezavantaj, CPU talimatını ve veri önbelleklerini daha verimli bir şekilde kullanarak aslında büyük bir performans avantajı haline gelir. Yine de diğer ECS'ler arketiplere dayanmaktadır: Aynı bileşen setine sahip tüm varlıklar aynı listede saklanır. Bu, daha hızlı yinelemeyle sonuçlanır, ancak bileşenlere bileşen eklerken veya bunları kaldırırken ek bir maliyete neden olur.

ECS mimarisi, bağımlılıkları çok güvenli ve basit bir şekilde ele alır. Bileşenler basit veri paketleri olduklarından, bağımlılıkları yoktur. Her sistem tipik olarak, sistemin üzerinde çalışması için bir kuruluşun sahip olması gereken bileşenleri kaydeder. Örneğin, bir işleme sistemi modeli, dönüşümü ve çekilebilir bileşenleri kaydedebilir. Daha sonra bu bileşenler için her bir varlığı kontrol edecek ve varlık bunlara sahipse, tüm sistem o varlık üzerinde mantığını gerçekleştirecektir. Değilse, varlık basitçe atlanır ve karmaşık bağımlılık ağaçlarına ihtiyaç duyulmaz. Bununla birlikte, değerlerin bir sistemden diğerine bileşenlerle yayılmasında hata ayıklamak çok zor olabileceğinden, burası hataların saklanabileceği bir yer olabilir. ECS, bağlanmamış verilerin belirli bir ömre bağlanması gerektiğinde kullanılabilir.

ECS mimarisi, miras ağaçları yerine kompozisyon kullanır. Bir varlık tipik olarak bir kimlikten ve ona eklenmiş bileşenlerin bir listesinden oluşur. Bir varlığa doğru bileşenler eklenerek herhangi bir tür oyun nesnesi oluşturulabilir. Bu, geliştiricinin herhangi bir bağımlılık sorunu olmadan bir nesne türünün özelliklerini diğerine kolayca eklemesine de izin verebilir. Örneğin, bir oyuncu varlığının kendisine eklenen bir "mermi" bileşeni olabilir ve daha sonra bu, bazı "bulletHandler" sistemi tarafından manipüle edilmesi için gereksinimleri karşılayabilir ve bu da oyuncunun bunlara çarparak eşyalara zarar vermesine neden olabilir.

Ayrıca bakınız

Referanslar

  1. ^ Martin, Adam. "Varlık Sistemleri, MMOG Geliştirmenin Geleceğidir". Alındı 25 Aralık 2013.
  2. ^ a b Martin, Adam. "Varlık Sistemleri MMOG Geliştirme Bölüm 2'nin Geleceğidir". Alındı 25 Aralık 2013.
  3. ^ "GameplayKit Tanıtımı - WWDC 2015 - Videolar".
  4. ^ a b "Varlık Sistemleri Wiki". Alındı 31 Aralık 2019.

Dış bağlantılar