Субъект компоненті жүйесі - Entity component system

Субъект-компонент-жүйе (ECS) болып табылады сәулеттік көбінесе ойын дамытуда қолданылатын үлгі. ECS келесіге сәйкес келеді мұрагерлік құрамы ойын сахнасындағы барлық нысандар (мысалы, дұшпандар, оқтар, көліктер және т.б.) болатын объектілерді анықтауға үлкен икемділікке мүмкіндік беретін қағида. Кез-келген нысан бір немесе бірнеше компоненттерден тұрады, олар мәліметтер немесе күйлерден тұрады. Сондықтан объектінің мінез-құлқын жұмыс кезінде компоненттерді қосатын, алып тастайтын немесе өзгертетін жүйелер өзгерте алады. Бұл терең, кең мұрагерлік иерархияларының түсініксіз мәселелерін жояды, оларды түсіну, сақтау және кеңейту қиын. Жалпы ECS тәсілдері өте үйлесімді және жиі үйлеседі деректерге бағытталған дизайн техникасы.

Тарих

2007 жылы команда жұмыс істейді Flashpoint операциясы: Айдаһардың көтерілуі ECS дизайнымен тәжірибе жасады, соның ішінде Bilas шабыттандырды /Dungeon Biege, және кейінірек Адам Мартин ECS дизайны туралы толық есеп жазды,[1] негізгі терминология мен ұғымдардың анықтамаларын қосқанда.[2] Атап айтқанда, Мартиннің жұмыстары «Жүйелер» идеяларын бірінші класты элемент ретінде, «Субъекттер идентификатор ретінде», «Компоненттерді шикі деректер ретінде» және «Жүйелерде сақталған кодты, Компоненттерде немесе Субъектілерде емес» идеяларын танымал етті.

2015 жылы, Apple Inc. енгізілді ГеймплейКит, an API үшін негіз iOS, macOS және tvOS ECS іске асыруды қамтитын ойын дамыту. Бұл ойын көрсету үшін қолданылатын графикалық қозғалтқыш үшін агностикалық болса да, оған Apple-мен интеграциялануға ыңғайлы қолдау кіреді SpriteKit, SceneKit және Xcode Сахна редакторы.[3]

2019 жылы, Бірлік енгізілді Бірлік нүктелері.

Сипаттамалары

Мартиннің терминологиясы,[2] бүгінде кең қолданыста:

  • Субъект: Субъект - бұл жалпы мақсаттағы объект. Әдетте, ол тек бірегей идентификатордан тұрады. Олар «әрбір өрескел ойын нысандарын жеке зат ретінде белгілейді». Әдетте бұл үшін қарапайым бүтін сан қолданылады.[4]
  • Компонент: объектінің бір аспектісіне арналған бастапқы деректер және олардың әлеммен өзара әрекеттесуі. «Субъектіні осы аспектке ие ретінде белгілеңіз». Іске асыру үшін әдетте құрылымдар, сыныптар немесе ассоциативті массивтер қолданылады.[4]
  • Жүйе: «Әрбір жүйе үздіксіз жұмыс істейді (әр жүйенің өзінің жеке жіптері болған сияқты) және сол жүйемен бірдей аспект компонентіне ие барлық субъектілерде ғаламдық әрекеттерді орындайды.»

Сурет салу функциясы бар делік. Бұл физикалық және көрінетін компоненті бар барлық нысандар арқылы қайталанатын және оларды сызатын «Жүйе» болар еді. Көрінетін компонент, әдетте, нысанның көрінісі туралы кейбір ақпаратқа ие болуы мүмкін (мысалы, адам, құбыжық, ұшқындар, ұшатын жебе) және физикалық компонентті оны қайда салу керектігін білу үшін пайдаланады. Басқа жүйе соқтығысуды анықтау болуы мүмкін. Бұл физикалық компоненті бар барлық субъектілер арқылы қайталанатын еді, өйткені бұл ұйымның қалай салынғаны маңызды емес. Бұл жүйе, мысалы, монстртармен соқтығысатын көрсеткілерді анықтап, болған кезде оқиға тудырады. Жебенің не екенін және басқа зат стрелкамен соғылған кезде оның мағынасын түсінудің қажеті жоқ. Тағы бір компонент денсаулық туралы мәліметтер және денсаулықты басқаратын жүйе болуы мүмкін. Денсаулық компоненттері адам мен құбыжықтардың тіршілік иелеріне қосылады, бірақ жебе нысандарына емес Денсаулық сақтауды басқару жүйесі соқтығысудан туындаған оқиғаға жазылып, денсаулықты тиісінше жаңартады. Бұл жүйе денсаулық сақтау компоненті бар барлық құрылымдар арқылы қазірден кейін қайталануы және денсаулықты қалпына келтіруі мүмкін.

