{"id":309405,"date":"2020-09-03T15:00:47","date_gmt":"2020-09-03T15:00:47","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=309405"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2020-09-03T15:00:47","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=309405","title":{"rendered":"\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 Unreal Engine 4 \u0438 Blender"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pixonic\/blog\/517684\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/dr\/ts\/-3\/drts-3hprxrnrbgz4clx6zvx9mc.jpeg\"><\/p>\n<p>  \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0433\u0440\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u0435\u0435, \u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043a\u0440\u0443\u0448\u0438\u0442\u044c \u043c\u0435\u0431\u0435\u043b\u044c, \u0440\u0430\u0441\u0442\u0435\u043d\u0438\u044f, \u0441\u0442\u0435\u043d\u044b, \u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u0446\u0435\u043b\u044b\u0435 \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0435\u0441\u0435\u043b\u043e.<\/p>\n<p>  \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044f\u0440\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438\u0433\u0440 \u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c Red Fraction: Guerrilla \u0441 \u0435\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0431\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043d\u043d\u0435\u043b\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u041c\u0430\u0440\u0441, Battlefield: Bad Company 2, \u0433\u0434\u0435 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u043f\u0435\u043f\u0435\u043b\u0438\u0449\u0435, \u0438 Control \u0441 \u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0437\u0430.<\/p>\n<p>  \u0412 2019 \u0433\u043e\u0434\u0443 Epic Games \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0434\u0435\u043c\u043e \u043d\u043e\u0432\u043e\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0444\u0438\u0437\u0438\u043a\u0438 \u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0439 <a href=\"https:\/\/docs.unrealengine.com\/en-US\/Engine\/Chaos\/ChaosDestruction\/index.html\">Chaos<\/a> \u0434\u0432\u0438\u0436\u043a\u0430 Unreal. \u041d\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430, \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 Niagara \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u044b\u043c \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. <\/p>\n<p>  \u0410 \u043f\u043e\u043a\u0430 Chaos \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0431\u0435\u0442\u0430-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u0445 \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 Unreal Engine 4. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u043e\u043f\u0438\u0448\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><iframe src=\"https:\/\/www.youtube.com\/embed\/i7dzvi2oG08?rel=0&amp;showinfo=1&amp;hl=en-US\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen scrolling=\"no\" allow=\"encrypted-media; accelerometer; gyroscope; picture-in-picture\"><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0435\u0433\u043e \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0447\u044c:<\/p>\n<ul>\n<li>\u0425\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c. \u041c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0448\u0438 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u0430\u043a \u0438\u043c \u0443\u0433\u043e\u0434\u043d\u043e.<\/li>\n<li>\u0420\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044f, \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0435 \u043d\u0430 \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u0439. \u041e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0447\u0438\u0441\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u0433\u043e, \u0447\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0438\u0433\u0440\u043e\u0432\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c.<\/li>\n<li>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f. \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u043c\u0435\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0426\u041f.<\/li>\n<li>\u041f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u0430 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0430\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u043b\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0448\u0430\u0433\u043e\u0432.<\/li>\n<\/ul>\n<p>  \u0417\u0430 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u043e \u0432\u0437\u044f\u0442\u043e \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 Dark Souls 3 \u0438 Bloodborne.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/cdn.gamer-network.net\/2018\/usgamer\/Sekiro-Gamescom-Screen-2.jpg\/EG11\/thumbnail\/1920x1080\/format\/jpg\/quality\/65\/fromsoftware-rpgs-architecture-dark-souls-bloodborne-sekiro-world-design.jpg\" alt=\"image\"><\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f<\/h2>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0438\u0434\u0435\u044f \u043f\u0440\u043e\u0441\u0442\u0430:<\/p>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u0443\u044e \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u043a\u0443;<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u0435\u0442\u043a\u0438;<\/li>\n<li>\u041f\u0440\u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0438: \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u043a\u0443 -&gt; \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0435 \u0447\u0430\u0441\u0442\u0438 -&gt; \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0444\u0438\u0437\u0438\u043a\u0443.<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/dfa\/8ed\/9e5\/dfa8ed9e57bbc8f5c2014b763d0cf0f1.png\" alt=\"image\"><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/74c\/97f\/a90\/74c97fa90aa17ead6ca6076d9885f166.png\" alt=\"image\"><\/p>\n<h4>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0430\u0441\u0441\u0435\u0442\u043e\u0432<\/h4>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Blender. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u0434\u0434\u043e\u043d Blender \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c Cell Fracture.<\/p>\n<h4>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u0434\u0434\u043e\u043d\u0430<\/h4>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0434\u0434\u043e\u043d, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/EnableAddon.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/664\/124\/d0b\/664124d0ba2b7a6c10eaf6db03d2a89f.jpg\" alt=\"image\"><\/a><br \/>  <i>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0430\u0434\u0434\u043e\u043d\u0430 Cell Fracture<\/i><\/p>\n<h4>\u041f\u043e\u0438\u0441\u043a \u0430\u0434\u0434\u043e\u043d\u0430 (F3)<\/h4>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0430\u0434\u0434\u043e\u043d \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/SearchForCellFractureAddon.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8ba\/d4b\/155\/8bad4b155274621a5217a7e72b17791c.jpg\" alt=\"image\"><\/a><\/p>\n<h4>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438<\/h4>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/CellFractureSetings.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a97\/f4e\/016\/a97f4e016e5740458da1c6b89d77ff06.jpg\" alt=\"image\"><\/a><\/p>\n<h4>\u0417\u0430\u043f\u0443\u0441\u043a \u0430\u0434\u0434\u043e\u043d\u0430<\/h4>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u043e, \u0441\u0432\u0435\u0440\u044c\u0442\u0435\u0441\u044c \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043e\u0442\u0442\u0443\u0434\u0430. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0441\u0432\u043e\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/2020-08-18_10-13-36_Trim.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u0412\u044b\u0431\u043e\u0440 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0437\u0430\u043d\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439<\/h4>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c UV-\u043a\u0430\u0440\u0442\u0443 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/SelectByMaterial.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/171\/98b\/133\/17198b133d36cf83e19cb4ef68c425d4.jpg\" alt=\"image\"><\/a><\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/UnwrapCutedParts.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b31\/255\/3d5\/b312553d5e70040fe3e381a9347f101c.jpg\" alt=\"image\"><\/a><\/p>\n<h4>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446 (Edge Split)<\/h4>\n<p>  Edge Split \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442 \u0437\u0430\u0442\u0435\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/AddEdgeSplitModif.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ffe\/3a0\/2b2\/ffe3a02b2dfc477488200d80da517b59.jpg\" alt=\"image\"><\/a><\/p>\n<h4>\u041c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0441\u0441\u044b\u043b\u043e\u043a<\/h4>\n<p>  \u0418\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c Edge Split \u043a\u043e \u0432\u0441\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0447\u0430\u0441\u0442\u044f\u043c.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/AddEdgeSplitModif.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/cea\/460\/428\/cea4604282643212ebe9fdcd6a2f5d6e.jpg\" alt=\"image\"><\/a><\/p>\n<h4>\u0417\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 Blender. \u041f\u043e \u0441\u0443\u0442\u0438, \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/CellFracture_final.jpg\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/772\/040\/08e\/77204008e9af17a0165e090ac68d282e.jpg\" alt=\"image\"><\/a><\/p>\n<h2>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>  <\/p>\n<h4>\u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441<\/h4>\n<p>  \u041d\u0430\u0448 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u2014 \u044d\u0442\u043e \u0410\u043a\u0442\u0435\u0440, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\u041a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0441\u0446\u0435\u043d\u0430;<\/li>\n<li>Static Mesh \u2014 \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u043a\u0430;<\/li>\n<li>\u0411\u043e\u043a\u0441 \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439;<\/li>\n<li>\u0411\u043e\u043a\u0441 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0439;<\/li>\n<li>\u0420\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u043b\u0430.<\/li>\n<\/ul>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/755\/b71\/f01\/755b71f01adb87869ffc0ee4539f20d3.png\" alt=\"image\"><\/p>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043a\u043e\u0435-\u043a\u0430\u043a\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435:<\/p>\n<ul>\n<li>\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0442\u0430\u0439\u043c\u0435\u0440\u0430 Tick (\u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0435 \u0434\u043b\u044f \u0430\u043a\u0442\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u043d\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430);<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432;<\/li>\n<li>\u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044e;<\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0438\u043b\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439.<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0430\u043a\u0442\u0435\u0440\u0430 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">ADestroyable::ADestroyable() {     PrimaryActorTick.bCanEverTick = false; \/\/\u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c Tick     bDestroyed = false;       RootScene = CreateDefaultSubobject&lt;USceneComponent&gt;(TEXT(&quot;RootComp&quot;)); \/\/ \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u0441\u0446\u0435\u043d\u0430, \u0433\u0434\u0435 \u0432\u0441\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f     RootScene-&gt;SetMobility(EComponentMobility::Static);     RootComponent = RootScene;      Mesh = CreateDefaultSubobject&lt;UStaticMeshComponent&gt;(TEXT(&quot;BaseMeshComp&quot;)); \/\/ \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u043a\u0430     Mesh-&gt;SetMobility(EComponentMobility::Static);     Mesh-&gt;SetupAttachment(RootScene);      Collision = CreateDefaultSubobject&lt;UBoxComponent&gt;(TEXT(&quot;CollisionComp&quot;)); \/\/ \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u0435 \u043e\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432     Collision-&gt;SetMobility(EComponentMobility::Static);     Collision-&gt;SetupAttachment(Mesh);      OverlapWithNearDestroyable = CreateDefaultSubobject&lt;UBoxComponent&gt;(TEXT(&quot;OverlapWithNearDestroyableComp&quot;)); \/\/ \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0438\u0449\u0443\u0449\u0438\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0431\u043b\u0438\u0437\u043e\u0441\u0442\u0438     OverlapWithNearDestroyable-&gt;SetMobility(EComponentMobility::Static);     OverlapWithNearDestroyable-&gt;SetupAttachment(Mesh);      Force = CreateDefaultSubobject&lt;URadialForceComponent&gt;(TEXT(&quot;RadialForceComp&quot;)); \/\/ \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u0438\u043b\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0438     Force-&gt;SetMobility(EComponentMobility::Static);     Force-&gt;SetupAttachment(RootScene);     Force-&gt;Radius = 100.f;     Force-&gt;bImpulseVelChange = true;     Force-&gt;AddCollisionChannelToAffect(ECC_WorldDynamic);      \/* \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 *\/     Mesh-&gt;SetCollisionObjectType(ECC_WorldDynamic);     Mesh-&gt;SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);     Mesh-&gt;SetCollisionResponseToAllChannels(ECR_Block);     Mesh-&gt;SetCollisionResponseToChannel(ECC_Visibility, ECR_Ignore);     Mesh-&gt;SetCollisionResponseToChannel(ECC_Camera, ECR_Ignore);     Mesh-&gt;SetCollisionResponseToChannel(ECC_CameraFadeOverlap, ECR_Overlap);     Mesh-&gt;SetCollisionResponseToChannel(ECC_Interaction, ECR_Ignore);     Mesh-&gt;SetCanEverAffectNavigation(false);      Collision-&gt;SetBoxExtent(FVector(50.f, 50.f, 50.f));     Collision-&gt;SetCollisionObjectType(ECC_WorldDynamic);     Collision-&gt;SetCollisionEnabled(ECollisionEnabled::QueryOnly);     Collision-&gt;SetCollisionResponseToAllChannels(ECR_Ignore);     Collision-&gt;SetCollisionResponseToChannel(ECC_Melee, ECR_Overlap);     Collision-&gt;SetCollisionResponseToChannel(ECC_Pawn, ECR_Overlap);     Collision-&gt;SetCollisionResponseToChannel(ECC_Projectile, ECR_Overlap);     Collision-&gt;SetCanEverAffectNavigation(false);       Collision-&gt;OnComponentBeginOverlap.AddDynamic(this, &amp;ADestroyable::OnBeginOverlap);     Collision-&gt;OnComponentEndOverlap.AddDynamic(this, &amp;ADestroyable::OnEndOverlap);      OverlapWithNearDestroyable-&gt;SetBoxExtent(FVector(40.f, 40.f, 40.f));     OverlapWithNearDestroyable-&gt;SetCollisionObjectType(ECC_WorldDynamic);     OverlapWithNearDestroyable-&gt;SetCollisionEnabled(ECollisionEnabled::NoCollision); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u043a\u0430\u0434\u0440 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044f     OverlapWithNearDestroyable-&gt;SetCollisionResponseToAllChannels(ECR_Ignore);     OverlapWithNearDestroyable-&gt;SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Overlap);     OverlapWithNearDestroyable-&gt;CanCharacterStepUp(false);     OverlapWithNearDestroyable-&gt;SetCanEverAffectNavigation(false);  }<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 Begin Play \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0438\u0445:<\/p>\n<ul>\n<li>\u0418\u0449\u0435\u043c \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441 \u0442\u044d\u0433\u043e\u043c \u00abdest\u00bb;<\/li>\n<li>\u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0447\u0430\u0441\u0442\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0443\u043c\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c;<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c;<\/li>\n<li>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432 Begin Play<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void ADestroyable::ConfigureBreakablesOnStart() {     Mesh-&gt;SetCullDistance(BaseMeshMaxDrawDistance); \/\/ \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u0430\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0438      for (UStaticMeshComponent* Comp : GetBreakableComponents()) \/\/ \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438      {         Comp-&gt;SetCollisionEnabled(ECollisionEnabled::NoCollision); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f         Comp-&gt;SetCollisionResponseToAllChannels(ECR_Ignore); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0435         Comp-&gt;SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Block);         Comp-&gt;SetMobility(EComponentMobility::Static); \/\/ \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u043c \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f         Comp-&gt;SetHiddenInGame(true); \/\/ \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c, \u0434\u043e \u043d\u0435\u0433\u043e \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0441\u0435\u0442\u043a\u0430     } }<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0447\u0430\u0441\u0442\u0435\u0439<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">TArray&lt;UStaticMeshComponent*&gt; ADestroyable::GetBreakableComponents() {     if (BreakableComponents.Num() == 0) \/\/ \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043a\u044d\u0448\u0435?     {         TInlineComponentArray&lt;UStaticMeshComponent*&gt; ComponentsByClass; \/\/\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0435\u0442\u043a\u0438         GetComponents(ComponentsByClass);          TArray&lt;UStaticMeshComponent*&gt; ComponentsByTag; \/\/ \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441 \u0442\u044d\u0433\u043e\u043c \u00abdest\u00bb         ComponentsByTag.Reserve(ComponentsByClass.Num());         for (UStaticMeshComponent* Component : ComponentsByClass)         {             if (Component-&gt;ComponentHasTag(TEXT(&quot;dest&quot;)))             {                 ComponentsByTag.Push(Component);             }         }         BreakableComponents = ComponentsByTag; \/\/ \u0445\u0440\u0430\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f     }     return BreakableComponents; }<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h4>\u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044f<\/h4>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0441\u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>  <b>OnOverlap<\/b><\/p>\n<p>  \u0420\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u0431\u0440\u043e\u0441\u0430\u0435\u0442 \u0438\u043b\u0438 \u043a\u0430\u043a\u0438\u043c-\u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0440\u0435\u0434\u043c\u0435\u0442, \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0430\u0442\u044f\u0449\u0438\u0439\u0441\u044f \u043c\u044f\u0447.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1ff\/b81\/c22\/1ffb81c22cad309711f046a250547793.png\" alt=\"image\"><\/p>\n<p>  <b>OnTakeDamage<\/b><\/p>\n<p>  \u0420\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0440\u043e\u043d.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ac8\/273\/28e\/ac827328ed079d7899a84aa39dc3bd02.png\" alt=\"image\"><\/p>\n<p>  <b>OnOverlapWithNearDestroyable<\/b><\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043e\u043d\u0438 \u043e\u0431\u0430 \u043b\u043e\u043c\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/74f\/6f8\/57b\/74f6f857bac5e8147b5c6f39dbcdf2a4.png\" alt=\"image\"><\/p>\n<h4>\u0424\u043b\u043e\u0443 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/h4>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-4.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/bb8\/ab9\/5f9\/bb8ab95f9acd986be6b614efa3fcfe7d.png\" alt=\"image\"><\/a><br \/>  <i>\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u043e\u043a\u0430\u0437 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void ADestroyable::ShowBreakables(FVector DealerLocation, bool ByOtherDestroyable \/*= false*\/) {     float ImpulseStrength = ByOtherDestroyable ? -500.f : -1000.f; \/\/ \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430     FVector Impulse = (DealerLocation - GetActorLocation()).GetSafeNormal() * ImpulseStrength; \/\/ \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u043d \u0438\u0441\u0445\u043e\u0434\u0438\u0442     for (UStaticMeshComponent* Comp : GetBreakableComponents()) \/\/ \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u0441\u0435 \u0447\u0430\u0441\u0442\u0438      {         Comp-&gt;SetMobility(EComponentMobility::Movable); \/\/\u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0444\u0438\u0437\u0438\u043a\u0438         FBodyInstance* RootBI = Comp-&gt;GetBodyInstance(NAME_None, false);         if (RootBI)         {             RootBI-&gt;bGenerateWakeEvents = true; \/\/ \u0444\u0438\u0437\u0438\u043a\u0430 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0447\u0430\u0441\u0442\u044f\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430              if (PartsGenerateHitEvent)             {                 RootBI-&gt;bNotifyRigidBodyCollision = true; \/\/ \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f OnComponentHit                 Comp-&gt;OnComponentHit.AddDynamic(this, &amp;ADestroyable::OnPartHitCallback); \/\/ \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0430 \u043d\u0435\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432             }         }          Comp-&gt;SetHiddenInGame(false); \/\/ \u043f\u043e\u043a\u0430\u0437 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430          Comp-&gt;SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); \/\/ \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439         Comp-&gt;SetSimulatePhysics(true); \/\/ \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0444\u0438\u0437\u0438\u043a\u0438         Comp-&gt;AddImpulse(Impulse, NAME_None, true); \/\/ \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u0430           if (ByOtherDestroyable)             Comp-&gt;AddAngularImpulseInRadians(Impulse * 5.f); \/\/\u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0432\u043d\u043e\u0441\u0438\u0442 \u0432\u043a\u043b\u0430\u0434 \u0432 \u0438\u043c\u043f\u0443\u043b\u044c\u0441, \u0442\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e          \/\/\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0447\u0430\u0441\u0442\u0435\u0439          Comp-&gt;SetCullDistance(PartsMaxDrawDistance);          Comp-&gt;OnComponentSleep.AddDynamic(this, &amp;ADestroyable::OnPartPutToSleep); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0444\u0438\u0437\u0438\u043a\u0443 \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0439     } }<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044f<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void ADestroyable::Break(AActor* InBreakingActor, bool ByOtherDestroyable \/*= false*\/) {     if (bDestroyed) \/\/ \u043e\u0431\u044a\u0435\u043a\u0442 \u0443\u0436\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d, \u043d\u0438\u0447\u0435\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e         return;      bDestroyed = true;     Mesh-&gt;SetHiddenInGame(true); \/\/ \u0441\u043a\u0440\u044b\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u043a\u0443     Mesh-&gt;SetCollisionEnabled(ECollisionEnabled::NoCollision); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u043e\u0439     Collision-&gt;SetCollisionEnabled(ECollisionEnabled::NoCollision); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u043f\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044e     OverlapWithNearDestroyable-&gt;SetCollisionEnabled(ECollisionEnabled::NoCollision);      ShowBreakables(InBreakingActor-&gt;GetActorLocation(), ByOtherDestroyable); \/\/ show parts      Force-&gt;bImpulseVelChange = !ByOtherDestroyable; \/\/ \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0441\u0438\u043b\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u0431\u0438\u043b\u0430\u0441\u044c \u0434\u0440\u0443\u0433\u0438\u043c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c     Force-&gt;FireImpulse(); \/\/ \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u044f \u0440\u0430\u0434\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u043b\u044b      \/* \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 *\/     OverlapWithNearDestroyable-&gt;SetCollisionEnabled(ECollisionEnabled::QueryOnly); \/\/ \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0431\u043b\u0438\u0437\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432     TArray&lt;AActor*&gt; OtherOverlapingDestroyables;     OverlapWithNearDestroyable-&gt;GetOverlappingActors(OtherOverlapingDestroyables, ADestroyable::StaticClass()); \/\/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0431\u043e\u043a\u0441\u0435     for (AActor* OtherActor : OtherOverlapingDestroyables)     {         if (OtherActor == this)             continue;          if (ADestroyable* OtherDest = Cast&lt;ADestroyable&gt;(OtherActor))         {             if (OtherDest-&gt;IsDestroyed()) \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043d\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d \u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442                 continue;              OtherDest-&gt;Break(this, true); \/\/ \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0431\u043b\u0438\u0437\u043b\u0435\u0436\u0430\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430         }     }      OverlapWithNearDestroyable-&gt;SetCollisionEnabled(ECollisionEnabled::NoCollision); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439      GetWorld()-&gt;GetTimerManager().SetTimer(ForceSleepTimerHandle, this, &amp;ADestroyable::ForceSleep, FORCESLEEPDELAY, false); \/\/ \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u043d\u0430, \u0435\u0441\u043b\u0438 \u0432 \u0444\u0438\u0437\u0438\u043a\u0435 \u043d\u0435 \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439          if(bDestroyAfterDelay)         GetWorld()-&gt;GetTimerManager().SetTimer(DestroyAfterBreakTimerHandle, this, &amp;ADestroyable::DestroyAfterBreaking, DESTROYACTORDELAY, false); \/\/ \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u0430\u043a\u0442\u0435\u0440\u0430      OnBreakBP(InBreakingActor, ByOtherDestroyable); \/\/ blueprint \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0430\u0443\u0434\u0438\u043e\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h4>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0441\u043d\u0430<\/h4>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f Sleep, \u043c\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0444\u0438\u0437\u0438\u043a\u0443\/\u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0441 \u0444\u0438\u0437\u0438\u043a\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c \u0441\u043d\u0430. \u041f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043a \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0438.<\/p>\n<p>  \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u0441\u0443\u0449\u0430 \u043b\u044e\u0431\u043e\u043c\u0443 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0443. \u041c\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043a \u043d\u0435\u0439 \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c.<\/p>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0440\u0435\u0436\u0438\u043c \u0441\u043d\u0430 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043e\u043d \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0438\u0437\u0438\u043a\u0443, \u043c\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c \u0441\u043d\u0430 \u0441\u043f\u0443\u0441\u0442\u044f 15 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043d\u0430, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u043c<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void ADestroyable::OnPartPutToSleep(UPrimitiveComponent* InComp, FName InBoneName) {     InComp-&gt;SetSimulatePhysics(false); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0444\u0438\u0437\u0438\u043a\u0438      InComp-&gt;SetCollisionEnabled(ECollisionEnabled::NoCollision); \/\/ \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439     InComp-&gt;SetMobility(EComponentMobility::Static); \/\/ \u0441 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0439     \/* \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u0442\u0430\u043b\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0430 \u0438 \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u043c\u0438\u0440\u043e\u043c *\/ } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h4>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c<\/h4>\n<p>  \u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u0442\u044c \u0430\u043a\u0442\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0438\u0433\u0440\u043e\u043a \u0434\u0430\u043b\u0435\u043a\u043e). \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0441\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0440\u0430\u0437\u0440\u0443\u0448\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0438\u0433\u0440\u043e\u043a\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void ADestroyable::DestroyAfterBreaking() {     if (IsPlayerNear()) \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u043e\u0433\u043e, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u0438\u0433\u0440\u043e\u043a \u043f\u043e\u0431\u043b\u0438\u0437\u043e\u0441\u0442\u0438     {         \/\/\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u0437\u0436\u0435         GetWorld()-&gt;GetTimerManager().SetTimer(DestroyAfterBreakTimerHandle, this, &amp;ADestroyable::DestroyAfterBreaking, DESTROYACTORDELAY, false);     }     else     {         GetWorld()-&gt;GetTimerManager().ClearTimer(DestroyAfterBreakTimerHandle); \/\/ \u0441\u0431\u0440\u043e\u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u0430         Destroy(); \/\/ \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0430\u043a\u0442\u0435\u0440\u0430 \u0441\u0446\u0435\u043d\u044b     } }<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<h4>\u0412\u044b\u0437\u043e\u0432 \u0443\u0437\u043b\u0430 OnHit \u0434\u043b\u044f \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/h4>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Blueprints \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0430\u0443\u0434\u0438\u043e\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0438\u0433\u0440\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u044f Blueprints \u0442\u0430\u043c, \u0433\u0434\u0435 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<pre><code class=\"cpp\">void ADestroyable::OnPartHitCallback(UPrimitiveComponent* HitComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, FVector NormalImpulse, const FHitResult&amp; Hit) {     OnPartHitBP(Hit, NormalImpulse, HitComp, OtherComp); \/\/ blueprint \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0430\u0443\u0434\u0438\u043e\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b }<\/code><\/pre>\n<p>  <\/p>\n<h4>End Play \u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0430<\/h4>\n<p>  \u0412 \u043d\u0430\u0448\u0443 \u0438\u0433\u0440\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430\u0445. \u0412\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0432 EndPlay \u0432\u0441\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e.<\/p>\n<pre><code class=\"cpp\">void ADestroyable::EndPlay(const EEndPlayReason::Type EndPlayReason) {     \/* \u0441\u0431\u0440\u043e\u0441 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 *\/     GetWorld()-&gt;GetTimerManager().ClearTimer(DestroyAfterBreakTimerHandle);     GetWorld()-&gt;GetTimerManager().ClearTimer(ForceSleepTimerHandle);     Super::EndPlay(EndPlayReason); }<\/code><\/pre>\n<p>  <\/p>\n<h4>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432 Blueprints<\/h4>\n<p>  \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0441\u0442\u0430. \u0412\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442\u0435 \u0447\u0430\u0441\u0442\u0438, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u043a \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0435, \u0438 \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442\u0435 \u0438\u0445 \u043a\u0430\u043a \u00abdest\u00bb. \u0412\u043e\u0442 \u0438 \u0432\u0441\u0435.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-5.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6cb\/202\/d83\/6cb202d83785da84ca9b9575a10d04d9.png\" alt=\"image\"><\/a><\/p>\n<p>  \u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u0434\u0432\u0438\u0436\u043a\u0435.<\/p>\n<p>  \u041d\u0430\u0448 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 Blueprint \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0443\u0434\u0438\u043e\u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0438\u0437 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u043d\u0430 C ++.<\/p>\n<p>  <b>BeginPlay<\/b> \u2014 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0430\u0441\u0441\u0435\u0442\u044b. \u041f\u043e \u0441\u0443\u0442\u0438, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0430\u0441\u0441\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432. \u0416\u0435\u0441\u0442\u043a\u043e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0444\u0435\u0440\u0435\u043d\u0441\u044b \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0443\u0432\u0435\u043b\u0438\u0447\u0430\u0442 \u0432\u0440\u0435\u043c\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430\/\u0438\u0433\u0440\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c1d\/009\/4f6\/c1d0094f6431038473500593bf604c58.png\" alt=\"image\"><\/p>\n<p>  <b>On Break Event<\/b> \u2014 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u0437\u0432\u0443\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f. \u0417\u0434\u0435\u0441\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b Niagara, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-7.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/333\/bca\/adf\/333bcaadfd68d22be80273ada13a506b.png\" alt=\"image\"><\/a><\/p>\n<p>  <b>On Part Hit Event<\/b> \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0438 \u0437\u0432\u0443\u043a\u0438 \u0443\u0434\u0430\u0440\u043e\u0432.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-8.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7e0\/11b\/fef\/7e011bfefc2c6e17c5f3ec2b43b8ba51.png\" alt=\"image\"><\/a><\/p>\n<h4>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0439<\/h4>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/docs.unrealengine.com\/en-US\/Engine\/Editor\/ScriptingAndAutomation\/Blueprints\/ScriptedActions\/index.html\">Utility Blueprint<\/a> \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0430\u0441\u0441\u0435\u0442\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u043b\u0438\u0437\u0438\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u042d\u0442\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e.<\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-27.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/255\/f38\/1f2\/255f381f2632ab7c418b2c40db635f1b.png\" alt=\"image\"><\/a><\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-26.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/948\/be1\/1eb\/948be11eb8a29ad191c56ea41e611e04.png\" alt=\"image\"><\/a><\/p>\n<h4>\u042d\u0444\u0444\u0435\u043a\u0442\u044b \u0447\u0430\u0441\u0442\u0438\u0446 \u0432 Niagara<\/h4>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0432 <a href=\"https:\/\/docs.unrealengine.com\/en-US\/Engine\/Niagara\/index.html\">Niagara<\/a>.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/eP3QOMG0ZJ.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%;\"><video controls style=\"top: 0; left: 0; width: 100%; height: 100%; position: absolute;\">Your browser does not support HTML5 video.<source src=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/T6E1TmEtb5.mp4\" type=\"video\/mp4\"><\/source><\/video><\/div>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b<\/h4>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/60d\/35e\/e7a\/60d35ee7a5329b2921aff524d1bffd51.png\" alt=\"image\"><\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-11.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c12\/265\/623\/c12265623ffb7c9662186d04c7c91644.png\" alt=\"image\"><\/a><\/p>\n<p>  \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430, \u0430 \u043d\u0435 \u0448\u0435\u0439\u0434\u0435\u0440, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439.<\/p>\n<p>  \u042d\u0440\u043e\u0437\u0438\u044f, \u0446\u0432\u0435\u0442 \u0438 \u0430\u043b\u044c\u0444\u0430 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 Niagara.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0c7\/8d0\/2fe\/0c78d02fe56bac8d5b060b9454486b92.png\" alt=\"image\"><br \/>  <i>\u041a\u0430\u043d\u0430\u043b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b R<\/i><\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/43c\/5ae\/7d9\/43c5ae7d9fa080be3ad622efb50c0102.png\" alt=\"image\"><br \/>  <i>\u041a\u0430\u043d\u0430\u043b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b G<\/i><\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0435\u0449\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043d\u0430\u043b B, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043d\u043e \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043c \u043e\u043d \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<h4>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b Niagara<\/h4>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0432\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b Niagara: \u043e\u0434\u043d\u0443 \u0434\u043b\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0430 \u0440\u0430\u0437\u0440\u044b\u0432\u0430 (\u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0434\u043b\u044f \u043f\u043e\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u0438\u0446), \u0430 \u0434\u0440\u0443\u0433\u0443\u044e \u2014 \u043f\u0440\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0434\u0435\u0442\u0430\u043b\u0435\u0439 (\u0431\u0435\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b7b\/27b\/a95\/b7b27ba95985619374c390b71128b0de.png\" alt=\"image\"><br \/>  <i>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0446\u0432\u0435\u0442 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043f\u0430\u0443\u043d\u043e\u0432 \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043f\u0430\u0443\u043d\u0430 \u0447\u0430\u0441\u0442\u0438\u0446<\/i><\/p>\n<h4>Niagara Spawn Burst<\/h4>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/bb0\/d57\/e06\/bb0d57e0683f1dc04380ef9eebf423ce.png\" alt=\"image\"><br \/>  <i>\u0417\u0434\u0435\u0441\u044c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c int32 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430<\/i><\/p>\n<h4>Niagara Particle Spawn<\/h4>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-17.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f1e\/d1d\/ef0\/f1ed1def07f0e8ee9f1f8e867ec4f844.png\" alt=\"image\"><\/a><\/p>\n<ul>\n<li>\u041e\u0442\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0438\u0437 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432;<\/li>\n<li>\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u044f \u0436\u0438\u0437\u043d\u0438 (Lifetime), \u043c\u0430\u0441\u0441\u0443 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440;<\/li>\n<li>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0446\u0432\u0435\u0442 \u0438\u0437 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 (\u043e\u043d \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u043c \u0430\u043a\u0442\u0435\u0440\u043e\u043c);<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u0445 \u0441\u0435\u0442\u043a\u0438,<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f.<\/li>\n<\/ul>\n<p>  <\/p>\n<h4>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438<\/h4>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0432 Niagara, \u043d\u0430 \u0432\u0430\u0448\u0435\u0439 \u0441\u0435\u0442\u043a\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0436\u043e\u043a AllowCPU.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e3a\/2c2\/c1d\/e3a2c2c1d9cc95753425090d2c40b483.png\" alt=\"image\"><\/p>\n<p>  <b>\u0421\u041e\u0412\u0415\u0422:<\/b> \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 (4.24) \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0432\u0438\u0436\u043a\u0430, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0435 \u0441\u0432\u043e\u044e \u0441\u0435\u0442\u043a\u0443, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u043e\u0448\u0435\u043d\u043e \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0410 \u0432 \u0434\u043e\u0441\u0442\u0430\u0432\u043e\u0447\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435, \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 Niagara \u0441 \u0441\u0435\u0442\u043a\u043e\u0439, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0426\u041f, \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0441\u0431\u043e\u0439.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0443 \u0441\u0435\u0442\u043a\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cpp\">bool UFunctionLibrary::MeshHaveCPUAccess(UStaticMesh* InMesh) {     return InMesh-&gt;bAllowCPUAccess; }<\/code><\/pre>\n<p>  \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Blueprints \u0434\u043e Niagara.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ca9\/afe\/9c1\/ca9afe9c11df6678796147d93b210f67.png\" alt=\"image\"><\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e Base Mesh AllowCPUAccess.<\/p>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u043a\u043e\u0434 \u043d\u0430 Python, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0449\u0435\u0442 \u0432\u0441\u0435 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u0426\u041f \u043a \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0441\u0435\u0442\u043a\u0435.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u043d\u0430 Python \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 allow_cpu_access \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">import unreal as ue  asset_registry = ue.AssetRegistryHelpers.get_asset_registry() all_assets = asset_registry.get_assets_by_path('\/Game\/Blueprints\/Actors\/Destroyables', recursive=True) #\u0437\u0434\u0435\u0441\u044c \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 blueprints \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 for asset in all_assets:     path = asset.object_path     bp_gc = ue.EditorAssetLibrary.load_blueprint_class(path) #get blueprint class     bp_cdo = ue.get_default_object(bp_gc) # get the Class Default Object (CDO) of the generated class     if bp_cdo.mesh.static_mesh != None:         ue.EditorStaticMeshLibrary.set_allow_cpu_access(bp_cdo.mesh.static_mesh, True) # sets allow cpu on static mesh<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b <a href=\"https:\/\/docs.unrealengine.com\/en-US\/Engine\/Editor\/ScriptingAndAutomation\/Python\/index.html\">py<\/a> \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u0434\u0430 \u0432 <a href=\"https:\/\/docs.unrealengine.com\/en-US\/Engine\/UMG\/UserGuide\/EditorUtilityWidgets\/index.html\">Utility Widget<\/a>.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a3e\/86f\/604\/a3e86f6046ffb6f31158c96a0d43072f.png\" alt=\"image\"><\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-25.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/05c\/b76\/4d4\/05cb764d4cd9dcc6f44e3a6864e74a99.png\" alt=\"image\"><\/a><\/p>\n<h4>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0446 Niagara<\/h4>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image22.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/9d1\/e66\/990\/9d1e66990fd8c76c2662aa15f2ca0a26.png\" alt=\"image\"><\/a><\/p>\n<p>  <a href=\"https:\/\/kidswithsticks.com\/wp-content\/uploads\/2020\/08\/image-23.png\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b58\/513\/4c3\/b585134c30880fbc5bfba17c18902896.png\" alt=\"image\"><\/a><\/p>\n<p>  \u041f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u044b \u043f\u0440\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0435\u0449\u0438:<\/p>\n<ul>\n<li>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c Alpha Over Life,<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c curl noise,<\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c: <i>(Particles.RotRate * (0.8 \u2013 Particles.NormalizedAge)<\/i>;<\/li>\n<li>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0447\u0430\u0441\u0442\u0438\u0446 Size Over Life,<\/li>\n<li>\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430,<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0448\u0443\u043c\u0430.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041e\u0442\u0447\u0435\u0433\u043e \u0442\u0430\u043a\u043e\u0439 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u043b\u0434-\u0441\u043a\u0443\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434?<\/h2>\n<p>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0439 \u0438\u0437 UE4, \u043d\u043e \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u044b. \u041d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0443\u0436\u043d\u0430 \u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u043d\u0443\u0436\u0434 \u0441\u0442\u043e\u043b\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043a\u0430\u043a \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u0432\u0435\u0442 \u0441\u0430\u043c\u0438. \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u043e \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u043c.<\/p>\n<p>  \u0427\u0442\u043e \u0436\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f Chaos, \u043f\u043e\u0434\u043e\u0436\u0434\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432 \u043a \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u043b\u0438\u0437\u0443, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p><\/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\/company\/pixonic\/blog\/517684\/\"> https:\/\/habr.com\/ru\/company\/pixonic\/blog\/517684\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/company\/pixonic\/blog\/517684\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/dr\/ts\/-3\/drts-3hprxrnrbgz4clx6zvx9mc.jpeg\"><\/p>\n<p>  \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u0433\u0440\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u0435\u0435, \u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u043a\u0440\u0443\u0448\u0438\u0442\u044c \u043c\u0435\u0431\u0435\u043b\u044c, \u0440\u0430\u0441\u0442\u0435\u043d\u0438\u044f, \u0441\u0442\u0435\u043d\u044b, \u0437\u0434\u0430\u043d\u0438\u044f \u0438 \u0446\u0435\u043b\u044b\u0435 \u0433\u043e\u0440\u043e\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0435\u0441\u0435\u043b\u043e.<\/p>\n<p>  \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044f\u0440\u043a\u0438\u043c\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0438\u0433\u0440 \u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c Red Fraction: Guerrilla \u0441 \u0435\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0431\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043d\u043d\u0435\u043b\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u041c\u0430\u0440\u0441, Battlefield: Bad Company 2, \u0433\u0434\u0435 \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0435\u0441\u044c \u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u043f\u0435\u043f\u0435\u043b\u0438\u0449\u0435, \u0438 Control \u0441 \u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u043c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0433\u043b\u0430\u0437\u0430.<\/p>\n<p>  \u0412 2019 \u0433\u043e\u0434\u0443 Epic Games \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043b\u0430 \u0434\u0435\u043c\u043e \u043d\u043e\u0432\u043e\u0439 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0444\u0438\u0437\u0438\u043a\u0438 \u0438 \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u0439 <a href=\"https:\/\/docs.unrealengine.com\/en-US\/Engine\/Chaos\/ChaosDestruction\/index.html\">Chaos<\/a> \u0434\u0432\u0438\u0436\u043a\u0430 Unreal. \u041d\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430, \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 Niagara \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u044d\u043a\u043e\u043d\u043e\u043c\u043d\u044b\u043c \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. <\/p>\n<p>  \u0410 \u043f\u043e\u043a\u0430 Chaos \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0431\u0435\u0442\u0430-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e\u0431 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u0445 \u043a \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 Unreal Engine 4. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u043e\u043f\u0438\u0448\u0435\u043c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.  <\/p>\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-309405","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/309405","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=309405"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/309405\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=309405"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=309405"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=309405"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}