{"id":478518,"date":"2026-05-04T13:03:30","date_gmt":"2026-05-04T13:03:30","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=478518"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=478518","title":{"rendered":"\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0432 ECS: \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437 \u043d\u0435\u044f\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fc2\/b3a\/392\/fc2b3a392f88651b5d6a9aba202ef231.png\" width=\"1578\" height=\"961\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/fc2\/b3a\/392\/fc2b3a392f88651b5d6a9aba202ef231.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fc2\/b3a\/392\/fc2b3a392f88651b5d6a9aba202ef231.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/figure>\n<p>\u0423 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u0432 \u0432 ECS \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0438\u043c\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 sparse set&#8217;\u0430\u043c\u0438 &#8212; \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u0445\u0430\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0427\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445? \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/h2>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435: \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0435 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ECS. <\/p>\n<p>\u0415\u0441\u0442\u044c \u0441\u043d\u0430\u0440\u044f\u0434, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u043e\u0440\u0443\u0436\u0438\u044f. \u041e\u043d \u043b\u0435\u0442\u0438\u0442 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0446\u0435\u043b\u044c. \u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0441\u043d\u0430\u0440\u044f\u0434 \u0432\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0441\u043d\u0430\u0440\u044f\u0434\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0432\u0437\u0440\u044b\u0432\u0430.  \u041d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b, \u043d\u043e\u0432\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b. <\/p>\n<p><em>\u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438.<\/em><\/p>\n<p>\u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0442\u0430 \u0441\u043d\u0430\u0440\u044f\u0434\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b: <\/p>\n<ul>\n<li>\n<p><code>Position<\/code> &#8212; \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p><code>Velocity<\/code> &#8212; \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0442\u0430,<\/p>\n<\/li>\n<li>\n<p><code>Damage<\/code> &#8212; \u0443\u0440\u043e\u043d. <\/p>\n<\/li>\n<\/ul>\n<p>\u0410 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e:<\/p>\n<ul>\n<li>\n<p><code>Position<\/code> &#8212; \u043c\u0435\u0441\u0442\u043e\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p><code>ExplosionRadius<\/code> &#8212; \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c \u043f\u043e\u0440\u0430\u0436\u0435\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p><code>Damage<\/code> &#8212; \u0443\u0440\u043e\u043d\u043e\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u0438\u0434:<\/p>\n<pre><code class=\"cs\">public struct Position \u00a0 \u00a0 \u00a0 \u00a0: IComponent { public Vector3 Vector; }public struct Velocity \u00a0 \u00a0 \u00a0 \u00a0: IComponent { public Vector3 Vector; }public struct ExplosionRadius : IComponent { public float Value; }public struct Damage \u00a0 \u00a0 \u00a0 \u00a0 \u00a0: IComponent { public int Value; }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0441\u043d\u0430\u0440\u044f\u0434\u0430 \u0432\u043e \u0432\u0437\u0440\u044b\u0432, \u0442.\u0435. \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u0430:<\/p>\n<ul>\n<li>\n<p>\u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430,<\/p>\n<\/li>\n<li>\n<p>\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043d\u043e\u0432\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430,<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0442\u0435\u043c \u0434\u043e\u0440\u043e\u0436\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f. \u0412 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u0441 \u0447\u0430\u0441\u0442\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 (\u0441\u043d\u0430\u0440\u044f\u0434\u044b, \u0431\u0430\u0444\u044b, \u0444\u0430\u0437\u044b \u0430\u0442\u0430\u043a) \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c\u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c\u0438.<\/p>\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c \u0441\u043e\u0431\u043e\u0439: \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0437\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0432\u043e\u0438 \u0440\u0443\u043a\u0438?<\/p>\n<p>\u041a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f.<\/p>\n<h2>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f<\/h2>\n<p>\u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430: \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043c\u044b \u0441\u0430\u043c\u0438 \u043d\u0435 \u0440\u0435\u0448\u0438\u043c \u0435\u0451 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435, \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u043b\u043e\u0442\u043d\u044b\u0445 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u041d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/github.com\/Levchenkov\/PewPew.Ecs\" rel=\"noopener noreferrer nofollow\">PewPew.Ecs<\/a>. \u0422\u0430\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u044b. <\/p>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f nuget \u043f\u0430\u043a\u0435\u0442 PewPew.Ecs, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e.<\/p>\n<h2>\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u0432<\/h2>\n<p>\u0418\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u043c 2 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430: <code>Projectile<\/code>, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0441\u043d\u0430\u0440\u044f\u0434, \u0438 <code>Explosion<\/code>, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0432\u0437\u0440\u044b\u0432, \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>[Archetype]<\/code>. \u041e\u043d \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f <code>SourceGenerator<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<pre><code class=\"cs\">\/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0441\u043d\u0430\u0440\u044f\u0434\u0430[Archetype]public ref struct Projectile{\u00a0 \u00a0 \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043a\u0430\u043a ref \u043f\u043e\u043b\u044f\u00a0 \u00a0 public ref Position Position;\u00a0 \u00a0 public ref Velocity Velocity;\u00a0 \u00a0 public ref Damage Damage;\u00a0 \u00a0 \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u00a0 \u00a0 public Projectile(ref Position position, ref Velocity velocity, ref Damage damage)\u00a0 \u00a0 {\u00a0 \u00a0 \u00a0 \u00a0 Position = ref position;\u00a0 \u00a0 \u00a0 \u00a0 Velocity = ref velocity;\u00a0 \u00a0 \u00a0 \u00a0 Damage = ref damage;\u00a0 \u00a0 }}\/\/ \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0432\u0437\u0440\u044b\u0432\u0430 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0435\u0439[Archetype]public ref struct Explosion{\u00a0 \u00a0 public ref Position Position;\u00a0 \u00a0 public ref ExplosionRadius ExplosionRadius;\u00a0 \u00a0 public ref Damage Damage;\u00a0 \u00a0 public Explosion(ref Position position, ref ExplosionRadius explosionRadius, ref Damage damage)\u00a0 \u00a0 {\u00a0 \u00a0 \u00a0 \u00a0 Position = ref position;\u00a0 \u00a0 \u00a0 \u00a0 ExplosionRadius = ref explosionRadius;\u00a0 \u00a0 \u00a0 \u00a0 Damage = ref damage;\u00a0 \u00a0 }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h2>\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <code>HybridWorld<\/code> &#8212; \u043c\u0438\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 sparse set&#8217;\u0430\u0445, \u0442\u0430\u043a \u0438 \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430\u0445.<\/p>\n<pre><code class=\"cs\">\/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c HybridWorldHybridWorld world = WorldFactory.Shared.CreateHybridWorld();\/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u043b\u0435\u0442\u044f\u0449\u0435\u0433\u043e \u0441\u043d\u0430\u0440\u044f\u0434\u0430 Projectile \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 Position, Velocity, Damageworld.InitProjectileArchetype();\/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0432\u0437\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u043d\u0430\u0440\u044f\u0434\u0430 Explosion \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 Position, ExplosionRadius, Damageworld.InitExplosionArchetype();<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u042f\u0432\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0435\u044f\u0432\u043d\u043e\u0439. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430 \u0432\u0441\u0435\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<h2>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f:<\/p>\n<pre><code class=\"cs\">\/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0434\u043b\u044f ProjectileProjectileArchetype projectileArchetype = world.GetProjectileArchetype();\/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438EntityId entityId = world.CreateEntityId();\/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u043d\u043e\u0432\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044cProjectile projectile = projectileArchetype.Add(entityId);\/\/ \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044fprojectile.Position.Vector = spawnPoint;projectile.Velocity.Vector = direction;projectile.Damage.Value \u00a0 \u00a0= 50;<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>Add<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>ref<\/code>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443  <code>Projectile<\/code> \u0441 <code>ref<\/code>\u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439.<\/p>\n<h2>\u042f\u0432\u043d\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f<\/h2>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439: \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043a\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043b\u0435\u0442\u044f\u0449\u0438\u0435 \u0441\u043d\u0430\u0440\u044f\u0434\u044b \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0442\u0435, \u0447\u0442\u043e \u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u0438, \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0432\u0437\u0440\u044b\u0432\u0430.<\/p>\n<pre><code class=\"cs\">\/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0434\u043b\u044f ProjectileProjectileArchetype projectileArchetype = world.GetProjectileArchetype();\/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0434\u043b\u044f ExplosionExplosionArchetype explosionArchetype \u00a0 = world.GetExplosionArchetype();\/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435Span&lt;EntityId&gt; entities = projectileArchetype.Entities;\/\/ \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438for (var i = 0; i &lt; entities.Length; i++){\u00a0 \u00a0 EntityId entityId = entities[i];    \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439\u00a0 \u00a0 if (HitSomething(entityId))        \/\/ \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439\u00a0 \u00a0 \u00a0 \u00a0 projectileArchetype.MoveEntityTo(entityId, explosionArchetype);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>MoveEntityTo<\/code> \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b<code>Position<\/code> \u0438 <code>Damage<\/code> \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439, \u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>Velocity<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0442.\u043a. \u0432 \u043d\u043e\u0432\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435 \u0432\u0437\u0440\u044b\u0432\u0430 \u0435\u0433\u043e \u043d\u0435\u0442. <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u043d\u043e\u0432\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>ExplosionRadius<\/code> , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u042d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043d\u0438\u0436\u0435 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u043c\u0435\u0442\u043e\u0434 <code>MoveEntityTo<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041d\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u0430\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u043a\u0440\u044b\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c.<\/p>\n<h2>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445<\/h2>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430. \u0417\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 SIMD \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u043b\u043e\u0442\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0430\u0447\u043a\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <code>HybridWorld<\/code> , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u0430\u0442\u0447-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 <code>IBatchQuery<\/code>:<\/p>\n<pre><code class=\"cs\">\/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439FilterDefinition flyingDefinition = new FilterDefinition()\u00a0 \u00a0 .With&lt;Position&gt;()\u00a0 \u00a0 .With&lt;Velocity&gt;();\/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u0443FlightBatchQuery flightBatchQuery = new FlightBatchQuery();\/\/ \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441world.ExecuteBatchQuery&lt;FlightBatchQuery, Position, Velocity&gt;(flyingDefinition, flightBatchQuery);\/\/ \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u043d\u043b\u0430\u0439\u043d\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u0430public readonly struct FlightBatchQuery : IBatchQuery&lt;Position, Velocity&gt;{\u00a0 \u00a0 \/\/ \u043c\u0435\u0442\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0447\u043a\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435,\u00a0 \u00a0 \/\/ \u0442\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f SIMD \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439,\u00a0 \u00a0 \/\/ \u043c\u0435\u0442\u043e\u0434 SparseUpdate \u043d\u0438\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0448\u0442\u0443\u0447\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438\u00a0 \u00a0 public void BatchUpdate(Span&lt;Position&gt; positions, Span&lt;Velocity&gt; velocities)\u00a0 \u00a0 {\u00a0 \u00a0 \u00a0 \u00a0 int vectorCount = Vector&lt;float&gt;.Count;\u00a0 \u00a0 \u00a0 \u00a0 int length = positions.Length - positions.Length % vectorCount;\u00a0 \u00a0 \u00a0 \u00a0 var posVectors = MemoryMarshal.Cast&lt;Position, \u00a0Vector&lt;float&gt;&gt;(positions[..length]);\u00a0 \u00a0 \u00a0 \u00a0 var velVectors = MemoryMarshal.Cast&lt;Velocity, Vector&lt;float&gt;&gt;(velocities[..length]);\u00a0 \u00a0 \u00a0 \u00a0 for (int i = 0; i &lt; posVectors.Length; i++)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 posVectors[i] += velVectors[i];\u00a0 \u00a0 \u00a0 \u00a0 for (int i = length; i &lt; positions.Length; i++)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 positions[i].Vector += velocities[i].Vector;\u00a0 \u00a0 }\u00a0 \u00a0 \/\/ \u043f\u043e\u0448\u0442\u0443\u0447\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 sparse set \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445\u00a0 \u00a0 public void SparseUpdate(ref Position position, ref Velocity velocity)\u00a0 \u00a0 \u00a0 \u00a0 =&gt; position.Vector += velocity.Vector;}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0445 \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u043a\u044d\u0448-\u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043c\u0438\u043d\u0438\u043c\u0443\u043c. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0430 \u044d\u0442\u043e \u043c\u044b \u0438 \u043b\u044e\u0431\u0438\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<h2>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f<\/h2>\n<p>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u043e\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u0440\u043e\u043c\u0435 \u0442\u0435\u0445, \u0447\u0442\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435. \u041d\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 sparse set&#8217;\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u044b \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0430\u043a\u0438\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c. \u041a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<h2>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?<\/h2>\n<p>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 (\u0431\u043e\u043b\u0435\u0435 10000 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0438\u0440\u0435), \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430,<\/p>\n<\/li>\n<li>\n<p>\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e: \u0441\u043d\u0430\u0440\u044f\u0434 \u043b\u0435\u0442\u0438\u0442 \/ \u0432\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432\u0440\u0430\u0433 \u0436\u0438\u0432 \/ \u043c\u0451\u0440\u0442\u0432, \u044e\u043d\u0438\u0442 \u0441\u0442\u043e\u0438\u0442 \/ \u0431\u0435\u0436\u0438\u0442,<\/p>\n<\/li>\n<li>\n<p>\u0432\u0430\u0436\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445,<\/p>\n<\/li>\n<li>\n<p>\u043d\u0443\u0436\u043d\u0430 SIMD-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u0430, \u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 sparse set \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u043c \u0438 sparse set \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c SIMD-\u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c, \u043d\u043e \u0432\u0437\u0430\u043c\u0435\u043d \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>MoveEntityTo<\/code>. \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0430 \u043d\u0435 ECS.<\/p>\n<p>P.S. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u044b \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445!<\/p>\n<\/div>\n<p>\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\/1031234\/\">https:\/\/habr.com\/ru\/articles\/1031234\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0423 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u0432 \u0432 ECS \u0435\u0441\u0442\u044c \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0438\u043c\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 \u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 sparse set&#8217;\u0430\u043c\u0438 &#8212; \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u0445\u0430\u043e\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0427\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0430, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445? \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435: \u043d\u0430 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0435 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e ECS. \u0415\u0441\u0442\u044c \u0441\u043d\u0430\u0440\u044f\u0434, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u043e\u0440\u0443\u0436\u0438\u044f. \u041e\u043d \u043b\u0435\u0442\u0438\u0442 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0446\u0435\u043b\u044c. \u0412 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0441\u043d\u0430\u0440\u044f\u0434 \u0432\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0441\u043d\u0430\u0440\u044f\u0434\u0430 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442 \u0432 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u0432\u0437\u0440\u044b\u0432\u0430.  \u041d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b, \u043d\u043e\u0432\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438.\u0418\u0442\u0430\u043a, \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0442\u0430 \u0441\u043d\u0430\u0440\u044f\u0434\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b: Position &#8212; \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f,Velocity &#8212; \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0442\u0430,Damage &#8212; \u0443\u0440\u043e\u043d. \u0410 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e:Position &#8212; \u043c\u0435\u0441\u0442\u043e\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f,ExplosionRadius &#8212; \u0440\u0430\u0434\u0438\u0443\u0441\u043e\u043c \u043f\u043e\u0440\u0430\u0436\u0435\u043d\u0438\u044f,Damage &#8212; \u0443\u0440\u043e\u043d\u043e\u043c.\u0421\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u0438\u0434:public struct Position \u00a0 \u00a0 \u00a0 \u00a0: IComponent { public Vector3 Vector; }public struct Velocity \u00a0 \u00a0 \u00a0 \u00a0: IComponent { public Vector3 Vector; }public struct ExplosionRadius : IComponent { public float Value; }public struct Damage \u00a0 \u00a0 \u00a0 \u00a0 \u00a0: IComponent { public int Value; }\u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0441\u043d\u0430\u0440\u044f\u0434\u0430 \u0432\u043e \u0432\u0437\u0440\u044b\u0432, \u0442.\u0435. \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d\u0430:\u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430,\u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043d\u043e\u0432\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430,\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0441\u0442\u0430\u0440\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435.\u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0442\u0435\u043c \u0434\u043e\u0440\u043e\u0436\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f. \u0412 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 \u0441 \u0447\u0430\u0441\u0442\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438 (\u0441\u043d\u0430\u0440\u044f\u0434\u044b, \u0431\u0430\u0444\u044b, \u0444\u0430\u0437\u044b \u0430\u0442\u0430\u043a) \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c\u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c\u0438.\u0412\u043e\u043f\u0440\u043e\u0441 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c \u0441\u043e\u0431\u043e\u0439: \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0437\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0441\u0432\u043e\u0438 \u0440\u0443\u043a\u0438?\u041a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f.\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0418\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430: \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043c \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043c\u044b \u0441\u0430\u043c\u0438 \u043d\u0435 \u0440\u0435\u0448\u0438\u043c \u0435\u0451 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c. \u041d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043d\u0435\u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.\u0414\u0430\u043d\u043d\u044b\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435, \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u043b\u043e\u0442\u043d\u044b\u0445 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u041d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 PewPew.Ecs. \u0422\u0430\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u044b. \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f nuget \u043f\u0430\u043a\u0435\u0442 PewPew.Ecs, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e.\u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u0432\u0418\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0432\u044b\u0448\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u043c 2 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430: Projectile, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0441\u043d\u0430\u0440\u044f\u0434, \u0438 Explosion, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0432\u0437\u0440\u044b\u0432, \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442 [Archetype]. \u041e\u043d \u043d\u0443\u0436\u0435\u043d \u0434\u043b\u044f SourceGenerator, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.\/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0441\u043d\u0430\u0440\u044f\u0434\u0430[Archetype]public ref struct Projectile{\u00a0 \u00a0 \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043a\u0430\u043a ref \u043f\u043e\u043b\u044f\u00a0 \u00a0 public ref Position Position;\u00a0 \u00a0 public ref Velocity Velocity;\u00a0 \u00a0 public ref Damage Damage;\u00a0 \u00a0 \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u00a0 \u00a0 public Projectile(ref Position position, ref Velocity velocity, ref Damage damage)\u00a0 \u00a0 {\u00a0 \u00a0 \u00a0 \u00a0 Position = ref position;\u00a0 \u00a0 \u00a0 \u00a0 Velocity = ref velocity;\u00a0 \u00a0 \u00a0 \u00a0 Damage = ref damage;\u00a0 \u00a0 }}\/\/ \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0432\u0437\u0440\u044b\u0432\u0430 \u0441 \u043d\u0443\u0436\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u0435\u0439[Archetype]public ref struct Explosion{\u00a0 \u00a0 public ref Position Position;\u00a0 \u00a0 public ref ExplosionRadius ExplosionRadius;\u00a0 \u00a0 public ref Damage Damage;\u00a0 \u00a0 public Explosion(ref Position position, ref ExplosionRadius explosionRadius, ref Damage damage)\u00a0 \u00a0 {\u00a0 \u00a0 \u00a0 \u00a0 Position = ref position;\u00a0 \u00a0 \u00a0 \u00a0 ExplosionRadius = ref explosionRadius;\u00a0 \u00a0 \u00a0 \u00a0 Damage = ref damage;\u00a0 \u00a0 }}\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f HybridWorld &#8212; \u043c\u0438\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043c\u0435\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u0432 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 sparse set&#8217;\u0430\u0445, \u0442\u0430\u043a \u0438 \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430\u0445.\/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c HybridWorldHybridWorld world = WorldFactory.Shared.CreateHybridWorld();\/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u043b\u0435\u0442\u044f\u0449\u0435\u0433\u043e \u0441\u043d\u0430\u0440\u044f\u0434\u0430 Projectile \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 Position, Velocity, Damageworld.InitProjectileArchetype();\/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0432\u0437\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0441\u043d\u0430\u0440\u044f\u0434\u0430 Explosion \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 Position, ExplosionRadius, Damageworld.InitExplosionArchetype();\u042f\u0432\u043d\u0430\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043f\u0435\u0440\u0435\u0434 \u043d\u0435\u044f\u0432\u043d\u043e\u0439. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u043e\u0433\u0440\u0435\u0432\u0430 \u0432\u0441\u0435\u0445 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0432\u0440\u0435\u043c\u044f.\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438\u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f:\/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0434\u043b\u044f ProjectileProjectileArchetype projectileArchetype = world.GetProjectileArchetype();\/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438EntityId entityId = world.CreateEntityId();\/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u043d\u043e\u0432\u0443\u044e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044cProjectile projectile = projectileArchetype.Add(entityId);\/\/ \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044fprojectile.Position.Vector = spawnPoint;projectile.Velocity.Vector = direction;projectile.Damage.Value \u00a0 \u00a0= 50;\u041c\u0435\u0442\u043e\u0434 Add \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 ref\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443  Projectile \u0441 ref\u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u044f\u043c\u043e \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430. \u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u043a\u043e\u043f\u0438\u0439.\u042f\u0432\u043d\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f\u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439: \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043a\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043b\u0435\u0442\u044f\u0449\u0438\u0435 \u0441\u043d\u0430\u0440\u044f\u0434\u044b \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0442\u0435, \u0447\u0442\u043e \u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u0430\u043b\u0438, \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0432\u0437\u0440\u044b\u0432\u0430.\/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0434\u043b\u044f ProjectileProjectileArchetype projectileArchetype = world.GetProjectileArchetype();\/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u0434\u043b\u044f ExplosionExplosionArchetype explosionArchetype \u00a0 = world.GetExplosionArchetype();\/\/ \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435Span&lt;EntityId&gt; entities = projectileArchetype.Entities;\/\/ \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438for (var i = 0; i &lt; entities.Length; i++){\u00a0 \u00a0 EntityId entityId = entities[i];    \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439\u00a0 \u00a0 if (HitSomething(entityId))        \/\/ \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439\u00a0 \u00a0 \u00a0 \u00a0 projectileArchetype.MoveEntityTo(entityId, explosionArchetype);}\u041c\u0435\u0442\u043e\u0434 MoveEntityTo \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u0449\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044bPosition \u0438 Damage \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0432 \u043d\u043e\u0432\u044b\u0439, \u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Velocity \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0442.\u043a. \u0432 \u043d\u043e\u0432\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435 \u0432\u0437\u0440\u044b\u0432\u0430 \u0435\u0433\u043e \u043d\u0435\u0442. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043d\u043e\u0432\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435 \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 ExplosionRadius , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u042d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u043d\u0438\u0436\u0435 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.\u0418\u043c\u0435\u043d\u043d\u043e \u043c\u0435\u0442\u043e\u0434 MoveEntityTo \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432. \u041d\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u0430\u043c\u0438 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438. \u041d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u043a\u0440\u044b\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 \u043a\u0430\u0434\u0440\u043e\u043c.\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a\u0436\u0435, \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430. \u0417\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 SIMD \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439.\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u043b\u043e\u0442\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043f\u0430\u0447\u043a\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f HybridWorld , \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0431\u0430\u0442\u0447-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 IBatchQuery:\/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0438\u043b\u044c\u0442\u0440 \u0434\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439FilterDefinition flyingDefinition = new FilterDefinition()\u00a0 \u00a0 .With&lt;Position&gt;()\u00a0 \u00a0 .With&lt;Velocity&gt;();\/\/ \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u0443FlightBatchQuery flightBatchQuery = new FlightBatchQuery();\/\/ \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441world.ExecuteBatchQuery&lt;FlightBatchQuery, Position, Velocity&gt;(flyingDefinition, flightBatchQuery);\/\/ \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u043d\u043b\u0430\u0439\u043d\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0431\u0440\u0430\u0442\u044c \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u0430public readonly struct FlightBatchQuery : IBatchQuery&lt;Position, Velocity&gt;{\u00a0 \u00a0 \/\/ \u043c\u0435\u0442\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0447\u043a\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435,\u00a0 \u00a0 \/\/ \u0442\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f SIMD \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439,\u00a0 \u00a0 \/\/ \u043c\u0435\u0442\u043e\u0434 SparseUpdate \u043d\u0438\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0448\u0442\u0443\u0447\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438\u00a0 \u00a0 public void BatchUpdate(Span&lt;Position&gt; positions, Span&lt;Velocity&gt; velocities)\u00a0 \u00a0 {\u00a0 \u00a0 \u00a0 \u00a0 int vectorCount = Vector&lt;float&gt;.Count;\u00a0 \u00a0 \u00a0 \u00a0 int length = positions.Length &#8212; positions.Length % vectorCount;\u00a0 \u00a0 \u00a0 \u00a0 var posVectors = MemoryMarshal.Cast&lt;Position, \u00a0Vector&lt;float&gt;&gt;(positions[..length]);\u00a0 \u00a0 \u00a0 \u00a0 var velVectors = MemoryMarshal.Cast&lt;Velocity, Vector&lt;float&gt;&gt;(velocities[..length]);\u00a0 \u00a0 \u00a0 \u00a0 for (int i = 0; i &lt; posVectors.Length; i++)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 posVectors[i] += velVectors[i];\u00a0 \u00a0 \u00a0 \u00a0 for (int i = length; i &lt; positions.Length; i++)\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 positions[i].Vector += velocities[i].Vector;\u00a0 \u00a0 }\u00a0 \u00a0 \/\/ \u043f\u043e\u0448\u0442\u0443\u0447\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 sparse set \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f\u0445\u00a0 \u00a0 public void SparseUpdate(ref Position position, ref Velocity velocity)\u00a0 \u00a0 \u00a0 \u00a0 =&gt; position.Vector += velocity.Vector;}\u0414\u0430\u043d\u043d\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u0445 \u0431\u043b\u043e\u043a\u0430\u043c\u0438, \u043a\u044d\u0448-\u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043c\u0438\u043d\u0438\u043c\u0443\u043c. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0430 \u044d\u0442\u043e \u043c\u044b \u0438 \u043b\u044e\u0431\u0438\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0442\u043e\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043c\u0438\u043d\u0443\u0441\u044b:\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043a\u0440\u043e\u043c\u0435 \u0442\u0435\u0445, \u0447\u0442\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435. \u041d\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430 \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 sparse set&#8217;\u0430\u0445.\u0421\u0443\u0449\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.\u042d\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043d\u044b \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0442\u0430\u043a\u0438\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c. \u041a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0441\u0443\u0434\u0438\u0442\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445:\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 (\u0431\u043e\u043b\u0435\u0435 10000 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0438\u0440\u0435), \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u0430,\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e: \u0441\u043d\u0430\u0440\u044f\u0434 \u043b\u0435\u0442\u0438\u0442 \/ \u0432\u0437\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432\u0440\u0430\u0433 \u0436\u0438\u0432 \/ \u043c\u0451\u0440\u0442\u0432, \u044e\u043d\u0438\u0442 \u0441\u0442\u043e\u0438\u0442 \/ \u0431\u0435\u0436\u0438\u0442,\u0432\u0430\u0436\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0441\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445,\u043d\u0443\u0436\u043d\u0430 SIMD-\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445.\u0415\u0441\u043b\u0438 \u0436\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u0430, \u0442\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0435 sparse set \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430.\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u0440\u0445\u0435\u0442\u0438\u043f \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0430\u0440\u0445\u0435\u0442\u0438\u043f\u043e\u043c \u0438 sparse set \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435\u043c. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c SIMD-\u0434\u0440\u0443\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c, \u043d\u043e \u0432\u0437\u0430\u043c\u0435\u043d \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u044f\u0432\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 MoveEntityTo. \u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u0430 \u043d\u0435 ECS.P.S&#8230;.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-478518","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/478518","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=478518"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/478518\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=478518"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=478518"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=478518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}