Нысан тек идентификатордан және компоненттер контейнерінен тұрады. Идея ойынға қатысатын ойын әдістерінің болмауында. Контейнер физикалық тұрғыдан объектімен бірге орналасуы керек емес, бірақ оны табу және қол жетімді болу керек. Әрбір субъект үшін бірегей идентификаторды қолдану әдеттегі тәжірибе. Бұл талап емес, бірақ оның бірнеше артықшылығы бар:

  • Нысанға сілтеменің орнына идентификаторды қолдану арқылы сілтеме жасауға болады. Бұл неғұрлым берік, өйткені ол нысанды іліп қойылатын көрсеткіштерді қалдырмай жоюға мүмкіндік береді.
  • Бұл күйді сыртынан үнемдеуге көмектеседі. Күй қайтадан жүктелгенде, көрсеткіштерді қалпына келтірудің қажеті жоқ.
  • Қажет болған жағдайда деректерді жадта араластыруға болады.
  • Субъектінің идентификаторларын объектіні бірегей сәйкестендіру үшін желі арқылы байланыс кезінде пайдалануға болады.

Осы артықшылықтардың кейбіреулері арқылы қол жеткізуге болады ақылды көрсеткіштер.

Деректерді жүйелер арасында жіберудің қалыпты тәсілі - бұл компоненттерде деректерді сақтау. Мысалы, объектінің орналасуы үнемі жаңартылуы мүмкін. Содан кейін бұл позицияны басқа жүйелер қолданады. Егер әртүрлі сирек кездесетін оқиғалар көп болса, онда бір немесе бірнеше компоненттерде көптеген жалаушалар қажет болады. Содан кейін жүйелер бұл жалаушаларды әр қайталануды қадағалап отыруы керек, бұл тиімсіз болуы мүмкін. Шешімі мүмкін бақылаушы үлгісі. Оған оқиғаға тәуелді барлық жүйелер жазылады. Осылайша, іс-шарадан алынған әрекет тек бір рет орындалады, егер ол орын алса және ешқандай сауалнама қажет болмаса.

ECS-ті қарапайым енгізулерде кез-келген жүйе барлық субъектілердің толық тізімі бойынша қайталанады және тек қажет нысандарды таңдайды. Барлық жүйелер үшін қайталанудың жалпы құны жүйелер саны өссе немесе құрылымдар саны көп болса, өте қымбатқа түседі. ECS-дің басқа архитектураларында компоненттердің кез-келген түрі бөлек тізімде сақталады, сондықтан берілген типтегі компоненттерде жұмыс жасайтын кез келген жүйелер әдепкі бойынша өздеріне маңызды объектілер бойынша қайталанады. Осы жалпы ECS архитектурасында сипатталған кемшілік іс жүзінде процессордың нұсқауы мен деректер кэштерін тиімді пайдалану арқылы өнімділіктің басты артықшылығы болады. Басқа ECS-лер архетиптерге негізделген: компоненттер жиынтығы бірдей барлық құрылымдар бір тізімде сақталады. Бұл тезірек қайталануға әкеледі, бірақ компоненттерді компоненттерге қосқанда немесе оларды алып тастағанда қосымша шығындар туындайды.

ECS архитектурасы тәуелділіктерді өте қауіпсіз және қарапайым түрде шешеді. Компоненттер қарапайым деректер шелегі болғандықтан, олардың тәуелділігі жоқ. Әрбір жүйе әдетте жүйеде жұмыс істеуі үшін болуы керек компоненттерді тіркейді. Мысалы, көрсету жүйесі модельді, түрлендіруді және тартылатын компоненттерді тіркеуі мүмкін. Содан кейін ол әрбір нысанды сол компоненттер үшін тексереді, егер оларда бар болса, онда барлық жүйе сол объектіге өзінің логикасын орындайды. Егер олай болмаса, ұйым жай өткізіп жіберіледі, оған тәуелділіктің күрделі ағаштары қажет емес. Алайда бұл қателерді жасыратын орын болуы мүмкін, өйткені компоненттер арқылы бір жүйеден екінші жүйеге мәндерді тарату өте қиын болуы мүмкін. ECS біріктірілмеген деректер берілген өмірге байланысты болуы керек жерде қолданылуы мүмкін.

ECS архитектурасында мұрагерлік ағаштарды емес, композицияны қолданады. Кәсіпорын әдетте идентификатордан және оған бекітілген компоненттер тізімінен тұрады. Ойын объектісінің кез-келген түрін объектіге дұрыс компоненттерді қосу арқылы жасауға болады. Бұл сондай-ақ әзірлеушіге тәуелділікке қатысты ешқандай проблемаларсыз объектінің бір түрінің ерекшеліктерін екіншісіне оңай қосуға мүмкіндік береді. Мысалы, ойыншы құрылымында оған «оқ» компоненті қосылуы мүмкін, содан кейін ол кейбір «bulletHandler» жүйесімен басқарылатын талаптарға сәйкес келеді, нәтижесінде ойыншы оларға кіріп заттарға зиянын тигізуі мүмкін.

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Мартин, Адам. «Entity Systems - MMOG дамуының болашағы». Алынған 25 желтоқсан 2013.
  2. ^ а б Мартин, Адам. «Entity Systems - MMOG дамуының болашағы 2 бөлім». Алынған 25 желтоқсан 2013.
  3. ^ «GameplayKit - WWDC 2015 таныстыру - бейнелер».
  4. ^ а б «Entity Systems Wiki». Алынған 31 желтоқсан 2019.

Сыртқы сілтемелер