{"id":386895,"date":"2024-06-29T06:59:17","date_gmt":"2024-06-29T06:59:17","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=386895"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T06:59:17","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=386895","title":{"rendered":"<span>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 ECS \u0438 \u0441 \u0447\u0435\u043c \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/b5e\/aa4\/b1a\/b5eaa4b1ae8399cf4b599c3459572aa6.jpg\" width=\"1857\" height=\"1057\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b5e\/aa4\/b1a\/b5eaa4b1ae8399cf4b599c3459572aa6.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043f\u0435\u0440\u0432\u0430\u044f \u0432 \u0431\u043b\u043e\u0433\u0435 MY.GAMES, \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u0432\u0438\u0434\u0435\u043e\u0438\u0433\u0440. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u0443 \u0432\u0441\u0435\u0445 14 \u043d\u0430\u0448\u0438\u0445 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0441\u0442\u0443\u0434\u0438\u0439. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043a\u0443\u0445\u043d\u0435 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b MY.GAMES, \u043d\u043e \u0438 \u043e \u0442\u043e\u043c, \u0447\u0435\u043c \u0436\u0438\u0432\u0435\u0442 \u0433\u0435\u0439\u043c\u0434\u0435\u0432 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 \u043c\u0438\u0440\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0440\u0435\u043d\u0434\u0430\u0445 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u0445 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438.\u00a0<\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u043e\u0432, \u0438 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441\u0442\u0443\u0434\u0438\u0438 <a href=\"https:\/\/it-territory.ru\/ru\/about\"><u>IT Territory<\/u><\/a>, \u0433\u0434\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/573298\/\">\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432<\/a>. \u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u043c\u044b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b\u0438 \u043e \u0442\u0430\u043a\u043e\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435, \u043a\u0430\u043a Entity Component System. \u041e \u043d\u0435\u043c \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e\u0435 \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u043d\u043e \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e.\u00a0<\/p>\n<p>\u041e \u0447\u0435\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c?<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u043a\u0443\u0434\u0430 \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u0446\u0435\u043b\u043e\u043c \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f Unity \u0438 \u0437\u0430\u0447\u0435\u043c \u0438\u043c Data Orientation System. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b ECS, \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d, \u043a\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f ECS \u0432 \u0438\u0433\u0440\u0430\u0445.<\/p>\n<hr\/>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<h3>\u041a\u0443\u0434\u0430 \u043a\u0430\u0442\u0438\u0442\u0441\u044f Unity?<\/h3>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0431\u0443\u043c \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f ECS \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Unity Technologies \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430 \u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0433\u0440 \u043d\u0430 \u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u0435. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438?<\/p>\n<p>Unity Technologies \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0438\u0433\u0440: \u043e\u0442 \u043a\u0430\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0445 match-3 \u0434\u043e \u0444\u043e\u0442\u043e\u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0445 AAA-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b72\/84e\/c14\/b7284ec14c265d912b650d6670941c68.png\" width=\"1600\" height=\"914\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b72\/84e\/c14\/b7284ec14c265d912b650d6670941c68.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Unity \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0443\u0433\u043e\u0434\u0438\u0442\u044c \u043d\u0443\u0436\u0434\u0430\u043c \u0432\u0441\u0435\u0445, \u0434\u0430\u0442\u044c \u043b\u044e\u0434\u044f\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0438 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0441\u0432\u043e\u0438\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c. \u0410 \u043f\u043e\u0442\u043e\u043c\u0443 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u0430 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445:<\/p>\n<ol>\n<li>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0433\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u0433\u0440\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418 \u0435\u0441\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0433\u0440\u044b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0442\u0443\u0434\u0438\u0439, \u0442\u043e \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u0433\u0440\u044b Unity \u043a\u0430\u043a \u0440\u0430\u0437-\u0442\u0430\u043a\u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c.<\/p>\n<p><strong><em>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0433\u0440\u0443?<\/em><\/strong>\u00a0<\/p>\n<p>Unity Technologies \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0430 \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><em>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/em>: \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0433\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p><em>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/em>, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u0434\u0432\u0443\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044f\u0445, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0441\u043a\u043e\u0440\u044f\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0433\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p><em>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/em>, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u0448\u0438\u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 Unity \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0445 <strong>Data-Oriented Tech Stack<\/strong> \u2014 \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u0446\u0435\u043b\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/67b\/2da\/a83\/67b2daa8369a65f5ad34e1d777a023d7.jpg\" width=\"1424\" height=\"719\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/67b\/2da\/a83\/67b2daa8369a65f5ad34e1d777a023d7.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<ul>\n<li>\n<p><strong>Burst Compiler<\/strong> \u2014 \u044d\u0442\u043e \u043d\u043e\u0432\u0430\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 LLVM \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0431\u044d\u043a\u0435\u043d\u0434-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043a\u043e\u0434 C# \u0432 \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041e\u043d\u0430 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 Unity \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0438\u0436\u043e\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u0434\u0430, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, Unity \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <strong>Job System<\/strong>. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041d\u043e \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041f\u043e \u044d\u0442\u043e\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u0435 Unity \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0433\u0440 \u0442\u0430\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u0430\u043a <strong>Entity Component System<\/strong>. Unity \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0438, \u2014 \u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043e \u0447\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b ECS \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<h3>\u0422\u0430\u043a \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 ECS?<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043a\u0430\u043a \u0443\u0436\u0435 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u0432\u044b\u0448\u0435, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 ECS \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439: <em>Entity<\/em>,<em> Component<\/em> \u0438 <em>System<\/em> \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0442\u0440\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u0441\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b.\u00a0<\/p>\n<p><strong>Entity<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043c\u0438\u0440\u0435 \u0438\u0433\u0440\u044b \u2014 \u043a\u0430\u043a GameObject, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 Unity. \u041d\u043e \u0432 ECS \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (<strong>Components<\/strong>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 <strong>Entity<\/strong>. \u0410 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435, \u0434\u043b\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b.\u00a0<\/p>\n<p>\u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 (<strong>System<\/strong>) \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043d\u043e \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u044d\u0442\u043e \u043e\u0441\u043e\u0431\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/7a1\/50c\/ca6\/7a150cca6828d90821b94814bdbda3e4.jpg\" width=\"1509\" height=\"1425\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7a1\/50c\/ca6\/7a150cca6828d90821b94814bdbda3e4.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p><strong>Gravity System <\/strong>\u2014 \u044d\u0442\u043e<strong> <\/strong>\u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0447\u0430\u0441\u0442\u044c \u0438\u0433\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u041e\u043d\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0438\u0433\u0440\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 <strong>Entity<\/strong>, \u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b <strong>Gravity. <\/strong>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, <strong>Gravity<\/strong> \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 <strong>SQL<\/strong>-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u0433\u0434\u0435 \u043c\u044b, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0437\u0430\u043f\u0440\u043e\u0441, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043d\u0443\u0436\u043d\u044b\u0445 <strong>Entity<\/strong>, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u043e\u0434 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0441\u0438\u043b\u044b \u0442\u044f\u0436\u0435\u0441\u0442\u0438 \u0417\u0435\u043c\u043b\u0438. \u041e\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>Position<\/strong> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u0430\u043a \u0436\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a\u043e \u0432\u0441\u0435\u043c <strong>Entity<\/strong>, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u043c \u0435\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0435\u0441\u044c \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a \u0434\u0440\u0443\u0433\u043e\u0439, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043c\u043e\u0433\u0443\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0435 \u0437\u043d\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u043e \u0434\u0440\u0443\u0433\u0435, \u0430 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0438\u0432\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043c\u0438\u0440\u0430. \u041a\u0442\u043e-\u0442\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u0440\u0438\u0432\u0435\u043b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 \u0448\u0438\u043d\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0431\u0449\u0435\u0439 \u0448\u0438\u043d\u0435, \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p><strong>\u041e\u0434\u043d\u043e \u0438\u0437 \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 ECS<\/strong> \u2014 \u044d\u0442\u043e \u043d\u0438\u0437\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0444\u0438\u0447\u0438 \u0438 \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438, \u0435\u0441\u043b\u0438 \u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b, \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0431\u043e\u0435\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0438\u0433\u0440\u043e\u043a\u0430 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0435\u0433\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f, \u0438\u0433\u0440\u043e\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0443\u043c\u0438\u0440\u0430\u0442\u044c. \u041a\u0430\u043a \u0431\u044b \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0447\u0438\u0442\u0430. \u042d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043b\u044e\u0431\u044b\u043c \u0438\u0433\u0440\u043e\u0432\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430\u043c.\u00a0<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043d\u0438\u0436\u0435. \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u0435 \u0443\u0442\u0440\u0443\u0436\u0434\u0430\u044f \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u0422\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c, \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1f5\/316\/1dc\/1f53161dca48c0188601ac203801ea5b.png\" width=\"1152\" height=\"525\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1f5\/316\/1dc\/1f53161dca48c0188601ac203801ea5b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u044d\u0442\u043e \u043a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ECS. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0440\u0443\u0433\u043b\u044f\u0448 \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0418 \u0432 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u0443 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0434\u0443\u0442 \u043e\u0434\u043d\u0430 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u0439.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/7b6\/411\/84e\/7b641184ee5e56d0b4fd62c6dadd15dd.jpg\" width=\"1291\" height=\"561\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7b6\/411\/84e\/7b641184ee5e56d0b4fd62c6dadd15dd.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 2, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u044e. \u0410 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043c\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u044f\u0442\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0435 \u043f\u043e\u0441\u043b\u0435 3, \u0438 \u0432\u0441\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<p><strong>\u0412\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e<\/strong> ECS \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0434 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0435\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/3bd\/63b\/cb5\/3bd63bcb56f5122f33170c74197a93f2.jpg\" width=\"1672\" height=\"715\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3bd\/63b\/cb5\/3bd63bcb56f5122f33170c74197a93f2.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 3 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<ol>\n<li>\n<p>Cube System;<\/p>\n<\/li>\n<li>\n<p>Triangle System;<\/p>\n<\/li>\n<li>\n<p>Sphere System.<\/p>\n<\/li>\n<\/ol>\n<p><strong>Cube System<\/strong> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u0443\u0431\u044b, \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0434\u043b\u044f <strong>Triangle System<\/strong> \u0438 \u0441\u0444\u0435\u0440\u044b \u0434\u043b\u044f <strong>Sphere System<\/strong> \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u0435\u0439 \u043d\u0430 \u0432\u0445\u043e\u0434. \u0418 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043b\u044f\u0434\u044f \u043d\u0430 \u0441\u0445\u0435\u043c\u0443 \u043d\u0438\u0436\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0435 \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e, \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u0432\u043e\u0434\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u0438 \u043b\u0438\u043d\u0438\u0438 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u044f\u0434\u043e\u043c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u043e\u0434\u043e\u0432, \u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0441\u044b\u0440\u044c\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043a\u0443\u0431\u043e\u0432, \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0438 \u0441\u0444\u0435\u0440 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e \u044d\u0442\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u0432\u043e\u0434\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<p><strong>\u0422\u0440\u0435\u0442\u044c\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0442\u0430\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u0433\u0435\u0439\u043c\u0434\u0435\u0432\u0435, \u2014 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ac2\/018\/f89\/ac2018f899b2853a1e88792055a615cf.jpg\" width=\"2113\" height=\"1051\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ac2\/018\/f89\/ac2018f899b2853a1e88792055a615cf.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u0433\u0440\u044b \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 <strong>Renderable<\/strong> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0441\u044b <strong>Moveable<\/strong> \u0438 <strong>StaticObject<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435, \u0442\u0430\u043a \u0438 <strong>ForceField<\/strong> \u2014 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430\u044f \u0442\u043e\u0447\u043a\u0443, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0410 \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u2014 \u043f\u0443\u043b\u0438, \u0430\u0441\u0442\u0435\u0440\u043e\u0438\u0434\u044b \u0438 \u0442. \u0434., \u2014 \u0442\u043e \u0438\u0445 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442 <strong>Moveable<\/strong>, \u043d\u043e \u0435\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u0435\u043d \u0438 <strong>Renderable. <\/strong>\u0410 \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0438 \u043f\u0440\u0438\u0448\u0435\u043b\u044c\u0446\u0435\u0432 \u0441 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u043e\u043c?<\/p>\n<p>\u041f\u0440\u0438 \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u043e \u0432 ECS \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043d\u0430 <strong>Entity<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c <strong>MoveableObject<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c <strong>ForceField<\/strong>. \u0418\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0442\u0435\u0433\u0438 <strong>Renderable<\/strong> \u0438 <strong>Movable<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <strong>Asteroid<\/strong>. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u043c\u0443 \u0435\u0449\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>AI<\/strong> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 <strong>EnemyAlien<\/strong> \u0431\u0435\u0437 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0418\u043b\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u044f <strong>Renderable <\/strong>\u0438<strong> Damageble.<\/strong> \u0410 \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043a\u0438\u043d\u0435\u043c <strong>MoveableObject<\/strong>.\u00a0<\/p>\n<p>\u0412\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043b\u043e? \u0425\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430\u0434\u0435\u043b\u0438\u0442\u044c \u0418\u0418? \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u044f\u0436\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442-\u0442\u0435\u0433 <strong>AI<\/strong>, \u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c! \u041f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u043b\u0438? \u0418\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u0440\u044f\u043c\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440\u044b. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <strong>MoveableObject <\/strong>\u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0433\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442 \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 <strong>Entity<\/strong>, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0431\u0435\u0437 \u0432\u0440\u0435\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432.\u00a0<\/p>\n<p>\u0418\u0442\u0430\u043a,<strong><em> \u043f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0435\u0441\u0442\u044c \u0443 ECS<\/em><\/strong>:<\/p>\n<ol>\n<li>\n<p>\u041d\u0438\u0437\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430;<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0410 \u0433\u0434\u0435 \u0438 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ECS?<\/h3>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ECS \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0433\u0440\u0430\u0445. \u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u2014 <strong>Dungeon Siege<\/strong>. \u0412 \u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0430\u0440\u0430\u043b\u0438\u0441\u044c \u0442\u0430\u043a \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 (\u0437\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u0438\u044f, \u044d\u0444\u0444\u0435\u043a\u0442\u044b) \u044e\u043d\u0438\u0442\u043e\u0432 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0441\u043e\u0431\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u2014 \u043f\u043e\u0440\u043e\u0439 \u0434\u0430\u0436\u0435 \u0442\u0430\u043a\u0438\u043c, \u043a\u0430\u043a\u0438\u043c \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u0438 \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0433\u0438 \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ECS.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2a8\/ec5\/0cd\/2a8ec50cd476443747563d299fb7e995.png\" width=\"1280\" height=\"720\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a8\/ec5\/0cd\/2a8ec50cd476443747563d299fb7e995.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0437 \u0431\u043e\u043b\u0435\u0435 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 <strong>Operation Flashpoint<\/strong>. \u0422\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u043d\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 ECS \u0441 \u0446\u0435\u043b\u044c\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 ECS \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0441 \u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u0438 \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0449\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443.\u00a0<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u2014 <strong>Raid: Shadow Legends<\/strong>. \u0422\u0430\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 ECS \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043d\u043e\u0432\u043e\u0439 \u0444\u0438\u0447\u0438 \u0432\u0430\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043b\u043e\u043f\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u043a\u043e\u0434 \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u044f\u0434\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043d\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0438 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0444\u0438\u0447\u0430, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u0410 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043b\u0430 \u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0440 \u0434\u043b\u044f \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u0442\u0432\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/043\/e0e\/97e\/043e0e97eb8667e33959a9c94a823a9c.png\" width=\"1026\" height=\"550\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/043\/e0e\/97e\/043e0e97eb8667e33959a9c94a823a9c.png\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u0410 \u043a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 ECS?<\/h3>\n<p>\u041d\u0430\u0447\u043d\u0435\u043c, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441 \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u0433\u043e \u0441\u0430\u043c\u0438\u043c\u0438 <strong>Unity <\/strong>\u0432 <strong>DOTS<\/strong>. \u041a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0434\u043e\u043b\u0433\u043e \u0438 \u0443\u043f\u043e\u0440\u043d\u043e \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u044e\u00a0 ECS, \u043d\u043e \u043f\u043e\u043a\u0430 \u0434\u0430\u043b\u0435\u043a\u0430 \u043e\u0442 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041a\u0430\u0436\u0434\u044b\u0435 \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0435 API, \u0447\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u0434\u0432\u0438\u0436\u043a\u0430.\u00a0<\/p>\n<p>\u041e\u043d\u0430 \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0447\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0431\u043b\u0438\u0436\u0435 \u043a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Data-oriented_design\"><u>Data-Oriented Design<\/u><\/a>, \u0447\u0435\u043c \u043a ECS. \u0410 \u043f\u043e\u0442\u043e\u043c\u0443 \u043e\u0441\u043e\u0431\u044b\u043c \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 Unity \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Chunks, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u044b. <strong>\u0410\u0440\u0445\u0435\u0442\u0438\u043f<\/strong> \u2014 \u044d\u0442\u043e \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0439 \u043e\u0442\u0431\u043e\u0440\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d54\/bdc\/a5f\/d54bdca5fb162b5130f6322f249e2544.jpg\" width=\"666\" height=\"329\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d54\/bdc\/a5f\/d54bdca5fb162b5130f6322f249e2544.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 A, B \u0438 C, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 M \u0438 N. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043e\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u043b\u0430\u0441\u044c \u0432 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0441 <strong>Chunk<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043c\u043e\u0433 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0445 \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438, \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u044f \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u0422\u043e \u0435\u0441\u0442\u044c, \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ECS \u00ab\u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00bb \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043a\u0443\u0441\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 <strong>Entity<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u0435 \u043a\u0443\u0441\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0445\u043e\u0434\u0430 \u043f\u043e \u043d\u0438\u043c \u0431\u0435\u0437 \u0440\u0430\u0437\u0440\u044b\u0432\u043e\u0432, \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044f \u0438\u0445 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 <strong>Chunk<\/strong>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/d84\/b3c\/f0a\/d84b3cf0a6e8315994a1127a9547245b.jpg\" width=\"544\" height=\"389\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d84\/b3c\/f0a\/d84b3cf0a6e8315994a1127a9547245b.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e \u0441 \u044d\u0442\u0438\u043c \u043f\u043e\u043a\u0430 \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u0432\u0441\u0435 \u0433\u043b\u0430\u0434\u043a\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 Unity \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e ECS. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u044d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430, \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043d\u0430 \u0441\u043e\u0442\u043d\u044f\u0445 \u0442\u044b\u0441\u044f\u0447 Entity, \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u0431\u044c\u0435\u0442 \u0432\u0441\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437-\u0437\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u0443\u0441\u043a\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c. \u0422\u043e \u0435\u0441\u0442\u044c, \u043d\u0430 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e, \u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.\u00a0<\/p>\n<p>\u0418, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0443 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 ECS. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<ol>\n<li>\n<p><a href=\"https:\/\/github.com\/sschmid\/Entitas-CSharp\"><u>Entitas<\/u><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Leopotam\/ecs\"><u>LeoECS<\/u><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/sebas77\/Svelto.ECS\"><u>Svelto.ECS<\/u><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/scellecs\/morpeh\"><u>Morpeh<\/u><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/PixeyeHQ\/actors.unity\"><u>actors.unity<\/u><\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Doraku\/DefaultEcs\"><u>DefaultEcs<\/u><\/a><\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/26d\/358\/39e\/26d35839e16e024a34d40f4dda539859.png\" width=\"1600\" height=\"1066\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/26d\/358\/39e\/26d35839e16e024a34d40f4dda539859.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041f\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u0438 <a href=\"https:\/\/assetstore.unity.com\/packages\/tools\/game-toolkits\/entitas-87638\"><strong><u>Entitas<\/u><\/strong><\/a> \u0432 \u0440\u0430\u0437\u044b \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u2014 \u043d\u043e \u043e\u043d\u0430 \u0443\u0436\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0432\u043d\u043e \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0412 \u043c\u0430\u0440\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u043a\u043e\u0433\u0434\u0430 \u043f\u043b\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u043d\u0430 \u0432\u0441\u0435 \u0435\u0449\u0435 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0436\u0438\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 community-driven.<\/p>\n<p><a href=\"https:\/\/github.com\/Leopotam\/ecs\"><strong><u>LeoECS<\/u><\/strong><\/a><strong> <\/strong>\u2014 \u0434\u0440\u0443\u0433\u0430\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a \u0441\u043b\u043e\u0432\u0443, \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430, \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439, \u0434\u0435\u043b\u0430\u044e\u0449\u0435\u0439 \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432. \u0415\u0435-\u0442\u043e \u043c\u044b \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043b\u0435\u0435. \u0420\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439, \u0435\u0449\u0435 \u0438 \u043b\u0430\u0439\u0442-\u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0434\u0440\u043e, \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0438 \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c \u043d\u0430\u0434 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041d\u043e \u0434\u0430\u043b\u0435\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.\u00a0<\/p>\n<h3>\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 ECS. \u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c?<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c \u043c\u044b \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441 GitHub \u043d\u0430\u0431\u043e\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:\u00a0<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/Leopotam\/ecs\"><strong><u>LeoECS<\/u><\/strong><\/a> \u2014 \u0441\u0430\u043c\u043e \u044f\u0434\u0440\u043e (\u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043d\u0435 \u043b\u0430\u0439\u0442);<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Leopotam\/ecs-unityintegration\"><strong><u>Unity Integration<\/u><\/strong><\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c LeoECS \u0432 Unity,\u00a0<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/Leopotam\/ecs-ui\"><strong><u>EcsUI<\/u><\/strong><\/a> \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 UI-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 Unity.<\/p>\n<\/li>\n<\/ul>\n<p><strong><em>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435:<\/em><\/strong><em> LeoECS \u2014 \u0434\u0432\u0438\u0436\u043a\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 Unity: \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0445\u043e\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0432 \u043e\u0431\u0432\u044f\u0437\u043a\u0435 LeoECS. \u041d\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043c\u044b \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u0432 \u0441\u0432\u044f\u0437\u043a\u0435 \u0441 Unity.<\/em><\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u0432 Unity \u043c\u044b \u0447\u0435\u0440\u0435\u0437 <strong>Package Manager<\/strong> \u2014 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c URL \u043d\u0430\u00a0 GitHub, \u0438 \u0432\u0441\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0442\u044f\u043d\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0438\u0436\u043e\u043a.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u2014 \u043a\u043b\u043e\u043d \u043d\u0430\u0448\u0443\u043c\u0435\u0432\u0448\u0435\u0439 \u0432 \u0441\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440\u044b <a href=\"https:\/\/flappybird.io\/\"><strong><u>Flappy Bird<\/u><\/strong><\/a>. \u0412 \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0442\u0438\u0446\u044b \u0431\u0443\u0434\u0435\u0442 \u043b\u0435\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u0443\u0431, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0441\u043a\u043e\u0447\u0438\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u0442\u0440\u0443\u0431\u044b. \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c LeoECS, \u043d\u0430\u0439\u0442\u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\"><u>GitHub<\/u><\/a> \u0432 \u043c\u043e\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0435.\u00a0<\/p>\n<p><em>\u041d\u0438\u0436\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0431\u0443\u0434\u0443 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u044b, \u0433\u0434\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0444\u0430\u0439\u043b\u044b. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u0442\u0430\u043f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0431\u043b\u043e\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 LeoECS. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u044d\u0442\u0430\u043f\u0430.<\/em><\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u043a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0438\u0433\u0440\u0430. \u0423 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 <code>EcsStartUp<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 MonoBehaviour \u0438 \u0432\u0438\u0441\u0438\u0442 \u043d\u0430 GameObject \u0432 \u0441\u0446\u0435\u043d\u0435. \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cs\">sealed class EcsStartup : MonoBehaviour<\/code><\/pre>\n<p><a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/commit\/e92606f4593ac5aff4ed9b8bb30231a987103cae\"><u>EcsStartup<\/u><\/a> \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 Unity \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <em>Unity Integration<\/em>: LeoECS \u2192 Create Startup template.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/285\/e64\/31c\/285e6431c326de14500157fdc0b52c06.png\" width=\"1390\" height=\"190\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/285\/e64\/31c\/285e6431c326de14500157fdc0b52c06.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b <code>EcsWorld<\/code> (\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0432\u0441\u0435 Entity) \u0438 <code>EcsSystems<\/code> (\u043d\u0430\u0431\u043e\u0440 \u0441\u0438\u0441\u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b). \u0412 <em>Start<\/em> \u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c <code>World<\/code> \u0438 <code>EcsSystems<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043f\u043e\u0434\u0442\u044f\u043d\u0443\u043b\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using Leopotam.Ecs; using UnityEngine;  sealed class EcsStartup : MonoBehaviour { private EcsWorld _world; private EcsSystems _systems;  private void Start() { _world = new EcsWorld(); _systems = new EcsSystems(_world);  #if UNITY_EDITOR Leopotam.Ecs.UnityIntegration.EcsWorldObserver.Create(_world); Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_systems);  #endif _systems .Init(); }  private void Update() { _systems?.Run(); }  private void OnDestroy() { if (_systems != null) { _systems.Destroy(); _systems = null; _world.Destroy(); _world = null; } } } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u0438\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 LeoECS \u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u044b\u0431\u043e\u0440\u0430 \u0434\u0432\u0438\u0436\u043a\u0430, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u0434\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>Run<\/code>.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <code>destroy<\/code> \u043c\u044b \u0434\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u0438 \u043c\u0438\u0440\u0443. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u0432\u0445\u043e\u0434\u0430.<\/p>\n<p>\u0412\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0447\u0442\u043e \u0432 \u0434\u0435\u0444\u0430\u0439\u043d\u0435 <code>UNITY_EDITOR<\/code> \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e Observer\u2019\u044b. \u0418\u0437 Unity Integration \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043f\u0440\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u0432 \u043c\u0438\u0440\u0435, \u043a\u0430\u043a\u0438\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u0438 \u0441\u0430\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442. \u0422\u0443\u0442 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0445 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u2014 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0448\u0442\u0443\u043a\u0430 \u0434\u043b\u044f \u0434\u0435\u0431\u0430\u0433\u0430. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043d\u0435\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0435 GameObject\u2019\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0433\u0440\u044b, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u043d\u0430\u0431\u043e\u0440 Entities, \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043b\u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439 \u0438 \u0434\u0435\u0431\u0430\u0433\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ca6\/b57\/9ca\/ca6b579ca142410b261710be46a753b6.png\" width=\"1600\" height=\"938\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ca6\/b57\/9ca\/ca6b579ca142410b261710be46a753b6.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043b \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/2068232ffe3b62814c737c88f1d6bc686a72631f\/FlappyCube\/Assets\/Scripts\/Systems\/Demo\/DemoSystem.cs\"><u>DemoSystem<\/u><\/a>:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">using Leopotam.Ecs; using UnityEngine;  namespace Systems.Demo { public class DemoSystem : IEcsPreInitSystem, IEcsInitSystem, IEcsRunSystem, IEcsDestroySystem, IEcsPostDestroySystem { public void PreInit() { Debug.Log(\"PreInit is analogue Awake\"); }  public void Init() { Debug.Log(\"Init is analogue Start\"); }  public void Run() { Debug.Log(\"Run is analogue Update\"); }  public void Destroy() { Debug.Log(\"Destroy is analogue Destroy\"); }  public void PostDestroy() { Debug.Log(\"PostDestroy are no analogues in Unity. Called after destruction\"); } } } <\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043d\u0443\u0442\u0440\u0438 Unity \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c LeoECS, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b. \u0422\u0430\u043a\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e: IEcsPreInitSystem<em>, <\/em>IEcsInitSystem<em>, <\/em>IEcsRunSystem<em>, <\/em>IEcsDestroySystem \u0438 IEcsPostDestroySystem. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u043c\u0435\u0442\u043e\u0434, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0441\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0432 Unity. \u0412 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043e\u0442 \u043e\u0434\u0438\u043d, \u0442\u0430\u043a \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043a\u0430\u0434\u0440\u0430 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 PreInit, Init, Run, Destroy, PostDestroy. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 \u044e\u043d\u0438\u0442\u0438 \u2014 \u044d\u0442\u043e Awake, Start, Update, Destroy, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043a\u0440\u043e\u043c\u0435 \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e PostDestroy \u2014 \u0443 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u0432 Unity, \u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u043d \u0432 ECS \u043f\u043e\u0441\u043b\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 Destroy.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c <strong><em>DemoSystem<\/em><\/strong> \u0432 \u0440\u0430\u0431\u043e\u0442\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0435 \u043a <code>_systems<\/code> \u0432 <code>EcsStartup<\/code>:<\/p>\n<pre><code class=\"cs\">_systems .Add(new DemoSystem()) .Init();<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0446\u0435\u043d\u0443, \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0438 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>\u041d\u043e \u043f\u043e\u0440\u0430 \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043d\u0443\u0442\u0440\u044c \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u044b. \u0414\u0435\u043b\u0430\u0442\u044c \u043c\u044b \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 Input \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c. \u041a\u043b\u0430\u0441\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u044b <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/e16ae10a9042114b367d1be64e53b5c11ace9d1d\/FlappyCube\/Assets\/Scripts\/Systems\/InputSystems\/KeyInputSystem.cs\"><u>KeyInputSystem<\/u><\/a> \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 <code>IEcsRunSystem<\/code>, \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043b\u044e\u0431\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438:<\/p>\n<pre><code class=\"cs\">public class KeyInputSystem : IEcsRunSystem { private EcsWorld _world = null;      public void Run() { if (Input.anyKeyDown) { _world.NewEntity().Get&lt;AnyKeyDownTag>(); \/\/read it in DemoSystem } } }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0430 \u0445\u043e\u0442\u044c \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043a\u043d\u043e\u043f\u043a\u0430, \u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 <code>EcsWorld<\/code> \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u0438 \u043c\u0435\u0442\u043e\u0434 Get \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443, \u0442\u0438\u043f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0432 generic type. Get \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u00ab\u043b\u0435\u043d\u0438\u0432\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\u00bb: \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0443\u0441\u0442\u0443\u044e Entity \u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043e\u043d \u043d\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438.<\/p>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 LeoECS \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/e16ae10a9042114b367d1be64e53b5c11ace9d1d\/FlappyCube\/Assets\/Scripts\/Components\/Common\/Input\/AnyKeyDownTag.cs\"><u>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/u><\/a>:<\/p>\n<pre><code class=\"cs\">public struct AnyKeyDownTag : IEcsIgnoreInFilter { }<\/code><\/pre>\n<p>\u0421\u0430\u043c\u0438 \u0436\u0435 \u044d\u0442\u0438 \u044d\u0432\u0435\u043d\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/e16ae10a9042114b367d1be64e53b5c11ace9d1d\/FlappyCube\/Assets\/Scripts\/Systems\/Demo\/DemoSystem.cs\"><u>DemoSystem \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u0430<\/u><\/a>. \u0422\u0443\u0434\u0430 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 <code>EcsFilter&lt;AnyKeyDownTag> _inputFilter<\/code> \u0438 \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 Run():\u00a0<\/p>\n<pre><code class=\"cs\">private EcsFilter&lt;AnyKeyDownTag> _inputFilter = null;  public void Run() { if (!_inputFilter.IsEmpty()) { Debug.Log(\"The button was pressed\"); } }<\/code><\/pre>\n<p><code>EcsFilter<\/code> \u2014 \u044d\u0442\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 Entity, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435 Entity, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 \u043d\u0430 \u0441\u0435\u0431\u0435 <code>AnyKeyDownTag<\/code>. \u0412 Update, \u0435\u0441\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439, \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043b\u043e\u0433, \u0447\u0442\u043e \u043d\u0430\u0436\u0430\u0442\u0430 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u043a\u043b\u0430\u0432\u0438\u0448\u0430.<\/p>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0430\u0437\u0430\u0434, \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043c\u0435\u0442\u0438\u043b\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c <code>IEcsIgnoreInFilter<\/code> \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c \u0430\u043b\u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u043a\u0435\u0448\u0435\u0439 \u0432 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0445 \u043f\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0438\u0445 \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0442\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u044b\u043f\u044f\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u0410 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 <code>KeyInputSystem<\/code> \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c <code>AnyKeyDownTag<\/code>. \u041d\u043e \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u043b\u0438. \u0412 \u0438\u0442\u043e\u0433\u0435 <code>_inputFilter<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u043c \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448\u0438. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/commit\/80be39d01ad589a0600a5cec5fc246b5e2611a9a\"><u>\u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u043c\u043c\u0438\u0442\u0435<\/u><\/a>, \u0432\u043d\u0443\u0442\u0440\u0438 <code>EcsStartup<\/code> \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 <code>OneFrame&lt;AnyKeyDownTag>()<\/code><strong><em>. <\/em><\/strong>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 <code>AnyKeyDownTag<\/code><strong><em> <\/em><\/strong>\u0441\u043e \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439.\u00a0<\/p>\n<pre><code class=\"cs\">_systems .OneFrame&lt;AnyKeyDownTag>() .Add(new KeyInputSystem()) .Add(new DemoSystem()) .Init();<\/code><\/pre>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, \u0442\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>EcsSystems<\/code>. \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>EcsWorld<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 DI \u0432\u043e \u0432\u0441\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a <code>EcsSystems<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 <code>private EcsWorld _world = null;<\/code> \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0432\u044b\u043f\u0430\u0434\u0430\u0435\u0442 NRE \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0447\u0435\u0440\u0435\u0437 <em>Add<\/em> \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0438 \u044d\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0438\u0445 \u0438 \u0443\u043a\u0430\u0437\u0430\u043b\u0438. \u0422\u043e \u0435\u0441\u0442\u044c, \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>KeyInputSystem<\/code>, \u0430 \u043f\u043e\u0442\u043e\u043c <code>DemoSystem<\/code>. \u041d\u0443 \u0430 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f <strong><em>OneFrame<\/em><\/strong> \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c \u0432 Run \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u0445.\u00a0<\/p>\n<p><strong>\u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442! <\/strong>\u00a0\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0431\u0435\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u0432 LeoECS \u043e\u043d\u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u044f\u0442 \u0441\u0432\u043e\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043a \u043a\u043e\u043d\u0446\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0434\u0440\u0430 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c\u0438.\u00a0<\/p>\n<p>\u041d\u0443 \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 Unity. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/UnityComponents\/Factories\/PrefabFactory.cs\"><strong><em><u>PrefabFactory<\/u><\/em><\/strong><\/a>. \u042d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u043b\u044f \u0441\u043f\u0430\u0432\u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043c\u0438\u0440\u0430 ECS. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0441\u0435\u0442\u044c \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0441\u0446\u0435\u043d\u044b, \u0438 \u043a \u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0441\u043f\u0430\u0432\u043d\u043e\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class PrefabFactory : MonoBehaviour { private EcsWorld _world;  public void SetWorld(EcsWorld world) { _world = world; }  public void Spawn(SpawnPrefab spawnData) { GameObject gameObject = Instantiate(spawnData.Prefab, spawnData.Position, spawnData.Rotation, spawnData.Parent); var monoEntity = gameObject.GetComponent&lt;MonoEntity>(); if (monoEntity == null)  return; EcsEntity ecsEntity = _world.NewEntity(); monoEntity.Make(ref ecsEntity); } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p><a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/Components\/Common\/SpawnPrefab.cs\"><strong><em><u>SpawnPrefab<\/u><\/em><\/strong><\/a><strong> <\/strong>\u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0441\u043f\u0430\u0432\u043d\u0430<strong>:<\/strong><\/p>\n<pre><code class=\"cs\">public struct SpawnPrefab { public GameObject Prefab; public Vector3 Position; public Quaternion Rotation; public Transform Parent; } <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/Systems\/Spawners\/SpawnSystem.cs\"><strong><em><u>SpawnSystem<\/u><\/em><\/strong><\/a><strong><em>.<\/em><\/strong> \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434 \u044d\u0432\u0435\u043d\u0442 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0430\u0431 (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/Components\/Common\/SpawnPrefab.cs\"><strong><em><u>SpawnPrefab<\/u><\/em><\/strong><\/a>) \u0438 \u043f\u0435\u0440\u0435\u0441\u044b\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0444\u0430\u0431\u0440\u0438\u043a\u0443, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0443\u044e\u0441\u044f \u043d\u0430 \u0441\u0446\u0435\u043d\u0435:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class SpawnSystem : IEcsPreInitSystem, IEcsRunSystem { private EcsWorld _world; private SceneData _sceneData;  private EcsFilter&lt;SpawnPrefab> _spawnFilter = null;  private PrefabFactory _factory;  public void PreInit() { _factory = _sceneData.Factory; _factory.SetWorld(_world); }  public void Run() { if (_spawnFilter.IsEmpty()) { return; }  foreach (int index in _spawnFilter) { ref EcsEntity spawnEntity = ref _spawnFilter.GetEntity(index); var spawnPrefabData = spawnEntity.Get&lt;SpawnPrefab>(); _factory.Spawn(spawnPrefabData); spawnEntity.Del&lt;SpawnPrefab>(); } } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/UnityComponents\/Common\/SceneData.cs\"><strong><u>SceneData<\/u><\/strong><\/a> \u2014 \u044d\u0442\u043e <code>MonoBehaviour<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0446\u0435\u043d\u0435. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u2014 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0443. \u041e\u043d, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0438 <code>PrefabFactory<\/code>, \u0432\u0438\u0441\u0438\u0442 \u043d\u0430 \u0441\u0446\u0435\u043d\u0435 \u0432 Unity:<\/p>\n<p>\u0412 <code>SpawnSystem<\/code> \u043c\u044b \u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 DI, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0432 \u043c\u0435\u0442\u043e\u0434 <code>Inject<\/code> \u0438\u0437 <code>ECSStartup<\/code>:<\/p>\n<pre><code>_systems .OneFrame&lt;AnyKeyDownTag>() .Add(new KeyInputSystem()) .Add(new SpawnSystem()) .Add(new DemoSystem()) .Inject(_sceneData) .Init();<\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432 <code>PreInit<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <code>PrefabFactory<\/code> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0443\u0434\u0430 <code>ECSWorld<\/code>, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u043c\u043e\u0433\u043b\u0430 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0442\u044c <code>World<\/code> \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u0447\u0442\u043e-\u0442\u043e \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0438\u043b\u0430.<\/p>\n<p>\u0412 <code>Run<\/code> \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043f\u0443\u0441\u0442\u043e\u0442\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 <code>_spawnFilter<\/code>, \u0430 \u0435\u0441\u043b\u0438 \u0444\u0438\u043b\u044c\u0442\u0440 \u043d\u0435 \u043f\u0443\u0441\u0442\u043e\u0439 \u2014 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c.<\/p>\n<pre><code class=\"cs\">foreach (int index in _spawnFilter) { ref EcsEntity spawnEntity = ref _spawnFilter.GetEntity(index); var spawnPrefabData = spawnEntity.Get&lt;SpawnPrefab>(); _factory.Spawn(spawnPrefabData); spawnEntity.Del&lt;SpawnPrefab>(); }<\/code><\/pre>\n<p>\u0421\u0430\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043d\u0430 Entity, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c <code>ref _spawnFilter.GetEntity(index);<\/code><strong>\u00a0<\/strong><\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043d\u0430\u0432\u0435\u0448\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 <code>EcsEntity<\/code>, \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f\u00a0 \u043a <code>Get&lt;T>()<\/code>, \u0433\u0434\u0435 <code>T<\/code> \u2014 \u0442\u0438\u043f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0422\u043e \u0435\u0441\u0442\u044c, \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u043e\u0433<strong> <\/strong><code>GetComponent&lt;T>()<\/code> \u0438\u0437 Unity \u0441 \u0442\u043e\u0439 \u043b\u0438\u0448\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0435\u0439, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 <code>GetComponent<\/code><strong> <\/strong>\u0432\u0435\u0440\u043d\u0435\u0442 null \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0442\u043e <code>Get&lt;T><\/code><strong> <\/strong>\u0438\u0437 LeoECS \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438. \u0422\u043e \u0435\u0441\u0442\u044c,. <code>Get&lt;T><\/code><strong> <\/strong>\u0442\u0443\u0442 \u0441\u043a\u043e\u0440\u0435\u0435 <code>GetOrAdd&lt;T>().<\/code><\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043d\u0430\u0448\u0443 \u0444\u0430\u0431\u0440\u0438\u043a\u0443, \u0433\u0434\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u043f\u0440\u0435\u0444\u0430\u0431, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>SpawnPrefab<\/code> \u0441 <code>EcsEntity<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d. \u041e\u0431\u0440\u0430\u0449\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 Entity, \u043e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043d\u0430 \u044d\u0442\u043e\u043c <strong>Entity<\/strong> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u0440\u043e\u043c\u0435 <code>SpawnPrefab<\/code>, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d, \u0442\u0430\u043a \u043a\u0430\u043a <strong>LeoECS<\/strong> \u043d\u0435 \u0442\u0435\u0440\u043f\u0438\u0442 \u043f\u0443\u0441\u0442\u044b\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p><strong>\u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442! <\/strong>\u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0435\u0441\u0442\u044c <strong>MonoEntity<\/strong>. \u042d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 <strong>MonoBehaviour<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0443 \u043d\u0430\u0448\u0438\u0445 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 <code>MonoLinkBase<\/code> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445 \u0432 <strong>ECSWorld<\/strong>. <code>MonoEntity<\/code><strong> <\/strong>\u0441\u0430\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u043e\u043c <code>MonoLinkBase<\/code><strong>.<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class MonoEntity : MonoLinkBase { private EcsEntity _entity;          private MonoLinkBase[] _monoLinks;  public MonoLink&lt;T> Get&lt;T>() where T: struct { foreach (MonoLinkBase link in _monoLinks) { if (link is MonoLink&lt;T> monoLink) { return monoLink; } }  return null; }          public override void Make(ref EcsEntity entity) { _entity = entity;              _monoLinks = GetComponents&lt;MonoLinkBase>(); foreach (MonoLinkBase monoLink in _monoLinks) { if (monoLink is MonoEntity) { continue; } monoLink.Make(ref entity); } } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u0430\u043c \u0436\u0435 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/UnityComponents\/MonoLinks\/MonoLinkBase.cs\"><strong><u>MonoLinkBase<\/u><\/strong><\/a> \u2014 \u044d\u0442\u043e \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0434\u043b\u044f <code>EcsEntity<\/code> \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u0430:<\/p>\n<pre><code class=\"cs\">public abstract class MonoLinkBase : MonoBehaviour { public abstract void Make(ref EcsEntity entity); }<\/code><\/pre>\n<p>\u041d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/UnityComponents\/MonoLinks\/MonoLink.cs\"><u>MonoLink<\/u><\/a>, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 <code>MonoLink<\/code>\u2019\u0438.<\/p>\n<pre><code class=\"cs\">public abstract class MonoLink&lt;T> : MonoLinkBase where T : struct { public T Value;          public override void Make(ref EcsEntity entity) { entity.Get&lt;T>() = Value; } } <\/code><\/pre>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 <code>MonoLink&lt;T><\/code><strong> \u2014<\/strong> \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0432\u044f\u0437\u0443\u044e\u0449\u0435\u0435 \u0437\u0432\u0435\u043d\u043e \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0435\u0444\u0430\u0431\u0430\u043c\u0438 Unity \u0438 \u043c\u0438\u0440\u043e\u043c ECS. \u041e\u0442 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 <strong>MonoBehaviour<\/strong>\u2019\u044b \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/597\/a3c\/b00\/597a3cb00efcc90c415e614b0086e694.png\" width=\"1290\" height=\"432\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/597\/a3c\/b00\/597a3cb00efcc90c415e614b0086e694.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043f\u0440\u0435\u0444\u0430\u0431, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 (\u0438 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0435) \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0431\u044f \u0432 Unity, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u0432\u043e\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 ECS \u043c\u0438\u0440\u0435, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0435\u0444\u0430\u0431 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u043d\u0430 \u0441\u0435\u0431\u0435 <code>MonoEntity<\/code> \u0438 \u043d\u0430\u0431\u043e\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 <code>MonoLink<\/code>\u2019\u043e\u0432, \u0442\u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/054d931098c9d832eddc67ba8289861e45df1e49\/FlappyCube\/Assets\/Scripts\/UnityComponents\/MonoLinks\/UnityBaseComponents\/GameObjectMonoLink.cs\"><strong><em><u>GameObjectMonoLink<\/u><\/em><\/strong><\/a> \u2014 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 <code>GameObject<\/code> \u0438\u0437 <code>ECSWorld<\/code>.<\/p>\n<pre><code class=\"cs\">public class GameObjectMonoLink : MonoLink&lt;GameObjectLink> { public override void Make(ref EcsEntity entity) { entity.Get&lt;GameObjectLink>() = new GameObjectLink { Value = gameObject }; } }<\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0431\u0430\u0437\u0430 \u0433\u043e\u0442\u043e\u0432\u0430, \u0438 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438 \u0441\u0430\u043c\u043e\u0439 \u0438\u0433\u0440\u044b.<\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0438\u0433\u0440\u0443. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/Systems\/Spawners\/SpawnPlayer.cs\"><u>SpawnPlayer<\/u><\/a>:<\/p>\n<pre><code class=\"cs\">public class SpawnPlayer : IEcsInitSystem { private EcsWorld _world = null; private StaticData _sceneData;  public void Init() { _world.NewEntity().Get&lt;SpawnPrefab>() = new SpawnPrefab { Prefab = _sceneData.PlayerPrefab, Position = Vector3.zero, Rotation = Quaternion.identity, Parent = null      }; } }<\/code><\/pre>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>IEcsInitSystem<\/code>, \u0433\u0434\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 Init \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u0432\u0435\u0448\u0438\u0432\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>SpawnPrefab<\/code>, \u0433\u0434\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0430\u0431 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 \u043d\u0443\u043b\u0435\u0432\u044b\u0445, \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439.\u00a0<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0446\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0435\u043d \u044d\u0432\u0435\u043d\u0442, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0430\u0432\u043d\u0430 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0438\u0433\u0440\u043e\u043a\u0430. \u0410 \u0437\u0430\u0442\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043f\u0430\u0432\u043d\u0430 \u043f\u043e\u0434\u0445\u0432\u0430\u0442\u0438\u0442 \u044d\u0442\u043e\u0442 \u044d\u0432\u0435\u043d\u0442, \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0430\u0431, \u0438 \u0438\u0433\u0440\u0430 \u043f\u043e\u0439\u0434\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>\u041d\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0440\u0435\u043c \u043f\u0440\u0435\u0444\u0430\u0431? \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u0437\u044f\u0442\u044c \u0438\u0437 <code>SceneData<\/code>, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u0432\u0435\u0441\u0442\u0438 \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/UnityComponents\/Common\/StaticData.cs\"><u>StaticData<\/u><\/a>:<\/p>\n<pre><code class=\"cs\">[CreateAssetMenu(menuName = \"Config\/StaticData\", fileName = \"StaticData\", order = 0)] public class StaticData : ScriptableObject { public GameObject PlayerPrefab; }<\/code><\/pre>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0442\u0430\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0435\u0444\u0430\u0431 \u0438\u0433\u0440\u043e\u043a\u0430, \u043d\u043e \u0442\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u0432 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/9b6a5fde4d0d1e7750e45d64505ff76d91ae8e5d\/FlappyCube\/Assets\/Scripts\/EcsStartup.cs\"><u>ECSStartup<\/u><\/a> \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 DI.<\/p>\n<pre><code class=\"cs\">_systems .OneFrame&lt;AnyKeyDownTag>()   .Add(new KeyInputSystem())   .Add(new SpawnPlayer())   .Add(new SpawnSystem())   .Add(new DemoSystem())   .Inject(_staticData)   .Inject(_sceneData)   .Init();<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u043d\u0430\u0448\u0430 \u0438\u0433\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u0430\u0432\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0444\u0430\u0431 \u0438\u0433\u0440\u043e\u043a\u0430 \u0438 \u0441\u043f\u0430\u043c\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448. \u0422\u0430\u043a \u0447\u0442\u043e \u0438\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435.<\/p>\n<p>\u0412 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/commit\/1883d744dad108fb4a46e5bf3ac5ea105ef47866\"><u>\u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043c\u0438\u0442\u0435<\/u><\/a> \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0434\u043b\u044f \u043d\u0438\u0445 MonoLink\u2019\u043e\u0432. \u042d\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043a\u0430\u043a:<\/p>\n<ul>\n<li>\n<p><code>GameObjectMonoLink : MonoLink&lt;GameObjectLink><\/code><\/p>\n<\/li>\n<li>\n<p><code>RBMonoLink : MonoLink&lt;RigidbodyLink><\/code><\/p>\n<\/li>\n<li>\n<p><code>PlayerTagMonoLink : MonoLink&lt;PlayerTag><\/code><\/p>\n<\/li>\n<li>\n<p><code>GravitationalMonoLink : MonoLink&lt;Gravitational><\/code><\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435, \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u0435\u0447\u0430\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u043c\u0438, \u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u044f \u044d\u0442\u043e \u0432\u0441\u0435 \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c\u0435\u0440\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u0432 Unity:<\/p>\n<pre><code class=\"cs\">[Serializable] public struct Position { public Vector3 Value; }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438\u0437 LeoECS.<\/p>\n<p>\u041a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448 \u043a\u0443\u0431? \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u043d\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044f, \u043f\u043e\u0442\u043e\u043c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u0443\u0431 \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u043c\u0438\u0440\u0435 Unity. \u042d\u0442\u043e \u0442\u0440\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<ol>\n<li>\n<p>GravitationSystem<\/p>\n<\/li>\n<li>\n<p>MoveSystem<\/p>\n<\/li>\n<li>\n<p>UpdateRigidbodyPosition<\/p>\n<\/li>\n<\/ol>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u0443 \u043d\u0438\u0445 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<p>1. <code>GravitationSystem<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Velocity \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0442\u043e\u0433\u043e, \u043a\u0443\u0434\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043a\u043e \u0432\u0441\u0435\u043c Entity \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0438\u0441\u0438\u0442 Gravitational-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<pre><code class=\"cs\">public class GravitationSystem : IEcsRunSystem { private StaticData _staticData;  private EcsFilter&lt;Gravitational> _filter = null;  public void Run() { var deltaTime = Time.fixedTime; foreach (int index in _filter) { ref EcsEntity entity = ref _filter.GetEntity(index);  ref Velocity velocity = ref entity.Get&lt;Velocity>();  velocity.Value -= _staticData.GlobalGravitation * deltaTime; } } } <\/code><\/pre>\n<p>2. <code>MoveSystem<\/code> \u0431\u0435\u0440\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b Velocity \u0438 \u0437\u0430\u0434\u0430\u0435\u0442 \u0434\u043b\u044f \u043d\u0438\u0445 \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e:<\/p>\n<pre><code class=\"cs\">public class MoveSystem : IEcsRunSystem { private EcsFilter&lt;Velocity> _filter = null;  public void Run() { foreach (int index in _filter) { ref EcsEntity entity = ref _filter.GetEntity(index); ref Position position = ref entity.Get&lt;Position>(); Velocity velocity = _filter.Get1(index);  position.Value += velocity.Value; } } }<\/code><\/pre>\n<p>3. <code>UpdateRigidbodyPosition<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0434\u043b\u044f <code>Rigidbody<\/code> \u0432\u0441\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u044e\u0442 <code>RigidbodyLink<\/code> \u0438 <code>Position<\/code>. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0430\u043c\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043c\u0438\u0440\u0435 Unity.<\/p>\n<pre><code class=\"cs\">public class UpdateRigidbodyPosition : IEcsRunSystem { private EcsFilter&lt;RigidbodyLink, Position> _filter = null;  public void Run() { if (_filter.IsEmpty()) { return; }  foreach (int index in _filter) { ref RigidbodyLink rigidbody = ref _filter.Get1(index); var newPosition = _filter.Get2(index);  rigidbody.Value.MovePosition(newPosition.Value); } } }<\/code><\/pre>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/0b245e2fcc0ed1b3a4c65846c114c1f052a48b68\/FlappyCube\/Assets\/Scripts\/EcsStartup.cs\"><u>ECSStartup<\/u><\/a>.<\/p>\n<p>\u041d\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0433\u0440\u0443\u043f\u043f\u0443 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432 <code>FixedUpdate()<\/code><strong>, <\/strong>\u0442\u0430\u043a \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c:<\/p>\n<pre><code class=\"cs\">private EcsSystems _fixedSystem;<\/code><\/pre>\n<p>\u0418 \u0432 <code>Start()<\/code><strong> <\/strong>\u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043d\u0430\u0448\u0438 \u043d\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<pre><code class=\"cs\">_fixedSystem = new EcsSystems(_world);  _fixedSystem .Add(new GravitationSystem()) .Add(new MoveSystem()) .Add(new UpdateRigidbodyPosition()) .Inject(_staticData) .Init();<\/code><\/pre>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u0432 \u0432\u044b\u0437\u043e\u0432 <code>Run<\/code> \u0432 <code>FixedUpdate()<\/code>.<\/p>\n<pre><code class=\"cs\">private void FixedUpdate() { _fixedSystem?.Run(); }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438 <code>EcsSystemsObserver<\/code> \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0432 Editor\u2019e:<\/p>\n<pre><code class=\"cs\">Leopotam.Ecs.UnityIntegration.EcsSystemsObserver.Create(_fixedSystem);<\/code><\/pre>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u0435\u0444\u0430\u0431 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u0433\u0440\u043e\u043a\u0430, \u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u0430\u0448 \u043a\u0443\u0431\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u0434\u0430\u0442\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ac1\/705\/629\/ac1705629cd24632395bcefd37e9a21e.png\" width=\"854\" height=\"1072\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ac1\/705\/629\/ac1705629cd24632395bcefd37e9a21e.png\"\/><figcaption><\/figcaption><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bc7\/3f5\/0c3\/bc73f50c3f5dedd696e0ac5f07fcae75.gif\" width=\"400\" height=\"530\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bc7\/3f5\/0c3\/bc73f50c3f5dedd696e0ac5f07fcae75.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0430 \u043f\u0440\u044b\u0433\u0430\u0442\u044c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/896fd69cf6e03e76b12d08d9460f548af10a2135\/FlappyCube\/Assets\/Scripts\/Systems\/InputSystems\/KeyInputSystem.cs\"><strong><em><u>KeyInputSystem<\/u><\/em><\/strong><\/a>:<\/p>\n<pre><code class=\"cs\">public class KeyInputSystem : IEcsRunSystem { private EcsWorld _world = null; private EcsFilter&lt;PlayerTag> _filter = null;  public void Run() { var isHasInput = Input.anyKeyDown; if (!isHasInput) { return; }  foreach (int index in _filter) { ref EcsEntity entity = ref _filter.GetEntity(index); entity.Get&lt;AnyKeyDownTag>(); } } } <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441 \u0442\u0435\u0433\u043e\u043c \u00ab\u0438\u0433\u0440\u043e\u043a\u00bb (<code>PlayerTag<\/code>) \u0438 \u0432\u0435\u0448\u0430\u0442\u044c \u043d\u0430 \u043d\u0438\u0445 <code>AnyKeyDownTag<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/896fd69cf6e03e76b12d08d9460f548af10a2135\/FlappyCube\/Assets\/Scripts\/Systems\/InputSystems\/AddVelocityInputSystem.cs\"><strong><em><u>AddVelocityInputSystem<\/u><\/em><\/strong><\/a>:<\/p>\n<pre><code class=\"cs\">public class AddVelocityInputSystem : IEcsRunSystem { private StaticData _staticData; private EcsFilter&lt;AnyKeyDownTag> _filter = null;  public void Run() { foreach (int index in _filter) { ref EcsEntity entity = ref _filter.GetEntity(index); ref Velocity velocity = ref entity.Get&lt;Velocity>(); velocity.Value += _staticData.PlayerAddForce; }  } } <\/code><\/pre>\n<p>\u0421\u0430\u043c\u0430 <code>AddVelocityInputSystem<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0441 <code>AnyKeyDownTag<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u0438\u0445 Velocity \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0438\u0437 \u0441\u0442\u0430\u0442\u0438\u043a\u0438 \u2014 <code>_staticData.PlayerAddForce<\/code>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u0433\u0440\u0443, \u043a\u0443\u0431 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u044b\u0433\u0430\u0442\u044c, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0435 \u0432 <code>ECSStartup<\/code>.<\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u2014 \u043f\u043e\u043c\u043d\u0438\u0442\u0435, \u044f \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u043e\u0431 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 ECS? \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/0b959cd7027118dcccf81900559cfe0d6dcb759e\/FlappyCube\/Assets\/Scripts\/Systems\/Spawners\/ObstacleSpawner.cs\"><u>ObstacleSpawner<\/u><\/a>. \u042d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0437 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0432\u0435\u043d\u0442 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0441\u043f\u0430\u0432\u043d\u0438\u0442\u044c, \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043f\u0430\u0432\u043d\u0430 \u0443\u0436\u0435 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0430\u043c\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class ObstacleSpawner : IEcsInitSystem, IEcsRunSystem { private StaticData _staticData; private SceneData _sceneData; private EcsWorld _world = null;  private float _spawnDelay; private float _lastTime;  public void Init() { _spawnDelay = _staticData.SpawnTimer; }  public void Run() { _lastTime += Time.deltaTime; if (_lastTime > _spawnDelay) { _world.NewEntity().Get&lt;SpawnPrefab>() = new SpawnPrefab { Prefab = _staticData.ObstaclePrefab, Position = _sceneData.SpawnObstaclePosition.position, Rotation = Quaternion.identity, Parent = _sceneData.SpawnObstaclePosition }; _lastTime -= _spawnDelay; } } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0441\u043f\u0430\u0432\u043d\u0438\u0442\u044c\u0441\u044f, \u043d\u043e \u043d\u0435 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f\u2026\u00a0<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1a4\/dea\/faf\/1a4deafaf940b1169efea223a166e8ad.gif\" width=\"400\" height=\"530\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1a4\/dea\/faf\/1a4deafaf940b1169efea223a166e8ad.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u043d\u0430 \u043f\u0440\u0435\u0444\u0430\u0431 <code>VelocityMonoLink<\/code> \u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438 \u0430\u043f\u0434\u0435\u0439\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 RB \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0442\u044f\u043d\u0435\u0442 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f\u0445 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 <code>Gravity<\/code> \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0430\u0434\u0430\u0442\u044c, \u0430 \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0432 \u043f\u0440\u0435\u0444\u0430\u0431\u0435.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/06a\/af1\/1c9\/06aaf11c994a8a0758fc5f7bda4469a0.gif\" width=\"400\" height=\"530\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/06a\/af1\/1c9\/06aaf11c994a8a0758fc5f7bda4469a0.gif\"\/><figcaption><\/figcaption><\/figure>\n<h3>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0444\u0438\u0437\u0438\u043a\u043e\u0439<\/h3>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, <strong><em>\u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0444\u0438\u0437\u0438\u043a\u043e\u0439<\/em><\/strong> \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043c\u0435\u0440\u0442\u0438 \u0430\u0432\u0430\u0442\u0430\u0440\u0430 \u0438\u0433\u0440\u043e\u043a\u0430.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0434\u043e\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f ECS \u043a\u0430\u043a \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0423 \u043d\u0430\u0441 \u044d\u0442\u043e <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/c4993681a2037156225542e684571c81c53cb9a7\/FlappyCube\/Assets\/Scripts\/Components\/PhysicsEvents\/OnCollisionEnterEvent.cs\"><u>OnCollisionEnterEvent<\/u><\/a> \u0438 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/c4993681a2037156225542e684571c81c53cb9a7\/FlappyCube\/Assets\/Scripts\/Components\/PhysicsEvents\/OnTriggerEnterEvent.cs\"><u>OnTriggerEnterEvent<\/u><\/a>. \u0414\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u044d\u0432\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/c4993681a2037156225542e684571c81c53cb9a7\/FlappyCube\/Assets\/Scripts\/UnityComponents\/MonoLinks\/Base\/PhysicsLinkBase.cs\"><u>PhysicsLinkBase<\/u><\/a>\u00a0 \u2014 \u044d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c\u00a0 \u0432 \u043c\u0438\u0440 ECS \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u044d\u0432\u0435\u043d\u0442\u044b:<\/p>\n<pre><code class=\"cs\">public abstract class PhysicsLinkBase : MonoLinkBase { protected EcsEntity _entity; public override void Make(ref EcsEntity entity) { _entity = entity; } }<\/code><\/pre>\n<p>\u041e\u0442 \u043d\u0435\u0433\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/c4993681a2037156225542e684571c81c53cb9a7\/FlappyCube\/Assets\/Scripts\/UnityComponents\/MonoLinks\/PhysicsLinks\/OnCollisionEnterMonoLink.cs\"><u>OnCollisionEnterMonoLink<\/u><\/a> \u0438 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/c4993681a2037156225542e684571c81c53cb9a7\/FlappyCube\/Assets\/Scripts\/UnityComponents\/MonoLinks\/PhysicsLinks\/OnTriggerEnterMonoLink.cs\"><u>OnTriggerEnterMonoLink<\/u><\/a>. \u0412\u0441\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u0435\u043b\u0430\u044e\u0442 \u2014 \u044d\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044f \u0438\u0445 \u043a Entity. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>OnCollisionEnterMonoLink<\/code> \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">public class OnCollisionEnterMonoLink : PhysicsLinkBase { public void OnCollisionEnter(Collision other) { _entity.Get&lt;OnCollisionEnterEvent>() = new OnCollisionEnterEvent { Collision = other, Sender = gameObject }; } }<\/code><\/pre>\n<p>\u0410 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>OnTriggerEnterMonoLink<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e: <\/p>\n<pre><code class=\"cs\">public class OnTriggerEnterMonoLink : PhysicsLinkBase { private void OnTriggerEnter(Collider other) { _entity.Get&lt;OnTriggerEnterEvent>() = new OnTriggerEnterEvent() { Collider = other, Sender = gameObject }; } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 2 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430 \u0441\u0435\u0431\u0435 \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440, \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0432 <code>ECSWorld<\/code> \u043d\u0430 <strong>Entity<\/strong> \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d <code>OnCollisionEnterMonoLink<\/code> \u0438\u043b\u0438 <code>OnTriggerEnterMonoLink<\/code>, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f <code>OnCollisionEnterEvent<\/code><strong> <\/strong>\u0438 <code>OnTriggerEnterEvent<\/code>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0435\u043d\u043d\u043e. \u0418 \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>\u0414\u043b\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/054d931098c9d832eddc67ba8289861e45df1e49\/FlappyCube\/Assets\/Scripts\/Systems\/CoreSystems\/BaseGameplay\/ObstacleCollisionCheckerSystem.cs\"><u>ObstacleCollisionCheckerSystem<\/u><\/a>. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f PlayerTag \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u044b \u043a\u0430\u043a <code>ObstacleTagMonoLink<\/code> (<code>ObstacleTag<\/code> \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u043c\u0435\u0442\u043a\u0438 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439) \u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0447\u0435\u0440\u0435\u0437 <code>OnObstacleCollisionEvent<\/code><strong>.<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class ObstacleCollisionCheckerSystem : IEcsRunSystem { private EcsWorld _world = null; private EcsFilter&lt;PlayerTag, OnCollisionEnterEvent> _filter = null;  public void Run() { if (_filter.IsEmpty()) { return; }  foreach (int index in _filter) { ref EcsEntity entity = ref _filter.GetEntity(index); var onCollisionEnterEvent = entity.Get&lt;OnCollisionEnterEvent>();  GameObject collisionGameObject = onCollisionEnterEvent.Collision.gameObject; var obstacle = collisionGameObject.GetComponent&lt;ObstacleTagMonoLink>(); if (obstacle == null)  continue;  EcsEntity obstacleCollision = _world.NewEntity(); obstacleCollision.Get&lt;OnObstacleCollisionEvent>(); } } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043c\u0435\u0440\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/d9459fc5ce85fee4ecc025a56471fc743b5e1e7b\/FlappyCube\/Assets\/Scripts\/Systems\/CoreSystems\/BaseGameplay\/DeadByObstacleCollisionSystem.cs\"><u>DeadByObstacleCollisionSystem<\/u><\/a>. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0436\u0438\u0437\u043d\u0438 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0441\u0442\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u043e\u043c \u0438\u0433\u0440\u043e\u043a\u0430 \u0441 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435\u043c \u0438 \u0441\u043c\u0435\u0440\u0442\u044c\u044e. \u0422\u0443\u0442 \u0441\u0442\u043e\u0438\u0442 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u043d\u0435\u043a\u0442\u0430 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u0441 \u0438\u0433\u0440\u043e\u043a\u043e\u043c:<\/p>\n<pre><code class=\"cs\">public class DeadByObstacleCollisionSystem : IEcsRunSystem { private EcsWorld _world = null; private EcsFilter&lt;OnObstacleCollisionEvent> _filter = null;  public void Run() { if (!_filter.IsEmpty()) { _world.NewEntity().Get&lt;DeadEvent>(); } } }<\/code><\/pre>\n<p>\u0417\u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u043c\u0435\u0440\u0442\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/d9459fc5ce85fee4ecc025a56471fc743b5e1e7b\/FlappyCube\/Assets\/Scripts\/Systems\/CoreSystems\/BaseGameplay\/DeadCheckerGameplaySystem.cs\"><strong><u>DeadCheckerGameplaySystem<\/u><\/strong><\/a>. \u041e\u043d \u0436\u0434\u0435\u0442 <code>DeadEvent<\/code> \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043c\u0438\u0440\u0443, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0433\u0440\u0443 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443 \u0447\u0435\u0440\u0435\u0437 <code>GameProgress<\/code>.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class DeadCheckerGameplaySystem : IEcsInitSystem, IEcsRunSystem { private EcsWorld _world = null; private EcsFilter&lt;DeadEvent> _deadFilter = null; private EcsFilter&lt;GameProgress> _gameProgress;  public void Init() { _world.NewEntity().Get&lt;GameProgress>() = new GameProgress {       IsPause = false     };   }    public void Run()   {     if (_deadFilter.IsEmpty())      return;      foreach (int index in _gameProgress)     {       ref GameProgress progress = ref _gameProgress.Get1(index);       progress.IsPause = true;       Debug.Log(\"Cube is dead\");     } } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0430\u0432\u044f\u0442 \u0438\u0433\u0440\u0443 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u0441\u043c\u0435\u0440\u0442\u0438 \u043a\u0443\u0431\u0438\u043a\u0430 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c.<\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u0432\u043b\u0435\u0447\u044c\u0441\u044f \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c. \u0421\u0435\u0439\u0447\u0430\u0441 \u0443 \u043d\u0430\u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u0441\u0435 \u0432 \u0434\u0432\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e. \u0422\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u0438 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f. \u0418 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u043d\u0443\u0442\u0440\u0438 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/d9459fc5ce85fee4ecc025a56471fc743b5e1e7b\/FlappyCube\/Assets\/Scripts\/EcsStartup.cs\"><u>EcsStartup<\/u><\/a>.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u0438\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">private EcsSystems SpawnSystems() {   return new EcsSystems(_world)     .Add(new SpawnPlayer())     .Add(new ObstacleSpawner())     .Add(new SpawnSystem());; }  private EcsSystems InputSystems() {   return new EcsSystems(_world)     .OneFrame&lt;AnyKeyDownTag>()     .Add(new KeyInputSystem())     .Add(new AddVelocityInputSystem())     .Add(new ClampVelocitySystem());; }  private EcsSystems MovableSystems() {   return new EcsSystems(_world)     .Add(new GravitationSystem())     .Add(new MoveSystem())     .Add(new UpdateRigidbodyPosition()); }  private EcsSystems CoreGameplaySystems() {   return new EcsSystems(_world)     .OneFrame&lt;OnObstacleCollisionEvent>()     .Add(new ObstacleCollisionCheckerSystem())     .OneFrame&lt;DeadEvent>()     .Add(new DeadByObstacleCollisionSystem())     .Add(new DeadCheckerGameplaySystem()); }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0410 \u0437\u0430\u0442\u0435\u043c, \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>Start<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u043d\u0430\u0448\u0438 <code>EcsSystems _systems<\/code> \u0438 <code>_fixedSystem<\/code>.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043e\u043f\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u0435 \u0434\u0440\u0443\u0433\u0443\u044e.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">EcsSystems inputSystems = InputSystems(); EcsSystems spawnSystems = SpawnSystems();  _systems .Add(inputSystems)   .Add(spawnSystems)   .Inject(_staticData)   .Inject(_sceneData)   .Init();  EcsSystems coreSystems = CoreGameplaySystems(); EcsSystems movableSystems = MovableSystems();  _fixedSystem   .Add(movableSystems)   .Add(coreSystems)   .OneFrame&lt;OnCollisionEnterEvent>()   .Inject(_staticData)   .Init();<\/code><\/pre>\n<\/div>\n<\/details>\n<h3>\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 UI<\/h3>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u0438 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ECS\u00a0 \u2014 \u044d\u0442\u043e \u0442\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 UI.<\/p>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u043d\u0430 \u0432\u043e\u043e\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438\u0434\u0435\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 MonoLink\u2019a\u043c\u0438, \u043d\u043e \u0430\u0432\u0442\u043e\u0440\u044b LeoECS \u0432\u044b\u043a\u0430\u0442\u0438\u043b\u0438 \u0441\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 <a href=\"https:\/\/github.com\/Leopotam\/ecs-ui\"><strong><u>EcsUI<\/u><\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 UnityUI. \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043a\u043e\u043c\u0443-\u0442\u043e \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0443 \u043d\u0430\u0441 \u0432 \u0438\u0433\u0440\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u0438\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/d52c431def05b50ae60ba40647b912a98f08c72e\/FlappyCube\/Assets\/Scripts\/UnityComponents\/UI\/GameHud.cs\"><u>GameHud<\/u><\/a>. \u0422\u0443\u0442 \u0432\u0441\u0435 \u043a\u0430\u043a \u0432 \u00ab\u043e\u0431\u044b\u0447\u043d\u043e\u0439\u00a0 Unity\u00bb: \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0439 \u2014 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430\u00a0 UI-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u0412 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/d52c431def05b50ae60ba40647b912a98f08c72e\/FlappyCube\/Assets\/Scripts\/UnityComponents\/Common\/SceneData.cs\"><u>SceneData<\/u><\/a> \u043c\u044b, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0441\u0441\u044b\u043b\u043e\u0447\u043a\u0443 \u043d\u0430 \u043d\u0435\u0433\u043e.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class GameHud : MonoBehaviour {   private const string SceneName = \"SampleScene\";   public GameObject StartGame;   public GameObject GameOver;   public TMP_Text Score;   public string FormatScore = \"Score: {0}\";    public void Awake()   {     StartGame.SetActive(true);     GameOver.SetActive(false);     Score.gameObject.SetActive(false);   }    public void OnStartGameClick()   {     StartGame.SetActive(false);     Score.gameObject.SetActive(true);   }    public void ShowGameOver()   {     GameOver.SetActive(true);   }    public void OnNewGameClick()   {     SceneManager.LoadScene(SceneName);   }    public void SetScore(int value)   {     Score.text = string.Format(FormatScore, value);   } } <\/code><\/pre>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/aa4\/b59\/12d\/aa4b5912d636300038257aa20102e001.png\" width=\"662\" height=\"1118\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/aa4\/b59\/12d\/aa4b5912d636300038257aa20102e001.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u0432\u0435\u0440\u0441\u0442\u0430\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u044d\u043a\u0440\u0430\u043d \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u0438 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430.\u00a0<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <a href=\"https:\/\/github.com\/Leopotam\/ecs-ui\"><strong><u>EcsUI<\/u><\/strong><\/a>. \u0415\u0433\u043e \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430. \u0415\u0441\u0442\u044c <code>EcsUiEmitter<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441 ECSWorld, \u0438 \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>EcsUiClickAction<\/code><strong> <\/strong>\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0432\u0435\u043d\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 UI \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c <code>EcsUiEmitter<\/code><strong> <\/strong>\u043d\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>ECSSturtup<\/code>. \u0418 \u0435\u0433\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u043c\u0438\u0442\u0435\u0440\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 <code>Action<\/code><strong>.<\/strong><\/p>\n<p>\u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0437\u0430\u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. <\/p>\n<pre><code class=\"cs\">_systems.InjectUi(_uiEmitter)<\/code><\/pre>\n<p>\u041d\u0430 \u0441\u0430\u043c\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430\u0432\u0435\u0441\u0438\u043c MonoBehaviour <code>EcsUiClickAction<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0438\u0437 <a href=\"https:\/\/github.com\/Leopotam\/ecs-ui\"><strong><u>EcsUI<\/u><\/strong><\/a>.\u00a0<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u044c Entity \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c <code>EcsUiClickEvent<\/code>, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043c\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u044d\u0432\u0435\u043d\u0442. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/054d931098c9d832eddc67ba8289861e45df1e49\/FlappyCube\/Assets\/Scripts\/Systems\/UISystems\/UIGameProgressSystem.cs\"><u>UIGameProgressSystem<\/u><\/a>. \u0418\u0434\u0435\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u044d\u0432\u0435\u043d\u0442 \u043e \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u044b\u043b \u044d\u0432\u0435\u043d\u0442 \u043d\u0430 \u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u0430 (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0430\u043c\u043e\u043c <code>EcsUiClickAction<\/code><strong>)<\/strong>, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0438\u043c\u0435\u043d\u0438, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0432 <code>StartGameBtn<\/code>, \u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0430\u0443\u0437\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cs\">public class UIGameProgressSystem : IEcsRunSystem {   private const string Startgamebtn = \"StartGameBtn\";    private PauseService _pauseService;   private EcsFilter&lt;EcsUiClickEvent> _filter = null;   private EcsFilter&lt;GameProgress> _filterGameProgress = null;    public void Run()   {     foreach (int index in _filter)     {       EcsUiClickEvent click = _filter.Get1(index);       if (click.WidgetName.Equals(Startgamebtn))       {         ref GameProgress gameProgress = ref _filterGameProgress.Get1(0);         gameProgress.IsPause = false;         _pauseService.ResetPause();       }     }   } }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430 \u0438\u0433\u0440\u044b \u043f\u0440\u0438 \u0441\u043c\u0435\u0440\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0447\u043a\u043e\u0432 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a <code>TMP_Text<\/code> \u043a\u043e\u0433\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/054d931098c9d832eddc67ba8289861e45df1e49\/FlappyCube\/Assets\/Scripts\/Systems\/CoreSystems\/BaseGameplay\/ScoreCounterSystem.cs\"><u>ScoreCounterSystem<\/u><\/a> \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c <code>OnObstacleExit<\/code>, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u0439 <a href=\"https:\/\/github.com\/Red-Cat-Fat\/DemoLeoEcs\/blob\/054d931098c9d832eddc67ba8289861e45df1e49\/FlappyCube\/Assets\/Scripts\/Systems\/CoreSystems\/BaseGameplay\/ObstacleTriggerEnterCheckerSystem.cs\"><u>ObstacleTriggerEnterCheckerSystem<\/u><\/a>.<\/p>\n<h3>\u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0442\u0438\u043f\u0438\u0447\u043d\u0430\u044f \u0434\u0432\u0438\u0436\u043a\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 ECS.<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u2014 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u0432 \u0440\u0443\u043a\u0430\u0445, \u043a\u043e\u0433\u0434\u0430 \u0442\u044b \u043f\u0438\u0448\u0435\u0448\u044c \u043d\u0430 ECS, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0434\u0440\u043e\u0431\u0438\u0442\u044c \u0438\u0433\u0440\u0443 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0447\u0442\u043e \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0445 \u043f\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c code review, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u0441 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u044b \u0434\u0435\u043b\u0430\u0435\u0442\u0435.\u00a0<\/p>\n<p>\u041d\u043e \u0441 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u0445. \u0421 \u043e\u043f\u044b\u0442\u043e\u043c \u0432\u044b \u043d\u0430\u0447\u043d\u0442\u0435 \u043b\u0443\u0447\u0448\u0435 \u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0430 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442.\u00a0<\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435, \u0441 \u0447\u0435\u043c \u0432\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0435\u0441\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 ECS, \u2014 \u044d\u0442\u043e \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 brain shift\u2019\u0430, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u0439 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u044d\u0442\u043e \u0443\u0448\u043b\u0430 \u043d\u0435\u0434\u0435\u043b\u044f-\u043f\u043e\u043b\u0442\u043e\u0440\u044b. \u041f\u0435\u0440\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u044f \u043e\u0447\u0435\u043d\u044c \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0442\u0440\u0430\u0434\u0430\u043b. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u043e\u0441\u043e\u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e, \u0432\u044b \u0432\u0440\u044f\u0434 \u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0442 \u043d\u0435\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u0430\u0441 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 ECS, \u0438 \u0432\u044b \u0437\u0430\u0433\u043e\u0440\u0435\u043b\u0438\u0441\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435\u043c \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0441\u0432\u043e\u0435 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435. <\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/590953\/\"> https:\/\/habr.com\/ru\/articles\/590953\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0442! \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u043f\u0435\u0440\u0432\u0430\u044f \u0432 \u0431\u043b\u043e\u0433\u0435 MY.GAMES, \u043c\u0435\u0436\u0434\u0443\u043d\u0430\u0440\u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f \u0432\u0438\u0434\u0435\u043e\u0438\u0433\u0440. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u043c \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u0443 \u0432\u0441\u0435\u0445 14 \u043d\u0430\u0448\u0438\u0445 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0441\u0442\u0443\u0434\u0438\u0439. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043a\u0443\u0445\u043d\u0435 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b MY.GAMES, \u043d\u043e \u0438 \u043e \u0442\u043e\u043c, \u0447\u0435\u043c \u0436\u0438\u0432\u0435\u0442 \u0433\u0435\u0439\u043c\u0434\u0435\u0432 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 \u0438 \u043c\u0438\u0440\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c, \u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0440\u0435\u043d\u0434\u0430\u0445 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u044f\u0445 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438.\u00a0<\/p>\n<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0410\u043d\u0434\u0440\u0435\u0439 \u0411\u043e\u0440\u043e\u043d\u043d\u0438\u043a\u043e\u0432, \u0438 \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0441\u0442\u0443\u0434\u0438\u0438 <a href=\"https:\/\/it-territory.ru\/ru\/about\"><u>IT Territory<\/u><\/a>, \u0433\u0434\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0441\u044c <a href=\"https:\/\/habr.com\/ru\/company\/vk\/blog\/573298\/\">\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432<\/a>. \u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u043a \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u043c\u044b \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043b\u0438 \u043e \u0442\u0430\u043a\u043e\u043c \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435, \u043a\u0430\u043a Entity Component System. \u041e \u043d\u0435\u043c \u0443\u0436\u0435 \u043c\u043d\u043e\u0433\u043e\u0435 \u0431\u044b\u043b\u043e \u0440\u0430\u043d\u044c\u0448\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u043d\u043e \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e.\u00a0<\/p>\n<p>\u041e \u0447\u0435\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c?<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c, \u043a\u0443\u0434\u0430 \u0432 \u043e\u0431\u0449\u0435\u043c \u0438 \u0446\u0435\u043b\u043e\u043c \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f Unity \u0438 \u0437\u0430\u0447\u0435\u043c \u0438\u043c Data Orientation System. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b ECS, \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u043d\u0443\u0436\u0435\u043d, \u043a\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f ECS \u0432 \u0438\u0433\u0440\u0430\u0445.<\/p>\n<hr\/>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<h3>\u041a\u0443\u0434\u0430 \u043a\u0430\u0442\u0438\u0442\u0441\u044f Unity?<\/h3>\n<p>\u0412\u043e\u043e\u0431\u0449\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0431\u0443\u043c \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f ECS \u043d\u0430\u0447\u0430\u043b\u0441\u044f \u0432 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f Unity Technologies \u043e\u0431\u044a\u044f\u0432\u0438\u043b\u0430 \u043e \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u0438\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0433\u0440 \u043d\u0430 \u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u0435. \u041d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438?<\/p>\n<p>Unity Technologies \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0432\u0438\u0436\u043e\u043a \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043b\u044e\u0431\u044b\u0445 \u0438\u0433\u0440: \u043e\u0442 \u043a\u0430\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0445 match-3 \u0434\u043e \u0444\u043e\u0442\u043e\u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u044b\u0445 AAA-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>Unity \u0441\u0442\u0430\u0440\u0430\u0435\u0442\u0441\u044f \u0443\u0433\u043e\u0434\u0438\u0442\u044c \u043d\u0443\u0436\u0434\u0430\u043c \u0432\u0441\u0435\u0445, \u0434\u0430\u0442\u044c \u043b\u044e\u0434\u044f\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0438 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0430\u0434 \u0441\u0432\u043e\u0438\u043c \u0434\u0432\u0438\u0436\u043a\u043e\u043c. \u0410 \u043f\u043e\u0442\u043e\u043c\u0443 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0435\u043d\u0430 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u0434\u0432\u0443\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445:<\/p>\n<ol>\n<li>\n<p>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0433\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u0433\u0440\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418 \u0435\u0441\u043b\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u0433\u0440\u044b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0442\u0443\u0434\u0438\u0439, \u0442\u043e \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u0433\u0440\u044b Unity \u043a\u0430\u043a \u0440\u0430\u0437-\u0442\u0430\u043a\u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0447\u044c.<\/p>\n<p><strong><em>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0433\u0440\u0443?<\/em><\/strong>\u00a0<\/p>\n<p>Unity Technologies \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0430 \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p><em>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/em>: \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0442\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0433\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p><em>\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/em>, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432 \u0434\u0432\u0443\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044f\u0445, \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0441\u043a\u043e\u0440\u044f\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u0438\u0433\u0440\u044b;<\/p>\n<\/li>\n<li>\n<p><em>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438<\/em>, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u0448\u0438\u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 Unity \u0432\u0441\u0435 \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0449\u0438\u0445 <strong>Data-Oriented Tech Stack<\/strong> \u2014 \u043d\u0430\u0431\u043e\u0440 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439, \u0446\u0435\u043b\u044c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ul>\n<li>\n<p><strong>Burst Compiler<\/strong> \u2014 \u044d\u0442\u043e \u043d\u043e\u0432\u0430\u044f \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u0430 LLVM \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f \u0431\u044d\u043a\u0435\u043d\u0434-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043a\u043e\u0434 C# \u0432 \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041e\u043d\u0430 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 Unity \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0438\u0436\u043e\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u0434\u0430, \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0442\u043e\u043a\u0438, Unity \u0432\u044b\u043f\u0443\u0441\u0442\u0438\u043b\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <strong>Job System<\/strong>. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041d\u043e \u043f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041f\u043e \u044d\u0442\u043e\u043c \u0430\u0441\u043f\u0435\u043a\u0442\u0435 Unity \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438\u0433\u0440 \u0442\u0430\u043a\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u043a\u0430\u043a <strong>Entity Component System<\/strong>. Unity \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0430\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0438 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0438, \u2014 \u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043e \u0447\u0435\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b ECS \u0438 \u0437\u0430\u0447\u0435\u043c \u043e\u043d \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<h3>\u0422\u0430\u043a \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 ECS?<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u043a\u0430\u043a \u0443\u0436\u0435 \u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u043e \u0432\u044b\u0448\u0435, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 ECS \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439: <em>Entity<\/em>,<em> Component<\/em> \u0438 <em>System<\/em> \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0442\u0440\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u0441\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b.\u00a0<\/p>\n<p><strong>Entity<\/strong> \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043c\u0438\u0440\u0435 \u0438\u0433\u0440\u044b \u2014 \u043a\u0430\u043a GameObject, \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 Unity. \u041d\u043e \u0432 ECS \u044d\u0442\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0443\u0441\u0442\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 (<strong>Components<\/strong>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 <strong>Entity<\/strong>. \u0410 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435, \u0434\u043b\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b.\u00a0<\/p>\n<p>\u0412\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 (<strong>System<\/strong>) \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0435 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043d\u043e \u0434\u0435\u043b\u0430\u044e\u0449\u0438\u0435 \u044d\u0442\u043e \u043e\u0441\u043e\u0431\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>Gravity System <\/strong>\u2014 \u044d\u0442\u043e<strong> <\/strong>\u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0447\u0430\u0441\u0442\u044c \u0438\u0433\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u044f. \u041e\u043d\u0430 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u0438\u0433\u0440\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u043d\u0430\u0448\u0438 <strong>Entity<\/strong>, \u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b <strong>Gravity. <\/strong>\u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, <strong>Gravity<\/strong> \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u0448 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 <strong>SQL<\/strong>-\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u0433\u0434\u0435 \u043c\u044b, \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044f \u0437\u0430\u043f\u0440\u043e\u0441, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0431\u043e\u0440\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u043d\u0430\u0441 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043d\u0443\u0436\u043d\u044b\u0445 <strong>Entity<\/strong>, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u043f\u043e\u0434 \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u0441\u0438\u043b\u044b \u0442\u044f\u0436\u0435\u0441\u0442\u0438 \u0417\u0435\u043c\u043b\u0438. \u041e\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>Position<\/strong> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u0430\u043a \u0436\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a\u043e \u0432\u0441\u0435\u043c <strong>Entity<\/strong>, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u043c \u0435\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u0435\u0441\u044c \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a \u0434\u0440\u0443\u0433\u043e\u0439, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0443\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u043c\u043e\u0433\u0443\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438 \u043d\u0435 \u0437\u043d\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u043e \u0434\u0440\u0443\u0433\u0435, \u0430 \u043e\u0431\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0438\u0432\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 \u0442\u0435\u0445 \u0436\u0435 \u0441\u0430\u043c\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043c\u0438\u0440\u0430. \u041a\u0442\u043e-\u0442\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u0440\u0438\u0432\u0435\u043b \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u044e \u0441 \u0448\u0438\u043d\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u043e\u0431\u0449\u0435\u0439 \u0448\u0438\u043d\u0435, \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439.<\/p>\n<p><strong>\u041e\u0434\u043d\u043e \u0438\u0437 \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 ECS<\/strong> \u2014 \u044d\u0442\u043e \u043d\u0438\u0437\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0444\u0438\u0447\u0438 \u0438 \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0438, \u0435\u0441\u043b\u0438 \u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0430 \u0438\u0433\u0440\u044b, \u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0431\u043e\u0435\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0431\u0438\u0432\u0430\u0435\u0442 \u0438\u0433\u0440\u043e\u043a\u0430 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0435\u0433\u043e \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u044f, \u0438\u0433\u0440\u043e\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0443\u043c\u0438\u0440\u0430\u0442\u044c. \u041a\u0430\u043a \u0431\u044b \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0447\u0438\u0442\u0430. \u042d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043b\u044e\u0431\u044b\u043c \u0438\u0433\u0440\u043e\u0432\u044b\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430\u043c.\u00a0<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u043a \u043d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043d\u0438\u0436\u0435. \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043b\u043e\u0445\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u043d\u0435 \u0443\u0442\u0440\u0443\u0436\u0434\u0430\u044f \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u0422\u0430\u043c \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c, \u0438 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0410 \u044d\u0442\u043e \u043a\u043e\u0434, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 ECS. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u0440\u0443\u0433\u043b\u044f\u0448 \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430. \u0418 \u0432 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u0443 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0438 \u0443\u0434\u043e\u0431\u043d\u043e \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438\u0434\u0443\u0442 \u043e\u0434\u043d\u0430 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u0439.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430 \u0441\u0445\u0435\u043c\u0435 \u043d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 2, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u0442\u0440\u0435\u0442\u044c\u044e. \u0410 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u043c\u044b \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u044f\u0442\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0435 \u043f\u043e\u0441\u043b\u0435 3, \u0438 \u0432\u0441\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. <\/p>\n<p><strong>\u0412\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e<\/strong> ECS \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0434 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0435\u043c\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c 3 \u0441\u0438\u0441\u0442\u0435\u043c\u044b:<\/p>\n<ol>\n<li>\n<p>Cube System;<\/p>\n<\/li>\n<li>\n<p>Triangle System;<\/p>\n<\/li>\n<li>\n<p>Sphere System.<\/p>\n<\/li>\n<\/ol>\n<p><strong>Cube System<\/strong> \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u0443\u0431\u044b, \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0434\u043b\u044f <strong>Triangle System<\/strong> \u0438 \u0441\u0444\u0435\u0440\u044b \u0434\u043b\u044f <strong>Sphere System<\/strong> \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u0435\u0439 \u043d\u0430 \u0432\u0445\u043e\u0434. \u0418 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u043b\u044f\u0434\u044f \u043d\u0430 \u0441\u0445\u0435\u043c\u0443 \u043d\u0438\u0436\u0435, \u0435\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0435 \u043a\u0430\u043a \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e, \u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0437\u0430\u0432\u043e\u0434\u0430\u043c\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u0438 \u043b\u0438\u043d\u0438\u0438 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0440\u044f\u0434\u043e\u043c \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u043e\u0434\u043e\u0432, \u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0435 \u0441\u044b\u0440\u044c\u0435 \u0432 \u0432\u0438\u0434\u0435 \u043a\u0443\u0431\u043e\u0432, \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0438 \u0441\u0444\u0435\u0440 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u043e \u044d\u0442\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u0430\u0432\u043e\u0434\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<p><strong>\u0422\u0440\u0435\u0442\u044c\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0442\u0430\u043a \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u0433\u0435\u0439\u043c\u0434\u0435\u0432\u0435, \u2014 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.\u00a0<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0438\u0433\u0440\u044b \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043a\u043b\u0430\u0441\u0441 \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0442 <strong>Renderable<\/strong> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u043b\u0430\u0441\u0441\u044b <strong>Moveable<\/strong> \u0438 <strong>StaticObject<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0435\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435, \u0442\u0430\u043a \u0438 <strong>ForceField<\/strong> \u2014 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430\u044f \u0442\u043e\u0447\u043a\u0443, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u0410 \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u2014 \u043f\u0443\u043b\u0438, \u0430\u0441\u0442\u0435\u0440\u043e\u0438\u0434\u044b \u0438 \u0442. \u0434., \u2014 \u0442\u043e \u0438\u0445 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442 <strong>Moveable<\/strong>, \u043d\u043e \u0435\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u0435\u043d \u0438 <strong>Renderable. <\/strong>\u0410 \u0435\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0449\u0435 \u0438 \u043f\u0440\u0438\u0448\u0435\u043b\u044c\u0446\u0435\u0432 \u0441 \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u043e\u043c?<\/p>\n<p>\u041f\u0440\u0438 \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438, \u0438\u0437-\u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u043e \u0432 ECS \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043a\u0438\u043d\u0443\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043d\u0430 <strong>Entity<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043a\u0430\u043a \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c <strong>MoveableObject<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u043c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c <strong>ForceField<\/strong>. \u0418\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0442\u0435\u0433\u0438 <strong>Renderable<\/strong> \u0438 <strong>Movable<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0438\u043f\u0430 <strong>Asteroid<\/strong>. \u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u043c \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u043c\u0443 \u0435\u0449\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong>AI<\/strong> \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 <strong>EnemyAlien<\/strong> \u0431\u0435\u0437 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u0418\u043b\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u043e\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u044f <strong>Renderable <\/strong>\u0438<strong> Damageble.<\/strong> \u0410 \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u043a\u0438\u043d\u0435\u043c <strong>MoveableObject<\/strong>.\u00a0<\/p>\n<p>\u0412\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u043b\u043e? \u0425\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043f\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430\u0434\u0435\u043b\u0438\u0442\u044c \u0418\u0418? \u041f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0432\u044f\u0436\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442-\u0442\u0435\u0433 <strong>AI<\/strong>, \u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0451 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c! \u041f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u043b\u0438? \u0418\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u0440\u044f\u043c\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440\u044b. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 <strong>MoveableObject <\/strong>\u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0433\u043e \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u0442 \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0433\u0435\u0439\u043c\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u043d\u0430\u0441 <strong>Entity<\/strong>, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0431\u0435\u0437 \u0432\u0440\u0435\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432.\u00a0<\/p>\n<p>\u0418\u0442\u0430\u043a,<strong><em> \u043f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u043c, \u043a\u0430\u043a\u0438\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0435\u0441\u0442\u044c \u0443 ECS<\/em><\/strong>:<\/p>\n<ol>\n<li>\n<p>\u041d\u0438\u0437\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430;<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439;<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0410 \u0433\u0434\u0435 \u0438 \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ECS?<\/h3>\n<p>\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 ECS \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0433\u0440\u0430\u0445. \u041e\u0434\u0438\u043d \u0438\u0437 \u043f\u0435\u0440\u0432\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0437\u0434\u0435\u0441\u044c \u2014 <strong>Dungeon Siege<\/strong>. \u0412 \u043d\u0435\u0439<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-386895","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/386895","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=386895"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/386895\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=386895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=386895"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=386895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}