{"id":325357,"date":"2021-06-23T15:00:27","date_gmt":"2021-06-23T15:00:27","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=325357"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=325357","title":{"rendered":"\u041a\u0430\u043a \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u0430\u043c\u0435\u0440 \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 TPS \u0438\u0433\u0440\u044b"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8b2\/aed\/7dd\/8b2aed7dd0f53758557484fa33942e83.jpg\" width=\"3840\" height=\"2160\"><figcaption><\/figcaption><\/figure>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0\">\u0420\u0435\u0448\u0430\u0435\u043c\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/a><\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u043c\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0432 \u0431\u043e\u044e<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043c\u0435\u0440\u0430 \u043d\u0430 \u0431\u0435\u0433\u0443<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043c\u0435\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%A6%D0%B5%D0%BB%D0%B8\">\u0426\u0435\u043b\u0438 \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B\">\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a><\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u041a\u0430\u043c\u0435\u0440\u0430 \u043c\u043e\u0434 \u0438 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<ul>\n<li>\n<p>\u0420\u0435\u0436\u0438\u043c\u044b \u043a\u0430\u043c\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0\" id=\"\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\"><\/a><\/p>\n<h2>\u0420\u0435\u0448\u0430\u0435\u043c\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/h2>\n<p>\u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u0410\u0410\u0410 \u0438\u0433\u0440\u0430\u0445 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0430\u043c\u0435\u0440\u0443 \u043e\u0442 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043b\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0433\u0440\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f, \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043b\u0430\u043d\u044b. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0443\u0441\u0442\u0440\u043e\u0444\u043e\u0431\u0438\u0438 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435. \u0418\u043d\u043e\u0433\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u043f\u043b\u0430\u043d, \u0438 \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u0438 \u0438\u0433\u0440\u043e\u043a\u0430. \u041d\u043e \u0447\u0430\u0449\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0443 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0438 \u0445\u043e\u0447\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<strong> <\/strong>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442, \u0438 \u043d\u0435 \u0432\u044b\u043d\u0443\u0436\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p><strong>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u043c\u0435\u0440\u044b<\/strong><\/p>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0431\u043e\u043a\u0443. \u041c\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0433\u0440\u043e\u043a \u0432\u0438\u0434\u0435\u043b \u043a\u0443\u0434\u0430 \u043e\u043d \u0438\u0434\u0451\u0442.&nbsp;<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3a1\/192\/b4e\/3a1192b4e3011ab217bbdd78ee3c97a4.jpg\" alt=\"The Last of us Part II\" title=\"The Last of us Part II\" width=\"1692\" height=\"590\"><figcaption>The Last of us Part II<\/figcaption><\/figure>\n<p><strong>\u041f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435<\/strong><\/p>\n<p>\u041f\u0440\u0438 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u0435 \u043e\u0442 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043b\u0438\u0446\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443, \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c FoV (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%BE%D0%BB%D0%B5_%D0%B7%D1%80%D0%B5%D0%BD%D0%B8%D1%8F\"><u>Field of View<\/u><\/a>), \u0447\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0446\u0435\u043b\u044c. \u0418 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0430\u043c\u0435\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0446\u0435\u043b\u0438\u043c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u0433\u0440\u043e\u0432\u044b\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ce2\/5bc\/119\/ce25bc1198ac42c1ed99cb2b56ab283f.jpg\" alt=\"Division 2\" title=\"Division 2\" width=\"1693\" height=\"590\"><figcaption>Division 2<\/figcaption><\/figure>\n<p><strong>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0432 \u0431\u043e\u044e<\/strong><\/p>\n<p>\u0412 \u0431\u043e\u044e \u043c\u044b \u043e\u0442\u0434\u0430\u043b\u044f\u0435\u043c \u043a\u0430\u043c\u0435\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u0438\u0433\u0440\u043e\u043a \u0432\u0438\u0434\u0435\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0433\u043e \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u0442\u044c, \u043e\u0442 \u043a\u043e\u0433\u043e \u0443\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d7d\/a63\/9be\/d7da639be4693760d43c08e18b85e9c5.jpg\" alt=\"Assassin's Creed Odyssey\" title=\"Assassin's Creed Odyssey\" width=\"1693\" height=\"590\"><figcaption>Assassin&#8217;s Creed Odyssey<\/figcaption><\/figure>\n<p><strong>\u041a\u0430\u043c\u0435\u0440\u0430 \u043d\u0430 \u0431\u0435\u0433\u0443<\/strong><\/p>\n<p>\u0412 \u0441\u043f\u0440\u0438\u043d\u0442\u0435 \u0432\u044b\u0433\u043e\u0434\u043d\u043e \u043e\u0442\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0443\u0433\u043e\u043b \u043e\u0431\u0437\u043e\u0440\u0430 FoV. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u044d\u043a\u0440\u0430\u043d \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u0438\u0433\u0440\u043e\u043a \u0443\u0441\u043f\u0435\u0432\u0430\u043b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0422\u0430\u043a\u0436\u0435 FoV \u0434\u0430\u0451\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432 \u0438\u0433\u0440\u0430\u0445 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c4d\/04d\/924\/c4d04d9241036cde48ba933ac30fb75e.jpg\" alt=\"Batman\u200b Arkham Knight\" title=\"Batman\u200b Arkham Knight\" width=\"1692\" height=\"590\"><figcaption>Batman\u200b Arkham Knight<\/figcaption><\/figure>\n<p><strong>\u041a\u0430\u043c\u0435\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439<\/strong><\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u0412 \u0438\u0433\u0440\u0430\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043d\u0430\u0442 \u0438 \u0437\u0434\u0430\u043d\u0438\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445, \u043d\u043e \u043e\u043d\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u0442\u0435\u0441\u043d\u044f\u044e\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0438 \u043a\u0430\u043c\u0435\u0440\u044b. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043c\u0435\u0440\u0430 \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0435 \u00ab\u0441\u043f\u043e\u0442\u044b\u043a\u0430\u043b\u0430\u0441\u044c\u00bb \u043e\u0431 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u043c\u044b \u0434\u0435\u0440\u0436\u0438\u043c \u043a\u0430\u043c\u0435\u0440\u0443 \u0431\u043b\u0438\u0436\u0435 \u043a \u0438\u0433\u0440\u043e\u043a\u0443. \u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u043e\u0441\u0442\u0438 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0433\u0440\u043e\u043a\u0443 \u043e\u0449\u0443\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u0432 \u0442\u0435\u0441\u043d\u043e\u0442\u0435. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a65\/bfc\/346\/a65bfc346eb01f056a49a26ae5909149.jpg\" alt=\"Red Dead Redemption 2\" title=\"Red Dead Redemption 2\" width=\"1692\" height=\"590\"><figcaption>Red Dead Redemption 2<\/figcaption><\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 40. \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A6%D0%B5%D0%BB%D0%B8\" id=\"\u0426\u0435\u043b\u0438\"><\/a><\/p>\n<h2>\u0426\u0435\u043b\u0438 \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<ol>\n<li>\n<p><strong>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0444\u0438\u043b.<\/strong>&nbsp;\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0410\u0410\u0410-\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445.&nbsp;<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/strong>. \u0412\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0431\u0435\u0437 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c<\/strong>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443.<\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B\" id=\"\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b\"><\/a><\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<p>\u0412<a href=\"#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B\"> <\/a>\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<h4>\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0440\u0435\u0436\u0438\u043c \u043a\u0430\u043c\u0435\u0440\u044b<\/h4>\n<p>\u0420\u0435\u0436\u0438\u043c \u043a\u0430\u043c\u0435\u0440\u044b (camera mode) \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a DataAsset, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u0443 \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. <\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 camera mode \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a:<\/p>\n<p><strong>Pitch<\/strong>. \u0412\u0432\u0435\u0440\u0445\/\u0432\u043d\u0438\u0437.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/142\/826\/472\/142826472d0080c2527d049e84699d20.gif\" width=\"750\" height=\"422\"><figcaption><\/figcaption><\/figure>\n<p><strong>Yaw<\/strong>. \u0412\u043b\u0435\u0432\u043e\/\u0432\u043f\u0440\u0430\u0432\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3c5\/3df\/021\/3c53df021ea3c6bdf2d814bdf8eab503.gif\" width=\"750\" height=\"422\"><figcaption><\/figcaption><\/figure>\n<p><strong>Roll<\/strong>. \u0412\u0440\u0430\u0449\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/52d\/e88\/d01\/52de88d01dff83215ba0afc0f9a85fbf.gif\" width=\"750\" height=\"422\"><figcaption><\/figcaption><\/figure>\n<p><strong>Distance<\/strong>. \u0418\u043b\u0438 Arm Length \u0432 UE4. \u0414\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0434\u043e \u0438\u0433\u0440\u043e\u043a\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4f3\/714\/8bf\/4f37148bf0dc266c01b235f992a17408.gif\" width=\"750\" height=\"422\"><figcaption><\/figcaption><\/figure>\n<p><strong>Offset<\/strong>. \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/655\/8fe\/edc\/6558feedce94818cdceaf4f0435dc7d9.gif\" width=\"750\" height=\"422\"><figcaption><\/figcaption><\/figure>\n<p><strong>FoV.<\/strong> \u041f\u043e\u043b\u0435 \u0437\u0440\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ff\/51e\/85c\/9ff51e85ce1f65ac0fb232dba5ebd32b.gif\" width=\"750\" height=\"422\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0435\u0451 \u0432 \u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c camera mode. <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/276\/cb6\/66a\/276cb666af843945d0af05bb410bc220.gif\" width=\"500\" height=\"281\"><figcaption><\/figcaption><\/figure>\n<h4>\u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h4>\n<p>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (subsystems) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430\u043c\u0438, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u043c\u0438 \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a.&nbsp;<\/p>\n<p>\u042d\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>Subsystem pitch position<\/strong> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u0430\u043c\u0435\u0440\u0443 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 Pitch \u0438 Yaw \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0438\u0433\u0440\u043e\u043a\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dc5\/255\/fee\/dc5255fee7de75ad03ab91273c7339b3.gif\" width=\"750\" height=\"422\"><figcaption><\/figcaption><\/figure>\n<p><strong>Subsystem auto rotation<\/strong> \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043c\u0435\u0440\u0443 \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u043e\u043a\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/014\/5c0\/749\/0145c07491f54c0fc4f06225bee1f7b2.gif\" width=\"750\" height=\"422\"><figcaption><\/figcaption><\/figure>\n<p><strong>Subsystem focus target <\/strong>\u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0444\u043e\u043a\u0443\u0441 \u043d\u0430 \u0446\u0435\u043b\u044c \u0432 \u0431\u043e\u044e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e3b\/a9b\/99d\/e3ba9b99d19f3ec344568cf9149e6a7e.gif\" width=\"650\" height=\"366\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0442\u0430\u043a\u0430\u044f subsystem \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0434\u043e\u0431\u0435\u043d \u043f\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u043f\u0440\u0438\u0447\u0438\u043d:<\/p>\n<ol>\n<li>\n<p>\u041d\u0435 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0443 \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0443\u0434\u0430 \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u0434\u043e\u043c \u0438 \u0431\u043b\u0443\u043f\u0440\u0438\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0430\u0441\u0441\u0435\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u043a \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0443\u0447\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 subsystems \u0441\u0440\u0430\u0437\u0443.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u0442\u043a\u0438\u0439 \u0438 \u044f\u0432\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f subsystems, \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043d\u0430 \u043a\u0430\u043c\u0435\u0440\u0443.<\/p>\n<\/li>\n<\/ol>\n<p><strong>Subsystems<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u0435\u043c\u0430, \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u0451 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0435\u0441\u0442\u044c. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u0438\u0437 \u0438\u0433\u0440\u044b, \u043d\u0435 \u0431\u044b\u043b \u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u0431\u0435\u0437 \u044d\u0442\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<h4>\u0422\u0440\u0435\u0442\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438<\/h4>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0440\u0435\u0436\u0438\u043c, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436. <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430:&nbsp;<\/p>\n<ol>\n<li>\n<p><strong>Base mode. <\/strong>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435 \u0432 \u0440\u0443\u043a\u0430\u0445.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u0443\u043b\u0438\u0446\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432 \u0440\u044f\u0434\u043e\u043c \u043d\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Battle mode.<\/strong> \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0432 \u0431\u043e\u044e.<\/p>\n<ul>\n<li>\n<p>\u0420\u044f\u0434\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0438.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0430\u043d\u043e\u0441\u0438\u0442 \u0443\u0434\u0430\u0440\u044b \u043f\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430\u043c.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Aim mode.<\/strong> \u041f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435.<\/p>\n<ul>\n<li>\n<p>\u0423 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 \u0440\u0443\u043a\u0430\u0445 \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0432\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Sprint mode.<\/strong> \u041a\u0430\u043c\u0435\u0440\u0430 \u043d\u0430 \u0431\u0435\u0433\u0443.<\/p>\n<ul>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0430\u0447\u0430\u043b \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Indoor mode.<\/strong> \u041a\u0430\u043c\u0435\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439.<\/p>\n<ul>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u043c \u0432 \u043a\u0430\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0438\u0433\u0440\u043e\u043a \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u041d\u043e \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0445\u043e\u0442\u044f\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:&nbsp;<\/p>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u043e\u044e \u0441 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430\u043c\u0438. \u0412\u043a\u043b\u044e\u0447\u0435\u043d <strong>Battle mode<\/strong> \u043a\u0430\u043c\u0435\u0440\u044b. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u043b \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0432\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c <strong>Aim mode<\/strong>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0443 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0430\u0446\u0438\u044f. \u041f\u043e\u0440\u044f\u0434\u043e\u043a, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435 <strong>Aim mode<\/strong> \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439, \u0447\u0435\u043c <strong>Battle mode<\/strong>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1bd\/92d\/c85\/1bd92dc8575388550cc9fc3c8e505652.jpg\" width=\"4792\" height=\"3338\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0443\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0433\u0438\u0431\u043a\u0430\u044f, \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0432 \u043f\u043b\u0430\u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0441\u043c\u0435\u043d\u044b camera mode, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u0435\u0439\u043c-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0431\u0430\u0437\u0438\u0440\u0443\u044e\u0449\u0443\u044e\u0441\u044f \u043d\u0430<strong> <\/strong><a href=\"https:\/\/docs.unrealengine.com\/4.26\/en-US\/ProgrammingAndScripting\/Tags\/\">gameplay tags<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" id=\"\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\"><\/a><\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<h4>\u0420\u0435\u0436\u0438\u043c\u044b \u043a\u0430\u043c\u0435\u0440\u044b<\/h4>\n<p>\u0414\u043b\u044f<a href=\"#%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\"> <\/a>\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c C++ \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 Third Person.<\/p>\n<p>\u041d\u0430\u0431\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 TMap, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447 \u2014 <a href=\"https:\/\/docs.unrealengine.com\/4.26\/en-US\/API\/Runtime\/GameplayTags\/FGameplayTag\/\">FGameplayTag<\/a>, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0433\u043e\u0432. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0433\u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0443\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0433\u043e\u0432, \u0433\u0435\u0442\u0442\u0435\u0440, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c GameplayTags \u0432 build.cs \u0444\u0430\u0439\u043b\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraSystemCharacter.h  public: DECLARE_EVENT_TwoParams(ACameraSystemCharacter, FOnTagContainerChanged, const FGameplayTag&amp; \/*ChangedTag*\/, bool \/*bExist*\/); FOnTagContainerChanged OnTagContainerChanged;  void AddTag(const FGameplayTag&amp; Tag); void RemoveTag(const FGameplayTag&amp; Tag); FGameplayTagContainer GetGameplayTags() const;  protected: TMap&lt;FGameplayTag, int32&gt; TagMap;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraSystemCharacter.\u0441\u0440\u0440  void ACameraSystemCharacter::AddTag(const FGameplayTag&amp; Tag) {    auto&amp; val = ++TagMap.FindOrAdd(Tag);    OnTagContainerChanged.Broadcast(Tag, val &gt; 0); } void ACameraSystemCharacter::RemoveTag(const FGameplayTag&amp; Tag) {    auto&amp; val = --TagMap.FindOrAdd(Tag);    OnTagContainerChanged.Broadcast(Tag, val &gt; 0); } FGameplayTagContainer ACameraSystemCharacter::GetGameplayTags() const {    FGameplayTagContainer tags; \t Algo::ForEach(TagMap, [&amp;](const auto&amp; it) { if (it.Value &gt; 0) tags.AddTag(it.Key); }); \t return tags; }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u0438 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443.&nbsp;<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.h  UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) class CAMERASYSTEMHABR_API UCameraModeComponent : public UActorComponent { \tGENERATED_BODY()  };<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f camera mode. \u041a\u0430\u0436\u0434\u044b\u0439 camera mode \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 DataAsset \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraMode.h  UCLASS(Abstract, Blueprintable, editinlinenew) class UCameraMode: public UDataAsset {   ... };<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 CameraModeComponent \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f&nbsp; \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c Camera mode \u0438 <a href=\"https:\/\/docs.unrealengine.com\/4.26\/en-US\/API\/Runtime\/GameplayTags\/FGameplayTagQuery\/\">FGameplayTagQuery<\/a><em>,<\/em> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8be\/031\/9ae\/8be0319ae3cb9275c8082ddaa3387679.png\" width=\"748\" height=\"404\"><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraMode.h  USTRUCT(BlueprintType) struct FCameraModeData { \tGENERATED_BODY() public: bool CanActivateMode(const FGameplayTagContainer&amp; TagsToCheck) const {   return ModeActivationConditions.IsEmpty() || ModeActivationConditions.Matches(TagsToCheck); }  UCameraMode* GetCameraMode() const { \treturn CameraMode; }  protected: \tUPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Instanced) \tUCameraMode* CameraMode;  \tUPROPERTY(EditDefaultsOnly, BlueprintReadOnly) \tFGameplayTagQuery ModeActivationConditions; };<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e camera mode, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e callback, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u0433\u043e\u0432 \u043d\u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.h  UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) class CAMERASYSTEMHABR_API UCameraModeComponent : public UActorComponent { \tGENERATED_BODY()    ...  protected: virtual void BeginPlay() override(); void OnAbilityTagChanged(const FGameplayTag&amp; Tag, bool TagExists);  protected: UPROPERTY(EditDefaultsOnly) TArray&lt;FCameraModeData&gt; CameraModes;  UPROPERTY() UCameraMode* CurrentCameraMode;  TWeakObjectPtr&lt;ACameraSystemCharacter&gt; Character;    ...  };<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.cpp  void UCameraModeComponent::BeginPlay() { \tSuper::BeginPlay();  \tCharacter = CastChecked&lt;ACameraSystemCharacter&gt;(GetOwner());  \tif (Character-&gt;IsLocallyControlled()) \t{ \t\tCharacter-&gt;OnTagContainerChanged.AddUObject(this, &amp;UCameraModeComponent::OnAbilityTagChanged)); \t} }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u043d\u044b \u0442\u0435\u0433\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 camera mode \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043f\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0438, \u0435\u0441\u043b\u0438 \u0434\u0430, \u0441\u043c\u0435\u043d\u0438\u0442\u044c camera mode \u043d\u0430 \u043d\u043e\u0432\u044b\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.cpp  void UCameraModeComponent::OnAbilityTagChanged(const FGameplayTag&amp; Tag, bool TagExists) {   SetCameraMode(DetermineCameraMode(Character-&gt;GetGameplayTags())); }  UCameraMode* UCameraModeComponent::DetermineCameraMode(const FGameplayTagContainer&amp; Tags) const {   if (auto foundMode = Algo::FindByPredicate(CameraModes, [&amp;](const auto modeData) {return modeData.CanActivateMode(Tags);})) { \treturn foundMode-&gt;GetCameraMode(); }    return nullptr; }  void UCameraModeComponent::SetCameraMode(UCameraMode* NewMode) { \tCurrentCameraMode = NewMode; }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0431\u0435\u0433\u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u041f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b \u043a\u0430\u043c\u0435\u0440\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u043f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f, \u0431\u043e\u044f \u0438 \u0442\u0434.<\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 ProjectSettings \u043d\u0430\u0434\u043e \u0437\u0430\u0432\u0435\u0441\u0442\u0438 gameplay tags \u0434\u043b\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0445 \u043d\u0430 \u043a\u0430\u043c\u0435\u0440\u0443. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436 \u0431\u0435\u0436\u0438\u0442.<\/p>\n<p>CharacterState.Sprint<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c17\/301\/0a2\/c173010a20fabde6200ce3b559a81fe8.png\" width=\"329\" height=\"124\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435 \u0437\u0430\u0432\u0435\u0434\u0451\u043c \u0435\u0449\u0451 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043a\u043b\u0430\u0432\u0438\u0448 \u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u0435\u0433\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraSystemCharacter.h  virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;  void EnableSprint(); void DisableSprint();<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraSystemCharacter.cpp  void ACameraSystemCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) {   PlayerInputComponent-&gt;BindAction(\"Sprint\", IE_Pressed, this, &amp;ACameraSystemCharacter::EnableSprint);    PlayerInputComponent-&gt;BindAction(\"Sprint\", IE_Released, this, &amp;ACameraSystemCharacter::DisableSprint); }  void ACameraSystemCharacter::EnableSprint() { AddTag(FGameplayTag::RequestGameplayTag(TEXT(\"CharacterState.Sprint\"))); }  void ACameraSystemCharacter::DisableSprint() { RemoveTag(FGameplayTag::RequestGameplayTag(TEXT(\"CharacterState.Sprint\"))); }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0432\u0430 \u0430\u0441\u0441\u0435\u0442\u0430 UCameraMode \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0445 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 Camera mode component. \u0411\u0430\u0437\u043e\u0432\u044b\u0439 Camera mode \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435, \u0442.\u043a. \u043e\u043d \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043d\u0438 \u043e\u0434\u0438\u043d \u0440\u0435\u0436\u0438\u043c \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u0451\u043b \u043f\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b81\/569\/905\/b815699055a9e75eb896eccf0baee0ab.png\" width=\"605\" height=\"207\"><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 Sprint mode \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0442\u0435\u0433\u0430 CharacterState.Sprint.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/374\/d09\/833\/374d09833cfc24bcaf22010f7854f3ff.png\" width=\"482\" height=\"191\"><figcaption><\/figcaption><\/figure>\n<h4>\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438<\/h4>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0434\u0438\u043d \u043c\u043e\u0434 \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 Base mode \u0432 Sprint mode \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0441 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0435\u0439 \u0438 \u0431\u0435\u0437.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/52a\/0ae\/41f\/52a0ae41fd733abde04d3971813022b8.gif\" width=\"650\" height=\"366\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 UCameraMode \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043a\u0430\u043c\u0435\u0440\u044b \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraMode.h  UCLASS(Abstract, Blueprintable, editinlinenew) class UCameraMode : public UDataAsset { \tGENERATED_BODY() public: \/\/C\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043e\u0434\u0430 UPROPERTY(EditDefaultsOnly, meta = (ClampMin = 0.f, UIMin = 0.f)) float InterpolationSpeed = 5.f;  \/\/\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043c\u0435\u043d\u044b \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0430\u043c\u0438. UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (ClampMin = 0.f, UIMin = 0.f)) float InterpolationLerpDuration = 0.5f;  \/\/\u0414\u043b\u0438\u043d\u0430 SprintArm \u0432 \u043a\u0430\u043c\u0435\u0440\u0430 \u043c\u043e\u0434\u0435 UPROPERTY(EditDefaultsOnly, meta = (ClampMin = 0.f, UIMin = 0.f)) float ArmLength = 250.f;  \/\/\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 FOV \u0434\u043b\u044f \u043a\u0430\u043c\u0435\u0440\u044b UPROPERTY(EditDefaultsOnly, meta = (ClampMin = 0.f, UIMin = 0.f)) float Fov= 60.f;  \/\/\u043e\u0444\u0444\u0441\u0435\u0442 \u043a\u0430\u043c\u0435\u0440\u044b \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e SprigArm UPROPERTY(EditDefaultsOnly) FVector CameraOffset = FVector::ZeroVector;  \/\/\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f UPROPERTY(EditDefaultsOnly) bool bUseControllerDesiredRotation = false; };<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0432 Camera component tick \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.h  protected: virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;  virtual void BeginPlay() override; void SetCameraMode(UCameraMode* NewMode);  float GetInterpSpeed() const; void UpdateCameraMode (float DeltaTime); void UpdateSpringArmLength(float DeltaTime); void UpdateCameraLocation(float DeltaTime); void UpdateFOV(float DeltaTime);  \/\/\u041c\u0438\u0440\u043e\u0432\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043c\u0435\u043d\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0430\u043c\u0435\u0440\u0430 \u043c\u043e\u0434\u0430 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0430\u043c\u0438 float TimeSecondsAfterSetNewMode = 0.f;  \/\/\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u0441 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u043c\u043e\u0434\u0430, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043b\u0430\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u043d\u043e\u0432\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 float PreviousInterpSpeed = 0.f; \/\/\u041a\u0430\u043c\u0435\u0440\u0430 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440, \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432  \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u0441\u043c\u0435\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 FOV\t TWeakObjectPtr&lt;APlayerCameraManager&gt; PlayerCameraManager;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.cpp  void UCameraModeComponent::SetCameraMode(UCameraMode* NewMode) {   if (CurrentCameraMode != NewMode) \t{ \t  PreviousInterpSpeed = CurrentCameraMode == nullptr ? NewMode-&gt;InterpolationSpeed : CurrentCameraMode-&gt;InterpolationSpeed; \t  CurrentCameraMode = NewMode;       Character-&gt;GetCharacterMovement()-&gt;bUseControllerDesiredRotation = CurrentCameraMode-&gt;bUseControllerDesiredRotation;     Character-&gt;GetCharacterMovement()-&gt;bOrientRotationToMovement = !CurrentCameraMode-&gt;bUseControllerDesiredRotation;      TimeSecondsAfterSetNewMode  = GetWorld()-&gt;GetTimeSeconds(); \t} }  void UCameraModeComponent::BeginPlay() { \t...   PlayerCameraManager = CastChecked&lt;APlayerController&gt; (Character-&gt;GetController())-&gt;PlayerCameraManager; \t... }  float UCameraModeComponent::GetInterpSpeed() const { \tauto timeAfterModeWasChanged = GetWorld()-&gt;GetTimeSeconds() - TimeSecondsAfterSetNewMode; \tauto lerpDuration = CurrentCameraMode-&gt;InterpolationLerpDuration; \tauto lerpAlpha = FMath::IsNearlyZero(lerpDuration) ? 1.f : FMath::Min(1.f, timeAfterModeWasChanged \/ lerpDuration); \treturn FMath::Lerp(PreviousInterpSpeed, CurrentCameraMode-&gt;InterpolationSpeed, lerpAlpha); }  void UCameraModeComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { \tSuper::TickComponent(DeltaTime, TickType, ThisTickFunction);  \tUpdateCameraMode(DeltaTime); }  void UCameraModeComponent::UpdateCameraMode(float DeltaTime) { if (CurrentCameraMode != nullptr)   {     UpdateSpringArmLength(DeltaTime);     UpdateSpringArmPivotLocation(DeltaTime);     UpdateCameraLocation(DeltaTime);   } }  \/\/\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 TargetArmLength void UCameraModeComponent::UpdateSpringArmLength(float DeltaTime) {  \tconst auto currentLength = Character-&gt;GetCameraBoom()-&gt;TargetArmLength;  \tconst auto targetLength = CurrentCameraMode-&gt;ArmLength;  \tconst auto newArmLength = FMath::FInterpTo(currentLength, targetLength, DeltaTime, GetInterpSpeed());  \tCharacter-&gt;GetCameraBoom()-&gt;TargetArmLength = newArmLength; }  void UCameraModeComponent::UpdateCameraLocation(float DeltaTime) { \tconst auto currentLocation = Character-&gt;GetCameraBoom()-&gt;SocketOffset; \tconst auto targetLocation = CurrentCameraMode-&gt;CameraOffset; \tFVector newLocation = FMath::VInterpTo(currentLocation, targetLocation, DeltaTime, GetInterpSpeed());  \tCharacter-&gt;GetCameraBoom()-&gt;SocketOffset = newLocation; }  \/\/\u0421\u043c\u0435\u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 FOV void UCameraModeComponent::UpdateFOV(float DeltaTime) {   \tconst auto currentFov = PlayerCameraManager-&gt;GetFOVAngle(); \tconst auto targetFov = CurrentCameraMode-&gt;Fov; \tauto newFov = FMath::FInterpTo(currentFov, targetFov, DeltaTime, GetInterpSpeed()); \t \tPlayerCameraManager-&gt;SetFOV(newFov); }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u043d\u044b \u0440\u0435\u0436\u0438\u043c\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0430 \u043d\u043e\u0432\u044b\u0439, \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438. <\/p>\n<p><a class=\"anchor\" name=\"%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82\" id=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\"><\/a><\/p>\n<h3>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/h3>\n<p>\u041d\u0430<a href=\"#%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82\"> <\/a>\u0432\u0438\u0434\u0435\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u043a\u0430\u043c\u0435\u0440\u044b \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430 \u0432\u0438\u0434\u0435\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u0447\u0435\u043c \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u0430\u043c\u0435\u0440.<\/p>\n<p><iframe id=\"60b5dd4b5a3f6bb5bd1eb651\" src=\"https:\/\/embedd.srv.habr.com\/iframe\/60b5dd4b5a3f6bb5bd1eb651\" class=\"embed_video embed__content\" allowfullscreen=\"true\"><\/iframe><\/p>\n<p>\u041c\u044b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 GitHub, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 camera modes. <a href=\"https:\/\/github.com\/DmVergasovSQ\/CameraSystemHabr\">\u0421\u0441\u044b\u043b\u043a\u0430 \u0434\u043b\u044f \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f<\/a>.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ac\/e3e\/a0d\/2ace3ea0d7d8adc03a4430d8864da9af.gif\" width=\"400\" height=\"225\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u0434 \u0441\u0442\u0430\u0442\u044c\u0451\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438:<\/p>\n<p><a href=\"https:\/\/habr.com\/ru\/users\/smidcorso\/\">\u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0413\u043e\u0440\u0431\u0430\u0447\u0435\u0432<\/a>, Technical Game Designer<br \/><a href=\"https:\/\/habr.com\/ru\/users\/rim2812\/\">\u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0412\u0435\u0440\u0433\u0430\u0441\u043e\u0432<\/a>, C++ programmer<br \/><a href=\"https:\/\/habr.com\/ru\/users\/zzzlor\/\">\u041a\u0438\u0440\u0438\u043b\u043b \u041c\u0438\u043d\u0446\u0435\u0432<\/a>, C++ programmer<\/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\/company\/socialquantum\/blog\/560384\/\"> https:\/\/habr.com\/ru\/company\/socialquantum\/blog\/560384\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h3>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p><a href=\"#%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0\">\u0420\u0435\u0448\u0430\u0435\u043c\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/a><\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u043c\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0432 \u0431\u043e\u044e<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043c\u0435\u0440\u0430 \u043d\u0430 \u0431\u0435\u0433\u0443<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043c\u0435\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D0%A6%D0%B5%D0%BB%D0%B8\">\u0426\u0435\u043b\u0438 \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B\">\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/a><\/p>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u041a\u0430\u043c\u0435\u0440\u0430 \u043c\u043e\u0434 \u0438 \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0435\u0442\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\">\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/a><\/p>\n<ul>\n<li>\n<p>\u0420\u0435\u0436\u0438\u043c\u044b \u043a\u0430\u043c\u0435\u0440\u044b<\/p>\n<\/li>\n<li>\n<p>\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u043e\u0432<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0\" id=\"\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\">\u0435\u043c\u0430&#187;><\/a><\/p>\n<h2>\u0420\u0435\u0448\u0430\u0435\u043c\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430<\/h2>\n<p>\u0412 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u0410\u0410\u0410 \u0438\u0433\u0440\u0430\u0445 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0430\u043c\u0435\u0440\u0443 \u043e\u0442 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043b\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438\u0433\u0440\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f, \u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043b\u0430\u043d\u044b. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0443\u0441\u0442\u0440\u043e\u0444\u043e\u0431\u0438\u0438 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435. \u0418\u043d\u043e\u0433\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0439 \u043f\u043b\u0430\u043d, \u0438 \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430 \u0438 \u0438\u0433\u0440\u043e\u043a\u0430. \u041d\u043e \u0447\u0430\u0449\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u0430\u043c\u0435\u0440\u044b \u2014 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0433\u0440\u043e\u043a\u0443 \u0442\u043e, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0438 \u0445\u043e\u0447\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<strong> <\/strong>\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u043d \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442, \u0438 \u043d\u0435 \u0432\u044b\u043d\u0443\u0436\u0434\u0430\u0442\u044c \u0435\u0433\u043e \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443 \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0447\u044c \u0432 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p><strong>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u043c\u0435\u0440\u044b<\/strong><\/p>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0431\u043e\u043a\u0443. \u041c\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u044d\u043a\u0440\u0430\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0433\u0440\u043e\u043a \u0432\u0438\u0434\u0435\u043b \u043a\u0443\u0434\u0430 \u043e\u043d \u0438\u0434\u0451\u0442.&nbsp;<\/p>\n<figure class=\"full-width\"><figcaption>The Last of us Part II<\/figcaption><\/figure>\n<p><strong>\u041f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435<\/strong><\/p>\n<p>\u041f\u0440\u0438 \u0441\u0442\u0440\u0435\u043b\u044c\u0431\u0435 \u043e\u0442 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043b\u0438\u0446\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443, \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c FoV (<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9F%D0%BE%D0%BB%D0%B5_%D0%B7%D1%80%D0%B5%D0%BD%D0%B8%D1%8F\"><u>Field of View<\/u><\/a>), \u0447\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0446\u0435\u043b\u044c. \u0418 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043a\u0430\u043c\u0435\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043c\u044b \u0446\u0435\u043b\u0438\u043c\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u0433\u0440\u043e\u0432\u044b\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435\u043c.<\/p>\n<figure class=\"full-width\"><figcaption>Division 2<\/figcaption><\/figure>\n<p><strong>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0432 \u0431\u043e\u044e<\/strong><\/p>\n<p>\u0412 \u0431\u043e\u044e \u043c\u044b \u043e\u0442\u0434\u0430\u043b\u044f\u0435\u043c \u043a\u0430\u043c\u0435\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u0438\u0433\u0440\u043e\u043a \u0432\u0438\u0434\u0435\u043b \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0433\u043e \u0430\u0442\u0430\u043a\u043e\u0432\u0430\u0442\u044c, \u043e\u0442 \u043a\u043e\u0433\u043e \u0443\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<figure class=\"full-width\"><figcaption>Assassin&#8217;s Creed Odyssey<\/figcaption><\/figure>\n<p><strong>\u041a\u0430\u043c\u0435\u0440\u0430 \u043d\u0430 \u0431\u0435\u0433\u0443<\/strong><\/p>\n<p>\u0412 \u0441\u043f\u0440\u0438\u043d\u0442\u0435 \u0432\u044b\u0433\u043e\u0434\u043d\u043e \u043e\u0442\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443 \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0443\u0433\u043e\u043b \u043e\u0431\u0437\u043e\u0440\u0430 FoV. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432 \u044d\u043a\u0440\u0430\u043d \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u0438\u0433\u0440\u043e\u043a \u0443\u0441\u043f\u0435\u0432\u0430\u043b \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0422\u0430\u043a\u0436\u0435 FoV \u0434\u0430\u0451\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432 \u0438\u0433\u0440\u0430\u0445 \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><figcaption>Batman\u200b Arkham Knight<\/figcaption><\/figure>\n<p><strong>\u041a\u0430\u043c\u0435\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439<\/strong><\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u043c\u044b \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u0412 \u0438\u0433\u0440\u0430\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043c\u043d\u0430\u0442 \u0438 \u0437\u0434\u0430\u043d\u0438\u0439 \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u043d\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445, \u043d\u043e \u043e\u043d\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u0442\u0435\u0441\u043d\u044f\u044e\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u0438 \u043a\u0430\u043c\u0435\u0440\u044b. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043c\u0435\u0440\u0430 \u043b\u0438\u0448\u043d\u0438\u0439 \u0440\u0430\u0437 \u043d\u0435 \u00ab\u0441\u043f\u043e\u0442\u044b\u043a\u0430\u043b\u0430\u0441\u044c\u00bb \u043e\u0431 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0432 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u0445 \u043c\u044b \u0434\u0435\u0440\u0436\u0438\u043c \u043a\u0430\u043c\u0435\u0440\u0443 \u0431\u043b\u0438\u0436\u0435 \u043a \u0438\u0433\u0440\u043e\u043a\u0443. \u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u043e\u0441\u0442\u0438 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0433\u0440\u043e\u043a\u0443 \u043e\u0449\u0443\u0442\u0438\u0442\u044c \u0441\u0435\u0431\u044f \u0432 \u0442\u0435\u0441\u043d\u043e\u0442\u0435. <\/p>\n<figure class=\"full-width\"><figcaption>Red Dead Redemption 2<\/figcaption><\/figure>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 40. \u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043d\u0430\u0431\u043e\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a.<\/p>\n<p><a class=\"anchor\" name=\"%D0%A6%D0%B5%D0%BB%D0%B8\" id=\"\u0426\u0435\u043b\u0438\">\u0438&#187;><\/a><\/p>\n<h2>\u0426\u0435\u043b\u0438 \u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<ol>\n<li>\n<p><strong>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0439 \u0444\u0438\u043b.<\/strong>&nbsp;\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0410\u0410\u0410-\u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u044b\u0445 \u0438\u0433\u0440\u0430\u0445.&nbsp;<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438<\/strong>. \u0412\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0431\u0435\u0437 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u043e\u0441\u0442\u044c<\/strong>. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443.<\/p>\n<\/li>\n<\/ol>\n<p><a class=\"anchor\" name=\"%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B\" id=\"\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b\">\u043d\u0442\u044b&#187;><\/a><\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h2>\n<p>\u0412<a href=\"#%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B\"> <\/a>\u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<h4>\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0440\u0435\u0436\u0438\u043c \u043a\u0430\u043c\u0435\u0440\u044b<\/h4>\n<p>\u0420\u0435\u0436\u0438\u043c \u043a\u0430\u043c\u0435\u0440\u044b (camera mode) \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043a\u0430\u043a DataAsset, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u0443 \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. <\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 camera mode \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a:<\/p>\n<p><strong>Pitch<\/strong>. \u0412\u0432\u0435\u0440\u0445\/\u0432\u043d\u0438\u0437.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>Yaw<\/strong>. \u0412\u043b\u0435\u0432\u043e\/\u0432\u043f\u0440\u0430\u0432\u043e.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>Roll<\/strong>. \u0412\u0440\u0430\u0449\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>Distance<\/strong>. \u0418\u043b\u0438 Arm Length \u0432 UE4. \u0414\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f \u0434\u043e \u0438\u0433\u0440\u043e\u043a\u0430.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>Offset<\/strong>. \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>FoV.<\/strong> \u041f\u043e\u043b\u0435 \u0437\u0440\u0435\u043d\u0438\u044f.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e, \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0435\u0451 \u0432 \u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c camera mode. <\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<h4>\u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/h4>\n<p>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (subsystems) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430\u043c\u0438, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u043c\u0438 \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a.&nbsp;<\/p>\n<p>\u042d\u0442\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>Subsystem pitch position<\/strong> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043a\u0430\u043c\u0435\u0440\u0443 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 Pitch \u0438 Yaw \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0438\u0433\u0440\u043e\u043a\u0430.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>Subsystem auto rotation<\/strong> \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043c\u0435\u0440\u0443 \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0438\u0433\u0440\u043e\u043a\u0430.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p><strong>Subsystem focus target <\/strong>\u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0444\u043e\u043a\u0443\u0441 \u043d\u0430 \u0446\u0435\u043b\u044c \u0432 \u0431\u043e\u044e.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0442\u0430\u043a\u0430\u044f subsystem \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041c\u043e\u0434\u0443\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0434\u043e\u0431\u0435\u043d \u043f\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u043f\u0440\u0438\u0447\u0438\u043d:<\/p>\n<ol>\n<li>\n<p>\u041d\u0435 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u0443 \u043a\u0430\u043c\u0435\u0440\u044b \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0443\u0434\u0430 \u043b\u0435\u0433\u0447\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u0434\u043e\u043c \u0438 \u0431\u043b\u0443\u043f\u0440\u0438\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0430\u0441\u0441\u0435\u0442 \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u043a \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u0443\u0447\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 subsystems \u0441\u0440\u0430\u0437\u0443.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0427\u0435\u0442\u043a\u0438\u0439 \u0438 \u044f\u0432\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f subsystems, \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043d\u0430 \u043a\u0430\u043c\u0435\u0440\u0443.<\/p>\n<\/li>\n<\/ol>\n<p><strong>Subsystems<\/strong> \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0442\u0435\u043c\u0430, \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u0451 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043c, \u0447\u0442\u043e \u043e\u043d\u0438 \u0435\u0441\u0442\u044c. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445 \u0438\u0437 \u0438\u0433\u0440\u044b, \u043d\u0435 \u0431\u044b\u043b \u0431\u044b \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442 \u0431\u0435\u0437 \u044d\u0442\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c.<\/p>\n<h4>\u0422\u0440\u0435\u0442\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438<\/h4>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u0440\u0435\u0436\u0438\u043c, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0443\u0441\u043b\u043e\u0432\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436. <\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430:&nbsp;<\/p>\n<ol>\n<li>\n<p><strong>Base mode. <\/strong>\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435 \u0432 \u0440\u0443\u043a\u0430\u0445.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u0441\u0442\u043e\u0438\u0442 \u043d\u0430 \u0443\u043b\u0438\u0446\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432 \u0440\u044f\u0434\u043e\u043c \u043d\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Battle mode.<\/strong> \u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0432 \u0431\u043e\u044e.<\/p>\n<ul>\n<li>\n<p>\u0420\u044f\u0434\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0438.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0430\u043d\u043e\u0441\u0438\u0442 \u0443\u0434\u0430\u0440\u044b \u043f\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430\u043c.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Aim mode.<\/strong> \u041f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435.<\/p>\n<ul>\n<li>\n<p>\u0423 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 \u0440\u0443\u043a\u0430\u0445 \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0432\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Sprint mode.<\/strong> \u041a\u0430\u043c\u0435\u0440\u0430 \u043d\u0430 \u0431\u0435\u0433\u0443.<\/p>\n<ul>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0430\u0447\u0430\u043b \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f.&nbsp;<\/p>\n<\/li>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>Indoor mode.<\/strong> \u041a\u0430\u043c\u0435\u0440\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439.<\/p>\n<ul>\n<li>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0437\u043d\u0430\u0435\u043c \u0432 \u043a\u0430\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043a\u0430\u043c\u0435\u0440\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0438\u0433\u0440\u043e\u043a \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u041d\u043e \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u0445\u043e\u0442\u044f\u0442 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:&nbsp;<\/p>\n<p>\u0418\u0433\u0440\u043e\u043a \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u043e\u044e \u0441 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u0430\u043c\u0438. \u0412\u043a\u043b\u044e\u0447\u0435\u043d <strong>Battle mode<\/strong> \u043a\u0430\u043c\u0435\u0440\u044b. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u043b \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0432\u043e\u0435 \u043e\u0440\u0443\u0436\u0438\u0435 \u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u0440\u0438\u0446\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c <strong>Aim mode<\/strong>.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0443 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0438\u0437\u0430\u0446\u0438\u044f. \u041f\u043e\u0440\u044f\u0434\u043e\u043a, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d\u0438 \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044e\u0442\u0441\u044f. \u041d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u043d\u0438\u0436\u0435 <strong>Aim mode<\/strong> \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u044b\u0439, \u0447\u0435\u043c <strong>Battle mode<\/strong>.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0443\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0433\u0438\u0431\u043a\u0430\u044f, \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0432 \u043f\u043b\u0430\u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u0441\u043c\u0435\u043d\u044b camera mode, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u0431\u044b \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u0435\u0439\u043c-\u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0431\u0435\u0437 \u0443\u0447\u0430\u0441\u0442\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0431\u0430\u0437\u0438\u0440\u0443\u044e\u0449\u0443\u044e\u0441\u044f \u043d\u0430<strong> <\/strong><a href=\"https:\/\/docs.unrealengine.com\/4.26\/en-US\/ProgrammingAndScripting\/Tags\/\">gameplay tags<\/a>.<\/p>\n<p><a class=\"anchor\" name=\"%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\" id=\"\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\">\u0430\u0446\u0438\u044f&#187;><\/a><\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<h4>\u0420\u0435\u0436\u0438\u043c\u044b \u043a\u0430\u043c\u0435\u0440\u044b<\/h4>\n<p>\u0414\u043b\u044f<a href=\"#%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F\"> <\/a>\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c C++ \u043f\u0440\u043e\u0435\u043a\u0442 \u0438\u0437 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 Third Person.<\/p>\n<p>\u041d\u0430\u0431\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 TMap, \u0433\u0434\u0435 \u043a\u043b\u044e\u0447 \u2014 <a href=\"https:\/\/docs.unrealengine.com\/4.26\/en-US\/API\/Runtime\/GameplayTags\/FGameplayTag\/\">FGameplayTag<\/a>, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2014 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0435\u0433\u043e\u0432. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u0433\u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0443\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>\u0422\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0433\u043e\u0432, \u0433\u0435\u0442\u0442\u0435\u0440, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438. \u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c GameplayTags \u0432 build.cs \u0444\u0430\u0439\u043b\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraSystemCharacter.h  public: DECLARE_EVENT_TwoParams(ACameraSystemCharacter, FOnTagContainerChanged, const FGameplayTag&amp; \/*ChangedTag*\/, bool \/*bExist*\/); FOnTagContainerChanged OnTagContainerChanged;  void AddTag(const FGameplayTag&amp; Tag); void RemoveTag(const FGameplayTag&amp; Tag); FGameplayTagContainer GetGameplayTags() const;  protected: TMap&lt;FGameplayTag, int32&gt; TagMap;<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraSystemCharacter.\u0441\u0440\u0440  void ACameraSystemCharacter::AddTag(const FGameplayTag&amp; Tag) {    auto&amp; val = ++TagMap.FindOrAdd(Tag);    OnTagContainerChanged.Broadcast(Tag, val &gt; 0); } void ACameraSystemCharacter::RemoveTag(const FGameplayTag&amp; Tag) {    auto&amp; val = --TagMap.FindOrAdd(Tag);    OnTagContainerChanged.Broadcast(Tag, val &gt; 0); } FGameplayTagContainer ACameraSystemCharacter::GetGameplayTags() const {    FGameplayTagContainer tags; \t Algo::ForEach(TagMap, [&amp;](const auto&amp; it) { if (it.Value &gt; 0) tags.AddTag(it.Key); }); \t return tags; }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0432\u0435\u0447\u0430\u0442\u044c \u0437\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u0438 \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443.&nbsp;<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.h  UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) class CAMERASYSTEMHABR_API UCameraModeComponent : public UActorComponent { \tGENERATED_BODY()  };<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f camera mode. \u041a\u0430\u0436\u0434\u044b\u0439 camera mode \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0432 \u0432\u0438\u0434\u0435 DataAsset \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraMode.h  UCLASS(Abstract, Blueprintable, editinlinenew) class UCameraMode: public UDataAsset {   ... };<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0412 CameraModeComponent \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f&nbsp; \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c Camera mode \u0438 <a href=\"https:\/\/docs.unrealengine.com\/4.26\/en-US\/API\/Runtime\/GameplayTags\/FGameplayTagQuery\/\">FGameplayTagQuery<\/a><em>,<\/em> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraMode.h  USTRUCT(BlueprintType) struct FCameraModeData { \tGENERATED_BODY() public: bool CanActivateMode(const FGameplayTagContainer&amp; TagsToCheck) const {   return ModeActivationConditions.IsEmpty() || ModeActivationConditions.Matches(TagsToCheck); }  UCameraMode* GetCameraMode() const { \treturn CameraMode; }  protected: \tUPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Instanced) \tUCameraMode* CameraMode;  \tUPROPERTY(EditDefaultsOnly, BlueprintReadOnly) \tFGameplayTagQuery ModeActivationConditions; };<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u043a\u0430\u043c\u0435\u0440\u044b \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e camera mode, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e callback, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0442\u0435\u0433\u043e\u0432 \u043d\u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u0436\u0435.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.h  UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) ) class CAMERASYSTEMHABR_API UCameraModeComponent : public UActorComponent { \tGENERATED_BODY()    ...  protected: virtual void BeginPlay() override(); void OnAbilityTagChanged(const FGameplayTag&amp; Tag, bool TagExists);  protected: UPROPERTY(EditDefaultsOnly) TArray&lt;FCameraModeData&gt; CameraModes;  UPROPERTY() UCameraMode* CurrentCameraMode;  TWeakObjectPtr&lt;ACameraSystemCharacter&gt; Character;    ...  };<\/code><\/pre>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.cpp  void UCameraModeComponent::BeginPlay() { \tSuper::BeginPlay();  \tCharacter = CastChecked&lt;ACameraSystemCharacter&gt;(GetOwner());  \tif (Character-&gt;IsLocallyControlled()) \t{ \t\tCharacter-&gt;OnTagContainerChanged.AddUObject(this, &amp;UCameraModeComponent::OnAbilityTagChanged)); \t} }<\/code><\/pre>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435, \u043f\u043e\u0441\u043b\u0435 \u0441\u043c\u0435\u043d\u044b \u0442\u0435\u0433\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 camera mode \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043f\u043e\u0434 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0438, \u0435\u0441\u043b\u0438 \u0434\u0430, \u0441\u043c\u0435\u043d\u0438\u0442\u044c camera mode \u043d\u0430 \u043d\u043e\u0432\u044b\u0439.<\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">\/\/CameraModeComponent.cpp  void UCameraModeComponent::OnAbilityTagChanged(const FGameplayTag&amp; Tag, bool TagExists) {   SetCameraMode(DetermineCameraMode(Character-&gt;GetGameplayTags())); }  UCameraMode*<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-325357","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/325357","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=325357"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/325357\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=325357"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=325357"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=325357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}