{"id":334257,"date":"2022-06-09T15:00:34","date_gmt":"2022-06-09T15:00:34","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=334257"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=334257","title":{"rendered":"<span>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 UNIGINE \u0441 Unreal Engine 4: \u0433\u0430\u0439\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h4>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b, \u0432\u0432\u043e\u0434, \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u0438 \u0434\u0440\u0443\u0433\u043e\u0435.<\/h4>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/868\/a9d\/c95\/868a9dc95fca9125539f27915ec3755d.png\" width=\"1600\" height=\"900\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/868\/a9d\/c95\/868a9dc95fca9125539f27915ec3755d.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u0449\u0435\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 Unreal Engine \u0438\u043b\u0438 Unity, \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 UNIGINE \u0441 \u0437\u0430\u0440\u0443\u0431\u0435\u0436\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432. \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0432\u044b\u043f\u0443\u0441\u043a\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0441 Unreal Engine 4 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<\/p>\n<h3>\u041e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0418\u0433\u0440\u043e\u0432\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 Unreal Engine 4 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432<em> C++ <\/em>\u0438\u043b\u0438<em> Blueprint Visual Scripting <\/em>\u2014 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u043e\u0434\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 Unreal Engine 4 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (Class Wizard), \u0432\u044b\u0431\u0440\u0430\u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f.<\/p>\n<p>\u0412 UNIGINE \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f C++ \u0438 C# API. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 API \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/421\/e50\/397\/421e50397856d1a2288a26d45e589148.png\" width=\"364\" height=\"197\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/421\/e50\/397\/421e50397856d1a2288a26d45e589148.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 C++, \u0442.\u043a. \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Unreal Engine 4 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435.<\/p>\n<p>\u0414\u043b\u044f C++ \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>Windows:<\/p>\n<ul>\n<li>\n<p>Visual Studio 2015+;<\/p>\n<\/li>\n<li>\n<p>CMake;<\/p>\n<\/li>\n<li>\n<p>Qt-based: Qt Creator, QMake \u0438\u043b\u0438 CMake (\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u043b\u044f Engineering \u0438 Sim \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0439 SDK);<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Linux:<\/p>\n<ul>\n<li>\n<p>GNU Make.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <strong>Open Code IDE<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 IDE \u0434\u043b\u044f C++ \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/529\/07d\/cc2\/52907dcc2e855dccca5af59001a2ef28.png\" width=\"250\" height=\"297\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/529\/07d\/cc2\/52907dcc2e855dccca5af59001a2ef28.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 Unreal Engine 4 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 Game Framework, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a AActor, APawn, ACharacter \u0438 \u0442.\u043f., \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 <strong><em>BeginPlay()<\/em><\/strong>, <strong><em>Tick() <\/em><\/strong>\u0438 <strong><em>EndPlay()<\/em><\/strong> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 actor.<\/p>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c\u044b\u0445 \u043d\u0430 actor\u2019\u044b \u2014 \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 <em>UActorComponent <\/em>\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445<em> <\/em><strong><em>InitializeComponent()<\/em><\/strong> \u0438 <strong><em>TickComponent()<\/em><\/strong>.<\/p>\n<p>\u0412 UNIGINE \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/execution_sequence\/app_logic_system?rlang=cpp\"><u>\u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/u><\/a> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0436\u0438\u0437\u043d\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430<\/strong> (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b AppSystemLogic.cpp) \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u0433\u0438\u043a\u0430 \u043c\u0438\u0440\u0430<\/strong> (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b AppWorldLogic.cpp) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u0438\u0440 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430<\/strong> (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b AppEditorLogic.cpp) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b\u00a0 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0435\u0441\u0442\u044c <a href=\"https:\/\/developer.unigine.com\/en\/docs\/latest\/code\/fundamentals\/execution_sequence\/app_logic_system?rlang=cpp#worldlogic\"><u>\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b<\/u><\/a>, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0434\u0432\u0438\u0436\u043a\u0430. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043b\u043e\u0433\u0438\u043a\u0438 \u043c\u0438\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><em>init() &#8212; \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u0438\u0440\u0430;<\/em><\/p>\n<\/li>\n<li>\n<p><em>update() &#8212; \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440;<\/em><\/p>\n<\/li>\n<li>\n<p><em>shutdown() &#8212; \u0434\u043b\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u043c\u0438\u0440\u0430;<\/em><\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0438\u0440\u0430 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043c\u0438\u0440\u0443 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/usage\/multiple_worldlogic\/index?rlang=cpp&amp;autotranslate=ru\"><u>\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u0438\u0440\u0430 \u043a\u043e\u0434<\/u><\/a> \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0442 <em>WorldLogic<\/em>.<\/p>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 UNIGINE \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/principles\/component_system\/component_system_cpp\/?rlang=cpp\"><u>\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/u><\/a>. \u041b\u043e\u0433\u0438\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u043c \u043e\u0442 <em>ComponentBase<\/em>, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u2014 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/principles\/properties\/?rlang=cpp\"><strong><u>Property<\/u><\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043d\u043e\u0434\u0435 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/execution_sequence\/code_update?rlang=cpp\"><u>\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430<\/u><\/a> \u0434\u0432\u0438\u0436\u043a\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u0433\u0440\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/start\/quick_start\/intro?rlang=cpp\"><strong><u>\u00ab\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e\u00bb<\/u><\/strong><\/a>.<\/p>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u043e\u0431\u043e\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u0430\u0445. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432 <em>Unreal Engine 4<\/em> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">UCLASS() class UMyComponent : public UActorComponent {     GENERATED_BODY()  public:     UPROPERTY(EditAnywhere)     int32 TotalDamage;       \/\/ Called after the owning Actor was created     void InitializeComponent();      \/\/ Called when the component or the owning Actor is being destroyed     void UninitializeComponent();      \/\/ Component version of Tick     void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction); };<\/code><\/pre>\n<p>\u0418 \u0432 UNIGINE. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043f\u0435\u0440\u0432\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435 (<strong><em>AppSystemLogic.cpp)<\/em><\/strong>:<\/p>\n<pre><code class=\"cpp\">\/* .. *\/ #include &lt;UnigineComponentSystem.h>  \/* .. *\/  int AppSystemLogic::init() {     Unigine::ComponentSystem::get()->initialize();     return 1; }<\/code><\/pre>\n<p>\u0418 \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442:<\/p>\n<p><strong><em>MyComponent.h:<\/em><\/strong><\/p>\n<pre><code class=\"cpp\">#pragma once #include &lt;Unigine.h> #include &lt;UnigineComponentSystem.h>  using namespace Unigine; class MyComponent : public ComponentBase { public:     \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 MyComponent     COMPONENT(MyComponent, ComponentBase);      \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u0446\u0438\u043a\u043b\u0430 \u0436\u0438\u0437\u043d\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430     COMPONENT_INIT(init);     COMPONENT_UPDATE(update);     COMPONENT_SHUTDOWN(shutdown);      \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435     PROP_PARAM(Float, speed, 30.0f);      \/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438 Property, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c     PROP_NAME(\"my_component\"); protected:     void init();     void update();     void shutdown(); };<\/code><\/pre>\n<p><strong><em>MyComponent.cpp:<\/em><\/strong><\/p>\n<pre><code class=\"cpp\">#include \"MyComponent.h\"  \/\/ \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 MyComponent REGISTER_COMPONENT(MyComponent);  \/\/ \u0432\u044b\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 void MyComponent::init(){}  \/\/ \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 void MyComponent::update(){}  \/\/ \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u0440\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438\u043b\u0438 \u043d\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d void MyComponent::shutdown(){}<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c property \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e IDE.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/migration\/from_ue\/?rlang=cpp#editor_play\"><u>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/u><\/a> \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c property \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u043a\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/editor2\/properties_settings\/organizing_properties\/?rlang=cpp#assign_property\"><u>\u043d\u0430\u0437\u043d\u0430\u0447\u044c\u0442\u0435<\/u><\/a> \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 property \u043d\u043e\u0434\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0440\u0430\u0431\u043e\u0442\u0443 \u043b\u043e\u0433\u0438\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u043d\u0438\u0436\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/execution_sequence\/code_update?rlang=cpp\"><u>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/usage\/using_component_system\/index?rlang=cpp\"><u>C++ Component System<\/u><\/a>.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e API<\/h4>\n<p>\u0412\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 Unreal Engine 4 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 UObject, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 C++ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u043b\u0438 \u0443\u043c\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 Unreal Smart Pointer Library.<\/p>\n<p>\u0412 UNIGINE API \u0435\u0441\u0442\u044c <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/smartpointers?rlang=cpp&amp;autotranslate=ru\"><u>\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043c\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439<\/u><\/a>, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u043e\u0434 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">\/\/ \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0434\u0443 \u0442\u0438\u043f\u0430 NodeType &lt;NodeType>Ptr nodename = &lt;NodeType>::create(&lt;construction_parameters>); \/\/ \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u043e\u0434\u0443 \u0438\u0437 \u043c\u0438\u0440\u0430 nodename.deleteLater();<\/code><\/pre>\n<p>\u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0435\u0448\u0430 \u0438\u0437 \u0430\u0441\u0441\u0435\u0442\u0430, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u043d\u043e\u0434\u0435 \u0442\u0438\u043f\u0430 ObjectMeshStatic \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">    MeshPtr mesh = Mesh::create();     mesh->load(\"fbx\/model.fbx\/model.mesh\");     mesh->addBoxSurface(\"box_surface\", Math::vec3(0.5f, 0.5f, 0.5f));     ObjectMeshStaticPtr my_object = ObjectMeshStatic::create(mesh);     my_object.deleteLater();     mesh.clear();<\/code><\/pre>\n<p>\u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u043a \u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439:<\/p>\n<pre><code class=\"cpp\">MyComponent *my_component = getComponent&lt;MyComponent>(node);<\/code><\/pre>\n<h4>\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"center\"><strong><u>\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445<\/u><\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\"><strong>\u0427\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">int8\/uint8<\/p>\n<p align=\"left\">int16\/uint16<\/p>\n<p align=\"left\">int32\/uint32<\/p>\n<p align=\"left\">int64\/uint64,<\/p>\n<p align=\"left\">float,<\/p>\n<p align=\"left\">double<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b C++:<\/p>\n<p align=\"left\">signed \u0438 unsigned char, short, int, long, long long, float, double<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\"><strong>\u0421\u0442\u0440\u043e\u043a\u0438<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">FString:<\/p>\n<p align=\"left\">FString MyStr = TEXT(&#171;Hello, Unreal 4!&#187;).<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/developer.unigine.com\/en\/docs\/latest\/api\/library\/common\/class.string?rlang=cpp&amp;autotranslate=ru\"><u>String<\/u><\/a>:<\/p>\n<p align=\"left\">String str(&#171;Hello, UNIGINE 2!&#187;);<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\"><strong>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">TArray, TMap, TSet<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/api\/library\/containers\/?rlang=cpp&amp;autotranslate=ru\"><u>Vector, Map, Set \u0438 \u0434\u0440\u0443\u0433\u0438\u0435<\/u><\/a>:<\/p>\n<p align=\"left\">Vector&lt;NodePtr> nodes;<\/p>\n<p align=\"left\">World::getNodes(nodes);<\/p>\n<p align=\"left\">for(NodePtr n : nodes) { }<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\"><strong>\u0412\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">FVector3f &#8212; FVector3d,<\/p>\n<p align=\"left\">FMatrix44f &#8212; FMatrtix44d \u0438 \u0434\u0440\u0443\u0433\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">vec3 &#8212; dvec3,<\/p>\n<p align=\"left\">mat4 &#8212; dmat4 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b \u0432 <a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/api\/library\/math\/index_cpp?rlang=cpp&amp;autotranslate=ru\"><u>\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435<\/u><\/a>.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>UNIGINE \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043a \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c (Float), \u0442\u0430\u043a \u0438 \u0434\u0432\u043e\u0439\u043d\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (Double), \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 SDK. \u041f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/code\/double_precision\/usage?rlang=cpp\"><u>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445<\/u><\/a>, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u043e\u0434 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<h3>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430<\/h3>\n<h4>\u0412\u044b\u0432\u043e\u0434 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>UE_LOG(LogTemp, Warning, TEXT(\"Your message\"));<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Log::message(\"Debug info: %s\\n\", text);<\/code><\/p>\n<p align=\"left\"><code>Log::message(\"Debug info: %d\\n\", number);<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0421\u043c. \u0442\u0430\u043a\u0436\u0435:<\/h4>\n<ul>\n<li>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 API \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/common\/class.log?rlang=cpp\"><em><u>Log<\/u><\/em><\/a><em>.<\/em><\/p>\n<\/li>\n<\/ul>\n<h4>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0446\u0435\u043d\u044b<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>UGameplayStatics::OpenLevel(GetWorld(), TEXT(\"MyLevelName\"));<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>World::loadWorld(\"YourWorldName\");<\/code>\u00a0\u00a0\u00a0 <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0414\u043e\u0441\u0442\u0443\u043f \u043a Actor \/ Node \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MyComponent->GetOwner();<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">N<code>odePtr owning_node = node;<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0421\u043c. \u0442\u0430\u043a\u0436\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/youtu.be\/KjEGI311NiA\"><u>\u0412\u0438\u0434\u0435\u043e\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/u><\/a>, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0435, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u043e\u0434\u0430\u043c \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e C++ Component System.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0438\u0437 Actor \/ Node<\/h4>\n<p><em>Unreal Engine<\/em> 4:<\/p>\n<pre><code class=\"cpp\">UMyComponent* MyComp = MyActor->FindComponentByClass&lt;UMyComponent>();<\/code><\/pre>\n<p>UNIGINE:<\/p>\n<pre><code class=\"cpp\">MyComponent *my_component = getComponent&lt;MyComponent>(node);<\/code><\/pre>\n<h4>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438<\/h4>\n<p>\u0412 Unreal Engine 4 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong><em>USceneComponent <\/em><\/strong>(\u0438\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439) \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 actor\u2019\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u0435\u0439 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 \u043c\u0438\u0440\u043e\u0432\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <em>USceneComponent <\/em>(<em>GetForwardVector()<\/em>) \u0438\u043b\u0438 AActor (<em>GetActorForwardVector()<\/em>).<\/p>\n<p>\u0412 UNIGINE \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u043e\u0434\u044b \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0435\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (<a href=\"https:\/\/developer.unigine.com\/en\/docs\/latest\/api\/library\/math\/cs\/mat4?rlang=cpp\"><em><u>mat4<\/u><\/em><\/a>), \u0430 \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0438\u043b\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0435\u0439 \u043d\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/api\/library\/nodes\/class.node?rlang=cs\"><em><u>Node<\/u><\/em><\/a>. \u0422\u0430\u043a\u043e\u0439 \u0436\u0435 \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 UNIGINE \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/nodes\/class.node?rlang=cpp#getWorldDirection_int_vec3\"><em><u>Node::getWorldDirection()<\/u><\/em><\/a>:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>FVector forward = MyActor->GetActorForwardVector();<\/code><\/p>\n<p align=\"left\"><code>FVector up = MyActor->GetActorUpVector();<\/code><\/p>\n<p align=\"left\"><code>FVector right = MyActor->GetActorRightVector();<\/code><\/p>\n<p align=\"left\"><code>FVector CurrentLocation = MyActor->GetActorLocation();<\/code><\/p>\n<p align=\"left\"><code>CurrentLocation += forward * speed * DeltaTime;<\/code><\/p>\n<p align=\"left\"><code>MyActor->SetActorLocation(CurrentLocation);<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>mat4 t_local = node->getTransform();<\/code><\/p>\n<p align=\"left\"><code>mat4 t_world = node->getWorldTransform();<\/code><\/p>\n<p align=\"left\"><code>vec3 pos_world = node->getWorldPosition();<\/code><\/p>\n<p align=\"left\"><code>vec3 forward = node->getWorldDirection(Math::AXIS_Y);<\/code><\/p>\n<p align=\"left\"><code>vec3 right = node->getWorldDirection(Math::AXIS_X);<\/code><\/p>\n<p align=\"left\"><code>vec3 up = node->getWorldDirection(Math::AXIS_Z);<\/code><\/p>\n<p align=\"left\"><code>node->translate(forward * speed * Game::getIFps());<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0421\u043c. \u0442\u0430\u043a\u0436\u0435:<\/h4>\n<ul>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/matrices\/index?rlang=cpp#coordinate_system\"><u>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/u><\/a> \u0432 UNIGINE.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0411\u043e\u043b\u0435\u0435 \u043f\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 DeltaTime \/ IFps<\/h4>\n<p>\u0412 <em>Unreal Engine<\/em> 4, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0430\u0434\u0440\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u0442. \u0434.), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c <strong>deltaTime<\/strong> (\u0432\u0440\u0435\u043c\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430), \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434\u0443 <em>Tick(float deltaTime)<\/em>. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432 UNIGINE \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/engine\/class.game?rlang=cpp#getIFps_float\"><strong><u>Game::getIFps()<\/u><\/strong><\/a>:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>void AMyActor::Tick(float deltaTime)<\/code><\/p>\n<p align=\"left\"><code>{<\/code><\/p>\n<p align=\"left\"><code>\u00a0\u00a0\u00a0\u00a0Super::Tick(deltaTime);<\/code><\/p>\n<p align=\"left\"><code>\u00a0\u00a0\u00a0\u00a0\/* .. *\/<\/code><\/p>\n<p align=\"left\"><code>}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>node->rotate(0, 0, speed * Game::getIFps());<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p><strong>Unreal Engine<\/strong> 4<strong>:<\/strong><\/p>\n<pre><code class=\"cpp\">DrawDebugLine(GetWorld(), traceStart, traceEnd, FColor::Green, true, 1.0f);<\/code><\/pre>\n<p><strong>\u0412 UNIGINE<\/strong> \u0437\u0430 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d <em>Visualizer<\/em>:<\/p>\n<pre><code>\/\/ \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Visualizer::setEnabled(true);  \/*..*\/  Visualizer::renderLine3D(vec3_zero, vec3(5, 0, 0), vec4_one); Visualizer::renderVector(node->getPosition(), node->getDirection(Math::AXIS_Y) * 10, vec4(1, 0, 0, 1));<\/code><\/pre>\n<p><strong><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435.<\/em><\/strong><em> Visualizer \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <\/em><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/console\/?rlang=cpp#show_visualizer\"><em><u>show_visualizer 1<\/u><\/em><\/a><em>.<\/em><\/p>\n<h4>\u0421\u043c. \u0442\u0430\u043a\u0436\u0435:<\/h4>\n<ul>\n<li>\n<p>\u0412\u0441\u0435 \u0442\u0438\u043f\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0432 API \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/engine\/class.visualizer?rlang=cpp\"><em><u>Visualizer<\/u><\/em><\/a>.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041f\u043e\u0438\u0441\u043a Actor \/ Node<\/h4>\n<p>Unreal Engine 4:<\/p>\n<pre><code class=\"cpp\">\/\/ \u043f\u043e\u0438\u0441\u043a Actor \u0438\u043b\u0438 UObject \u043f\u043e \u0438\u043c\u0435\u043d\u0438 AActor* MyActor = FindObject&lt;AActor>(nullptr, TEXT(\"MyNamedActor\"));  \/\/ \u041f\u043e\u0438\u0441\u043a Actor \u043f\u043e \u0442\u0438\u043f\u0443 for (TActorIterator&lt;AMyActor> It(GetWorld()); It; ++It) {     AMyActor* MyActor = *It;     \/\/ ... }<\/code><\/pre>\n<p>UNIGINE:<\/p>\n<pre><code class=\"cpp\">\/\/ \u043f\u043e\u0438\u0441\u043a Node \u043f\u043e \u0438\u043c\u0435\u043d\u0438 NodePtr my_node = World::getNodeByName(\"my_node\");  \/\/ \u043f\u043e\u0438\u0441\u043a \u0432\u0441\u0435\u0445 \u043d\u043e\u0434 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0435\u043c Vector&lt;NodePtr> nodes; World::getNodesByName(\"test\", nodes);  \/\/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u0430 \u043d\u043e\u0434\u044b int index = node->findChild(\"child_node\"); NodePtr direct_child = node->getChild(index);  \/\/ \u0420\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043d\u043e\u0434\u044b \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u0432 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 NodePtr child = node->findNode(\"child_node\", 1);<\/code><\/pre>\n<h4>\u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0442 \u0442\u0438\u043f\u0430 \u043a \u0442\u0438\u043f\u0443<\/h4>\n<p>\u041a\u043b\u0430\u0441\u0441\u044b \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u043d\u043e\u0434 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043e\u0442 <a href=\"https:\/\/developer.unigine.com\/en\/docs\/latest\/api\/library\/nodes\/?rlang=cs\"><em><u>Node<\/u><\/em><\/a> \u0432 UNIGINE, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u043e\u0434\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <em>ObjectMeshStatic<\/em>), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043d\u0438\u0436\u0430\u044e\u0449\u0435\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u2014 <strong>Downcasting<\/strong> (\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u043c\u0443), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439. \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <strong>Upcasting<\/strong> (\u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043a \u0431\u0430\u0437\u043e\u0432\u043e\u043c\u0443), \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>UPrimitiveComponent* Primitive = MyActor->GetComponentByClass(UPrimitiveComponent::StaticClass());<\/code><\/p>\n<p align=\"left\"><code>USphereComponent* SphereCollider = Cast&lt;USphereComponent>(Primitive);<\/code><\/p>\n<p align=\"left\"><code>if (SphereCollider != nullptr)<\/code><\/p>\n<p align=\"left\"><code>{<\/code><\/p>\n<p align=\"left\"><code>\/\/ ...<\/code><\/p>\n<p align=\"left\"><code>}<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>\/\/ \u043f\u043e\u0438\u0441\u043a \u043d\u043e\u0434\u044b \u0432 \u043c\u0438\u0440\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438<\/code><\/p>\n<p align=\"left\"><code>NodePtr baseptr = World::getNodeByName(\"my_meshdynamic\");<\/code><\/p>\n<p align=\"left\"><code>\/\/ \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0442\u0438\u043f\u0430<\/code><\/p>\n<p align=\"left\"><code>ObjectMeshDynamicPtr derivedptr = checked_ptr_cast&lt;ObjectMeshDynamic>(baseptr);<\/code><\/p>\n<p align=\"left\"><code>\/\/ \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/code><\/p>\n<p align=\"left\"><code>ObjectMeshDynamicPtr derivedptr = static_ptr_cast&lt;ObjectMeshDynamic>(World::getNodeByName(\"my_meshdynamic\"));<\/code><\/p>\n<p align=\"left\"><code>\/\/ \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a Object \u2014 \u0431\u0430\u0437\u043e\u0432\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0434\u043b\u044f ObjectMeshDynamic<\/code><\/p>\n<p align=\"left\"><code>ObjectPtr object = derivedptr;<\/code><\/p>\n<p align=\"left\"><code>\/\/ \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a Node \u2014 \u0431\u0430\u0437\u043e\u0432\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043c\u0438\u0440\u0430<\/code><\/p>\n<p align=\"left\"><code>NodePtr node = derivedptr;<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0423\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 Actor \/ Node<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MyActor->Destroy();<\/code><\/p>\n<p align=\"left\"><code>\/\/ \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 actor\u2019\u0430 \u0441 1-\u0441\u0435\u043a\u0443\u043d\u0434\u043d\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439<\/code><\/p>\n<p align=\"left\"><code>MyActor->SetLifeSpan(1);<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>node.deleteLater(); \/\/ \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u0442\u044c \u043d\u043e\u0434\u0443<\/code><\/p>\n<p align=\"left\"><code>\/\/\u0432\u044b\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0434\u0440\u0430\u043c\u0438<\/code><\/p>\n<p align=\"left\"><code>node.deleteForce(); \/\/ \u0444\u043e\u0440\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u043c<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0434\u044b \u0432 UNIGINE \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \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 \u0442\u0430\u0439\u043c\u0435\u0440 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435.<\/p>\n<h4>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 Actor \/ Node Reference<\/h4>\n<p>\u0417\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 actor (Spawning) \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <em>UWorld::SpawnActor():<\/em><\/p>\n<pre><code class=\"cpp\">AKAsset* SpawnedActor1 = (AKAsset*) GetWorld()->SpawnActor(AKAsset::StaticClass(), NAME_None, &amp;Location);<\/code><\/pre>\n<p>\u0412 Unreal Engine 4 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 actor \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">AMyActor* CreateCloneOfMyActor(AMyActor* ExistingActor, FVector SpawnLocation, FRotator SpawnRotation) { UWorld* World = ExistingActor->GetWorld(); FActorSpawnParameters SpawnParams; SpawnParams.Template = ExistingActor; World->SpawnActor&lt;AMyActor>(ExistingActor->GetClass(), SpawnLocation, SpawnRotation, SpawnParams); }<\/code><\/pre>\n<p>\u0412 UNIGINE \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 <a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/api\/library\/nodes\/class.node?rlang=cpp#clone_Node\"><em><u>Node::clone()<\/u><\/em><\/a> \u0434\u043b\u044f \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u043e\u0434\u044b, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0432 \u043c\u0438\u0440\u0435, \u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/engine\/class.world?rlang=cpp#loadNode_cstr_int_Node\"><em><u>World::loadNode<\/u><\/em><\/a> \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043d\u043e\u0434 \u0438\u0437 \u0430\u0441\u0441\u0435\u0442\u0430 <strong><em>.node<\/em><\/strong>. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430 \u0441\u0446\u0435\u043d\u0443 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u200b\u200b\u0432\u0441\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043d\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043a\u0430\u043a <a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/objects\/nodes\/reference\/?rlang=cpp\"><em><u>Node Reference<\/u><\/em><\/a>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u0430\u0441\u0441\u0435\u0442\u0443 \u043b\u0438\u0431\u043e \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/common\/logic\/component_system\/cs\/class.component?rlang=cpp#parameters\"><u>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430<\/u><\/a>, \u043b\u0438\u0431\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0443\u043a\u0430\u0437\u0430\u0432 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/principles\/filesystem\/?rlang=cpp#virtual_paths\"><u>\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c<\/u><\/a> \u043a \u043d\u0435\u043c\u0443:<\/p>\n<pre><code class=\"cpp\">\/\/ MyComponent.h PROP_PARAM(File, node_to_spawn);  \/\/ MyComponent.cpp \/* .. *\/ void MyComponent::init() { \/\/ \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u043d\u043e\u0434\u044b Dummy NodeDummyPtr dummy = NodeDummy::create();  \/\/ \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043d\u043e\u0434\u044b NodePtr cloned = dummy->clone();  \/\/ \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043d\u043e\u0434 \u0438\u0437 \u0430\u0441\u0441\u0435\u0442\u0430 NodePtr spawned = World::loadNode(node_to_spawn.get()); spawned->setWorldPosition(node->getWorldPosition());  \/\/ \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u043f\u0443\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 NodePtr spawned_manually = World::loadNode(\"nodes\/node_reference.node\"); }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u0442 <strong><em>.node <\/em><\/strong>\u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/21f\/c27\/c6b\/21fc27c6b8f80f0eac98c9d30b47ce72.png\" width=\"682\" height=\"415\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/21f\/c27\/c6b\/21fc27c6b8f80f0eac98c9d30b47ce72.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u00a0<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0430\u0441\u0441\u0435\u0442\u0430 <em>*.node <\/em>\u2014 \u0441\u043e\u0437\u0434\u0430\u0442\u044c NodeReference \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0435\u0439 \u043d\u043e\u0434 \u043a\u0430\u043a \u0441 \u043e\u0434\u043d\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c. \u0422\u0438\u043f Node Reference \u0438\u043c\u0435\u0435\u0442 \u0440\u044f\u0434 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439 \u0438 \u0442\u043e\u043d\u043a\u0438\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u043e\u0432 (\u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0434, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0438 \u0442.\u0434.), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c <a href=\"https:\/\/developer.unigine.com\/en\/docs\/latest\/api\/library\/nodes\/class.nodereference?rlang=cpp\"><u>\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b<\/u><\/a> \u0441 \u044d\u0442\u0438\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cpp\">void MyComponent::update() { NodeReferencePtr nodeRef = NodeReference::create(\"nodes\/node_reference_0.node\"); }<\/code><\/pre>\n<h3>\u0417\u0430\u043f\u0443\u0441\u043a \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435<\/h3>\n<p><em>Unreal Engine 4 <\/em>\u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Blueprint\/Python \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432.<\/p>\n<p>UNIGINE \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C++ \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u2014 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/editor2\/extensions\/?rlang=cpp&amp;autotranslate=ru\"><u>\u043f\u043b\u0430\u0433\u0438\u043d\u044b, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 <\/u><em><u>C++<\/u><\/em><\/a>.<\/p>\n<p>\u0414\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/uniginescript\/?rlang=cpp\"><em><u>UnigineScript<\/u><\/em><\/a>. <em>UnigineScript API <\/em>\u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u0441\u0444\u0435\u0440\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 UNIGINE, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u043d\u0430 C++.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/uniginescript\/add_scripts\/?rlang=cpp\"><u>\u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442<\/u><\/a>:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u043e\u0437\u0434\u0430\u0432 \u0441\u043a\u0440\u0438\u043f\u0442 \u043c\u0438\u0440\u0430:<\/strong><\/p>\n<\/li>\n<\/ul>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0430\u0441\u0441\u0435\u0442 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 <strong><em>.usc<\/em><\/strong>.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6b1\/25a\/f12\/6b125af126a18aac7514b7e3e23a7f15.png\" width=\"277\" height=\"202\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6b1\/25a\/f12\/6b125af126a18aac7514b7e3e23a7f15.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"2\">\n<li>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 \u0432 \u043d\u0435\u043c \u043b\u043e\u0433\u0438\u043a\u0443. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u043b\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440:<\/p>\n<\/li>\n<\/ol>\n<pre><code>\/\/\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 (UnigineScript) #include &lt;core\/unigine.h> vec3 lookAtPoint = vec3_zero; Node node; int init() {     node = engine.world.getNodeByName(\"material_ball\");     return 1; } int update() { if(engine.editor.isLoaded())         node.worldLookAt(lookAtPoint);     return 1; }<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u0438\u0440 \u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043c\u0438\u0440\u0430. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 <em>Apply<\/em> \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u043c\u0438\u0440.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/027\/cbe\/42a\/027cbe42aa5d80da93a2f5b92d8f3f83.png\" width=\"528\" height=\"404\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/027\/cbe\/42a\/027cbe42aa5d80da93a2f5b92d8f3f83.png\"\/><figcaption><\/figcaption><\/figure>\n<ol start=\"4\">\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043e\u043a\u043d\u043e <em>\u043a\u043e\u043d\u0441\u043e\u043b\u0438<\/em> \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u0442\u0430\u043a \u0438 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438.<\/p>\n<ul>\n<li>\n<p><strong><em>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f WorldExpression.<\/em><\/strong> \u0421 \u0442\u043e\u0439 \u0436\u0435 \u0446\u0435\u043b\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0434\u0443 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/uniginescript\/add_scripts\/?rlang=cpp\"><em><u>WorldExpression<\/u><\/em><\/a>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u043c\u0438\u0440:<\/p>\n<\/li>\n<\/ul>\n<ol>\n<li>\n<p>\u041d\u0430\u0436\u043c\u0438\u0442\u0435 <em>Create -> Logic -> Expression<\/em> \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u043d\u043e\u0434\u0443 WorldExpression \u0432 \u043c\u0438\u0440.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430 <em>UnigineScript<\/em> \u0432 \u043f\u043e\u043b\u0435 <strong>Source<\/strong>:<\/p>\n<\/li>\n<\/ol>\n<pre><code>\/\/\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 (UnigineScript) { vec3 lookAtPoint = vec3_zero; Node node = engine.world.getNodeByName(\"my_node\"); node.worldLookAt(lookAtPoint); }<\/code><\/pre>\n<ol start=\"3\">\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043e\u043a\u043d\u043e <em>Console<\/em> \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0448\u0438\u0431\u043e\u043a.<\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.<\/p>\n<\/li>\n<\/ol>\n<h3>\u0422\u0440\u0438\u0433\u0433\u0435\u0440\u044b<\/h3>\n<h4>Unreal Engine 4:<\/h4>\n<pre><code class=\"cpp\">UCLASS() class AMyActor : public AActor { GENERATED_BODY()  \/\/ \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 UPROPERTY() UPrimitiveComponent* Trigger;  AMyActor() {     Trigger = CreateDefaultSubobject&lt;USphereComponent>(TEXT(\"TriggerCollider\"));      Trigger.bGenerateOverlapEvents = true;     Trigger.SetCollisionEnabled(ECollisionEnabled::QueryOnly); }  virtual void NotifyActorBeginOverlap(AActor* Other) override;  virtual void NotifyActorEndOverlap(AActor* Other) override; };<\/code><\/pre>\n<p>\u0412 UNIGINE <em>Trigger<\/em> \u2014 \u044d\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u043d\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/nodes\/class.nodetrigger?rlang=cpp\"><strong><u>NodeTrigger<\/u><\/strong><\/a> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u043b\u0431\u044d\u043a \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/nodes\/class.nodetrigger?rlang=cs#addEnabledCallback_EnabledCallback_void_ptr\"><u>\u0432\u043a\u043b\u044e\u0447\u0435\u043d\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d<\/u><\/a> \u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/nodes\/class.nodetrigger?rlang=cs#addPositionCallback_PositionCallback_void_ptr\"><u>\u043f\u043e\u0437\u0438\u0446\u0438\u0438<\/u><\/a> \u0441\u0430\u043c\u043e\u0439 \u043d\u043e\u0434\u044b.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/worlds\/class.worldtrigger?rlang=cpp\"><strong><u>WorldTrigger<\/u><\/strong><\/a> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u043b\u0431\u044d\u043a, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u0430\u044f-\u043b\u0438\u0431\u043e \u043d\u043e\u0434\u0430 (\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u0438\u043f\u0430) \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/worlds\/class.worldtrigger?rlang=cs#addEnterCallback_EnterCallback_void_ptr\"><u>\u0432\u043d\u0443\u0442\u0440\u044c<\/u><\/a> \u0438\u043b\u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/worlds\/class.worldtrigger?rlang=cs#addLeaveCallback_LeaveCallback_void_ptr\"><u>\u0437\u0430 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u044b<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/physics\/class.physicaltrigger?rlang=cpp\"><strong><u>PhysicalTrigger<\/u><\/strong><\/a> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u043b\u0431\u044d\u043a, \u043a\u043e\u0433\u0434\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/physics\/class.physicaltrigger?rlang=cs#addEnterCallback_EnterCallback_void_ptr\"><u>\u0432\u043d\u0443\u0442\u0440\u044c<\/u><\/a> \u0438\u043b\u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/physics\/class.physicaltrigger?rlang=cs#addLeaveCallback_LeaveCallback_void_ptr\"><u>\u0437\u0430<\/u><\/a> \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u044b.<\/p>\n<\/li>\n<\/ul>\n<p><strong><em>\u0412\u0430\u0436\u043d\u043e!<\/em><\/strong><em> PhysicalTrigger \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441\u0442\u043e\u043b\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e <\/em><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/callbacks\/index?rlang=cpp#physics\"><em><u>\u0442\u0435\u043b\u0430 \u0438 \u0441\u043e\u0447\u043b\u0435\u043d\u0435\u043d\u0438\u044f<\/u><\/em><\/a><em> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f.<\/em><\/p>\n<p><strong>WorldTriger<\/strong> \u2014 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435:<\/p>\n<pre><code class=\"cpp\">WorldTriggerPtr trigger; int enter_callback_id;                  \/\/ \u043a\u043e\u043b\u043b\u0431\u044d\u043a \u043f\u0440\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u044c \u043e\u0431\u044a\u0435\u043c\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430 void AppWorldLogic::enter_callback(NodePtr node){     Log::message(\"\\nA node named %s has entered the trigger\\n\", node->getName()); }                  \/\/ implement the leave callback void AppWorldLogic::leave_callback(NodePtr node){     Log::message(\"\\nA node named %s has left the trigger\\n\", node->getName()); }                  int AppWorldLogic::init() {     \/\/ \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 WorldTrigger \u043d\u043e\u0434\u044b     trigger = WorldTrigger::create(Math::vec3(3.0f));                      \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0434\u044b \u0432\u043d\u0443\u0442\u0440\u044c \u043e\u0431\u044a\u0435\u043c\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430     \/\/ \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 id \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0430 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f     enter_callback_id = trigger->addEnterCallback(MakeCallback(this, &amp;AppWorldLogic::enter_callback));     \/\/ \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 \u043d\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043f\u043e\u043a\u0438\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0434\u043e\u0439 \u043e\u0431\u044a\u0435\u043c\u0430 \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u0430     trigger->addLeaveCallback(MakeCallback(this, &amp;AppWorldLogic::leave_callback));      return 1; }<\/code><\/pre>\n<h3>\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0432\u043e\u0434\u0430<\/h3>\n<p><em>Unreal Engine 4:<\/em><\/p>\n<pre><code class=\"cpp\">UCLASS() class AMyPlayerController : public APlayerController {     GENERATED_BODY()      void SetupInputComponent()     {         Super::SetupInputComponent();          InputComponent->BindAction(\"Fire\", IE_Pressed, this, &amp;AMyPlayerController::HandleFireInputEvent);         InputComponent->BindAxis(\"Horizontal\", this, &amp;AMyPlayerController::HandleHorizontalAxisInputEvent);         InputComponent->BindAxis(\"Vertical\", this, &amp;AMyPlayerController::HandleVerticalAxisInputEvent);     }      void HandleFireInputEvent();     void HandleHorizontalAxisInputEvent(float Value);     void HandleVerticalAxisInputEvent(float Value); };<\/code><\/pre>\n<p>UNIGINE:<\/p>\n<pre><code class=\"cpp\">\/* .. *\/  #include &lt;UnigineApp.h> #include &lt;UnigineConsole.h> #include &lt;UnigineInput.h>  \/* .. *\/  void MyInputController::update()  {     \/\/ \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u043c\u044b\u0448\u0438     if (Input::isMouseButtonDown(Input::MOUSE_BUTTON_RIGHT))     {         Math::ivec2 mouse = Input::getMouseCoord();         \/\/ \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u043c\u044b\u0448\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c         Log::message(\"Right mouse button was clicked at (%d, %d)\\n\", mouse.x, mouse.y);     }          \/\/ \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 'Q' \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u043b\u0438 \u043a\u043e\u043d\u0441\u043e\u043b\u044c     if (Input::isKeyDown(Input::KEY_Q) &amp;&amp; !Console::isActive())     {         App::exit();     } }  \/* .. *\/<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0433\u043b\u0442\u043e\u043d <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/controls\/class.controlsapp?rlang=cpp\"><strong><u>ControlsApp<\/u><\/strong><\/a> \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u0432\u044f\u0437\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a \u043d\u0430\u0431\u043e\u0440\u0443 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0432\u0432\u043e\u0434\u0430. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438, \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/editor2\/settings\/controls\/?rlang=cpp\"><em><u>Controls<\/u><\/em><\/a> \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435:<\/p>\n<pre><code class=\"cpp\">#include &lt;Unigine.h>  \/* .. *\/  void MyInputController::init()  {     \/\/ \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448\u0430\u043c \u0438 \u043a\u043d\u043e\u043f\u043a\u0430\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e     ControlsApp::setStateKey(Controls::STATE_FORWARD, App::KEY_PGUP);     ControlsApp::setStateKey(Controls::STATE_BACKWARD, App::KEY_PGDOWN);     ControlsApp::setStateKey(Controls::STATE_MOVE_LEFT, 'l');     ControlsApp::setStateKey(Controls::STATE_MOVE_RIGHT, 'r');     ControlsApp::setStateButton(Controls::STATE_JUMP, App::BUTTON_LEFT); }  void MyInputController::update()  {     if (ControlsApp::clearState(Controls::STATE_FORWARD))     {         Log::message(\"FORWARD key pressed\\n\");     }     else if (ControlsApp::clearState(Controls::STATE_BACKWARD))     {         Log::message(\"BACKWARD key pressed\\n\");     }     else if (ControlsApp::clearState(Controls::STATE_MOVE_LEFT))     {         Log::message(\"MOVE_LEFT key pressed\\n\");     }     else if (ControlsApp::clearState(Controls::STATE_MOVE_RIGHT))     {         Log::message(\"MOVE_RIGHT key pressed\\n\");     }     else if (ControlsApp::clearState(Controls::STATE_JUMP))     {         Log::message(\"JUMP button pressed\\n\");     } }  \/* .. *\/<\/code><\/pre>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0430 \u0441 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439 (Raycast)\u00a0<\/h3>\n<h4>Unreal Engine 4:<\/h4>\n<pre><code class=\"cpp\">APawn* AMyPlayerController::FindPawnCameraIsLookingAt() { FCollisionQueryParams Params; Params.AddIgnoredActor(GetPawn());  FHitResult Hit;  FVector Start = PlayerCameraManager->GetCameraLocation(); FVector End = Start + (PlayerCameraManager->GetCameraRotation().Vector() * 1000.0f); bool bHit = GetWorld()->LineTraceSingle(Hit, Start, End, ECC_Pawn, Params);  if (bHit) {     return Cast&lt;APawn>(Hit.Actor.Get()); }  return nullptr; }<\/code><\/pre>\n<p>\u0412 UNIGINE \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/usage\/intersections\/index?rlang=cpp\"><u>Intersections<\/u><\/a>:<\/p>\n<pre><code class=\"cpp\">#include \"MyComponent.h\" #include &lt;UnigineWorld.h> #include &lt;UnigineVisualizer.h> #include &lt;UnigineGame.h> #include &lt;UnigineInput.h>  using namespace Unigine; using namespace Math;  REGISTER_COMPONENT(MyComponent);  void MyComponent::init() {     Visualizer::setEnabled(true); }  void MyComponent::update() {     \/\/ \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u0435\u043a \u043b\u0443\u0447\u0430     ivec2 mouse = Input::getMouseCoord();     float length = 100.0f;     vec3 start = Game::getPlayer()->getWorldPosition();     vec3 end = start + vec3(Game::getPlayer()->getDirectionFromScreen(mouse.x, mouse.y)) * length;      \/\/ \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0448\u0435\u0439 \u0441 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0431\u0438\u0442\u0430\u043c\u0438 \u043c\u0430\u0441\u043a\u0438 Intersection     int mask = ~(1 &lt;&lt; 2 | 1 &lt;&lt; 4);      WorldIntersectionNormalPtr intersection = WorldIntersectionNormal::create();      ObjectPtr obj = World::getIntersection(start, end, mask, intersection);      if (obj)     {         vec3 point = intersection->getPoint();         vec3 normal = intersection->getNormal();         Visualizer::renderVector(point, point + normal, vec4_one);         Log::message(\"Hit %s at (%f,%f,%f)\\n\", obj->getName(), point.x, point.y, point.z);     } }<\/code><\/pre>\n<hr\/>\n<p>\u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 UNIGINE 2 Community \u043c\u043e\u0436\u043d\u043e, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0432 <a href=\"https:\/\/unigine.com\/ru\/get-unigine\/sign-up-free\"><u>\u0444\u043e\u0440\u043c\u0443<\/u><\/a> \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0441\u0430\u0439\u0442\u0435.<\/p>\n<p>\u0412\u0441\u0435 \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0430\u0446\u0438\u0438 UNIGINE:<\/p>\n<ul>\n<li>\n<p><strong>Community<\/strong> \u2014 \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0438\u0434\u0435\u043e\u0438\u0433\u0440 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0436\u0430\u043d\u0440\u043e\u0432 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f VR).<\/p>\n<\/li>\n<li>\n<p><strong>Engineering<\/strong> \u2014 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0430\u044f, \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f. \u0412\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0433\u043e\u0442\u043e\u0432\u043e\u043a \u0434\u043b\u044f \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<\/li>\n<li>\n<p><strong>Sim<\/strong> \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043f\u043e\u0434 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b (\u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043f\u043b\u0430\u043d\u0435\u0442\u044b \u0438 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435) \u0441 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/unigine.com\/ru\/get-unigine\"><strong><u>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0442\u0430\u0446\u0438\u044f\u0445 \u0438 \u0446\u0435\u043d\u0430\u0445<\/u><\/strong><\/a><\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/unigine\/blog\/670518\/\"> https:\/\/habr.com\/ru\/company\/unigine\/blog\/670518\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h4>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438, \u0442\u0440\u0438\u0433\u0433\u0435\u0440\u044b, \u0432\u0432\u043e\u0434, \u0440\u0435\u0439\u043a\u0430\u0441\u0442\u0438\u043d\u0433 \u0438 \u0434\u0440\u0443\u0433\u043e\u0435.<\/h4>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0438\u0449\u0435\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 Unreal Engine \u0438\u043b\u0438 Unity, \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u0431\u0435\u0437\u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 UNIGINE \u0441 \u0437\u0430\u0440\u0443\u0431\u0435\u0436\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432. \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u0432\u044b\u043f\u0443\u0441\u043a\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u0441 Unreal Engine 4 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430.<\/p>\n<h3>\u041e\u0431\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f<\/h3>\n<p>\u0418\u0433\u0440\u043e\u0432\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 Unreal Engine 4 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u0430\u0441\u0441\u043e\u0432<em> C++ <\/em>\u0438\u043b\u0438<em> Blueprint Visual Scripting <\/em>\u2014 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u043e\u0434\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 Unreal Engine 4 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 (Class Wizard), \u0432\u044b\u0431\u0440\u0430\u0432 \u043d\u0443\u0436\u043d\u044b\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f.<\/p>\n<p>\u0412 UNIGINE \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f C++ \u0438 C# API. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0436\u0435\u043b\u0430\u0435\u043c\u043e\u0435 API \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 C++, \u0442.\u043a. \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 Unreal Engine 4 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u044f\u0437\u044b\u043a\u0435.<\/p>\n<p>\u0414\u043b\u044f C++ \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>Windows:<\/p>\n<ul>\n<li>\n<p>Visual Studio 2015+;<\/p>\n<\/li>\n<li>\n<p>CMake;<\/p>\n<\/li>\n<li>\n<p>Qt-based: Qt Creator, QMake \u0438\u043b\u0438 CMake (\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0434\u043b\u044f Engineering \u0438 Sim \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0439 SDK);<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>Linux:<\/p>\n<ul>\n<li>\n<p>GNU Make.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <strong>Open Code IDE<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 IDE \u0434\u043b\u044f C++ \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432:<\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0412 Unreal Engine 4 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u043e\u0442 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 Game Framework, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a AActor, APawn, ACharacter \u0438 \u0442.\u043f., \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 <strong><em>BeginPlay()<\/em><\/strong>, <strong><em>Tick() <\/em><\/strong>\u0438 <strong><em>EndPlay()<\/em><\/strong> \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 actor.<\/p>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445, \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c\u044b\u0445 \u043d\u0430 actor\u2019\u044b \u2014 \u043a\u043b\u0430\u0441\u0441\u0430\u0445, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 <em>UActorComponent <\/em>\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0449\u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445<em> <\/em><strong><em>InitializeComponent()<\/em><\/strong> \u0438 <strong><em>TickComponent()<\/em><\/strong>.<\/p>\n<p>\u0412 UNIGINE \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442, \u0447\u0442\u043e <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/execution_sequence\/app_logic_system?rlang=cpp\"><u>\u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/u><\/a> \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0442\u0440\u0435\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u0436\u0438\u0437\u043d\u0438:<\/p>\n<ul>\n<li>\n<p><strong>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430<\/strong> (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b AppSystemLogic.cpp) \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0436\u0438\u0437\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u0433\u0438\u043a\u0430 \u043c\u0438\u0440\u0430<\/strong> (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b AppWorldLogic.cpp) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u0438\u0440 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430<\/strong> (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0444\u0430\u0439\u043b AppEditorLogic.cpp) \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b\u00a0 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0435\u0441\u0442\u044c <a href=\"https:\/\/developer.unigine.com\/en\/docs\/latest\/code\/fundamentals\/execution_sequence\/app_logic_system?rlang=cpp#worldlogic\"><u>\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b<\/u><\/a>, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0434\u0432\u0438\u0436\u043a\u0430. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043b\u043e\u0433\u0438\u043a\u0438 \u043c\u0438\u0440\u0430:<\/p>\n<ul>\n<li>\n<p><em>init() &#8212; \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u0438\u0440\u0430;<\/em><\/p>\n<\/li>\n<li>\n<p><em>update() &#8212; \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440;<\/em><\/p>\n<\/li>\n<li>\n<p><em>shutdown() &#8212; \u0434\u043b\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438 \u043c\u0438\u0440\u0430;<\/em><\/p>\n<\/li>\n<\/ul>\n<p>\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u0438\u0440\u0430 \u043d\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u0430 \u043a \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u043c\u0438\u0440\u0443 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/usage\/multiple_worldlogic\/index?rlang=cpp&amp;autotranslate=ru\"><u>\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439 \u0434\u043b\u044f \u043c\u0438\u0440\u0430 \u043a\u043e\u0434<\/u><\/a> \u043c\u0435\u0436\u0434\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438, \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0442 <em>WorldLogic<\/em>.<\/p>\n<p>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 UNIGINE \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/principles\/component_system\/component_system_cpp\/?rlang=cpp\"><u>\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/u><\/a>. \u041b\u043e\u0433\u0438\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u043c \u043e\u0442 <em>ComponentBase<\/em>, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043e\u043a \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u2014 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/principles\/properties\/?rlang=cpp\"><strong><u>Property<\/u><\/strong><\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043d\u043e\u0434\u0435 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u041a\u0430\u0436\u0434\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0431\u043e\u0440 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/execution_sequence\/code_update?rlang=cpp\"><u>\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430<\/u><\/a> \u0434\u0432\u0438\u0436\u043a\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u0433\u0440\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/start\/quick_start\/intro?rlang=cpp\"><strong><u>\u00ab\u041a\u0440\u0430\u0442\u043a\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u043f\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e\u00bb<\/u><\/strong><\/a>.<\/p>\n<p>\u0421\u0440\u0430\u0432\u043d\u0438\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0432 \u043e\u0431\u043e\u0438\u0445 \u0434\u0432\u0438\u0436\u043a\u0430\u0445. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432 <em>Unreal Engine 4<\/em> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">UCLASS() class UMyComponent : public UActorComponent {     GENERATED_BODY()  public:     UPROPERTY(EditAnywhere)     int32 TotalDamage;       \/\/ Called after the owning Actor was created     void InitializeComponent();      \/\/ Called when the component or the owning Actor is being destroyed     void UninitializeComponent();      \/\/ Component version of Tick     void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction); };<\/code><\/pre>\n<p>\u0418 \u0432 UNIGINE. \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043f\u0435\u0440\u0432\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0435 (<strong><em>AppSystemLogic.cpp)<\/em><\/strong>:<\/p>\n<pre><code class=\"cpp\">\/* .. *\/ #include &lt;UnigineComponentSystem.h>  \/* .. *\/  int AppSystemLogic::init() {     Unigine::ComponentSystem::get()->initialize();     return 1; }<\/code><\/pre>\n<p>\u0418 \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442:<\/p>\n<p><strong><em>MyComponent.h:<\/em><\/strong><\/p>\n<pre><code class=\"cpp\">#pragma once #include &lt;Unigine.h> #include &lt;UnigineComponentSystem.h>  using namespace Unigine; class MyComponent : public ComponentBase { public:     \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 MyComponent     COMPONENT(MyComponent, ComponentBase);      \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u0446\u0438\u043a\u043b\u0430 \u0436\u0438\u0437\u043d\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430     COMPONENT_INIT(init);     COMPONENT_UPDATE(update);     COMPONENT_SHUTDOWN(shutdown);      \/\/ \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435     PROP_PARAM(Float, speed, 30.0f);      \/\/ \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u043d\u0438 Property, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c     PROP_NAME(\"my_component\"); protected:     void init();     void update();     void shutdown(); };<\/code><\/pre>\n<p><strong><em>MyComponent.cpp:<\/em><\/strong><\/p>\n<pre><code class=\"cpp\">#include \"MyComponent.h\"  \/\/ \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 MyComponent REGISTER_COMPONENT(MyComponent);  \/\/ \u0432\u044b\u0437\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 void MyComponent::init(){}  \/\/ \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043a\u0430\u0436\u0434\u044b\u0439 \u043a\u0430\u0434\u0440 void MyComponent::update(){}  \/\/ \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u0440\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438\u043b\u0438 \u043d\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d void MyComponent::shutdown(){}<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c property \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e IDE.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/migration\/from_ue\/?rlang=cpp#editor_play\"><u>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/u><\/a> \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c property \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u043a\u043e\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0438 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/editor2\/properties_settings\/organizing_properties\/?rlang=cpp#assign_property\"><u>\u043d\u0430\u0437\u043d\u0430\u0447\u044c\u0442\u0435<\/u><\/a> \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 property \u043d\u043e\u0434\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0440\u0430\u0431\u043e\u0442\u0443 \u043b\u043e\u0433\u0438\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u043d\u0438\u0436\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/execution_sequence\/code_update?rlang=cpp\"><u>\u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/usage\/using_component_system\/index?rlang=cpp\"><u>C++ Component System<\/u><\/a>.<\/p>\n<\/li>\n<\/ul>\n<h4>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e API<\/h4>\n<p>\u0412\u0441\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 Unreal Engine 4 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u043e\u0442 UObject, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 C++ \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0438\u043b\u0438 \u0443\u043c\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 Unreal Smart Pointer Library.<\/p>\n<p>\u0412 UNIGINE API \u0435\u0441\u0442\u044c <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/smartpointers?rlang=cpp&amp;autotranslate=ru\"><u>\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043c\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439<\/u><\/a>, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u043e\u0434 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code class=\"cpp\">\/\/ \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0434\u0443 \u0442\u0438\u043f\u0430 NodeType &lt;NodeType>Ptr nodename = &lt;NodeType>::create(&lt;construction_parameters>); \/\/ \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u043e\u0434\u0443 \u0438\u0437 \u043c\u0438\u0440\u0430 nodename.deleteLater();<\/code><\/pre>\n<p>\u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0432\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0435\u0448\u0430 \u0438\u0437 \u0430\u0441\u0441\u0435\u0442\u0430, \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u043d\u043e\u0434\u0435 \u0442\u0438\u043f\u0430 ObjectMeshStatic \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">    MeshPtr mesh = Mesh::create();     mesh->load(\"fbx\/model.fbx\/model.mesh\");     mesh->addBoxSurface(\"box_surface\", Math::vec3(0.5f, 0.5f, 0.5f));     ObjectMeshStaticPtr my_object = ObjectMeshStatic::create(mesh);     my_object.deleteLater();     mesh.clear();<\/code><\/pre>\n<p>\u042d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u043a\u0430\u043a \u0438 \u043b\u044e\u0431\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439:<\/p>\n<pre><code class=\"cpp\">MyComponent *my_component = getComponent&lt;MyComponent>(node);<\/code><\/pre>\n<h4>\u0422\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"center\"><strong><u>\u0422\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445<\/u><\/strong><\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\"><strong>\u0427\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">int8\/uint8<\/p>\n<p align=\"left\">int16\/uint16<\/p>\n<p align=\"left\">int32\/uint32<\/p>\n<p align=\"left\">int64\/uint64,<\/p>\n<p align=\"left\">float,<\/p>\n<p align=\"left\">double<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b C++:<\/p>\n<p align=\"left\">signed \u0438 unsigned char, short, int, long, long long, float, double<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\"><strong>\u0421\u0442\u0440\u043e\u043a\u0438<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">FString:<\/p>\n<p align=\"left\">FString MyStr = TEXT(&#171;Hello, Unreal 4!&#187;).<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/developer.unigine.com\/en\/docs\/latest\/api\/library\/common\/class.string?rlang=cpp&amp;autotranslate=ru\"><u>String<\/u><\/a>:<\/p>\n<p align=\"left\">String str(&#171;Hello, UNIGINE 2!&#187;);<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\"><strong>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">TArray, TMap, TSet<\/p>\n<\/td>\n<td>\n<p align=\"left\"><a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/api\/library\/containers\/?rlang=cpp&amp;autotranslate=ru\"><u>Vector, Map, Set \u0438 \u0434\u0440\u0443\u0433\u0438\u0435<\/u><\/a>:<\/p>\n<p align=\"left\">Vector&lt;NodePtr> nodes;<\/p>\n<p align=\"left\">World::getNodes(nodes);<\/p>\n<p align=\"left\">for(NodePtr n : nodes) { }<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"234\" width=\"234\">\n<p align=\"left\"><strong>\u0412\u0435\u043a\u0442\u043e\u0440\u044b \u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\">FVector3f &#8212; FVector3d,<\/p>\n<p align=\"left\">FMatrix44f &#8212; FMatrtix44d \u0438 \u0434\u0440\u0443\u0433\u0438\u0435<\/p>\n<\/td>\n<td>\n<p align=\"left\">vec3 &#8212; dvec3,<\/p>\n<p align=\"left\">mat4 &#8212; dmat4 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b \u0432 <a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/api\/library\/math\/index_cpp?rlang=cpp&amp;autotranslate=ru\"><u>\u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435<\/u><\/a>.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>UNIGINE \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u0430\u043a \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c (Float), \u0442\u0430\u043a \u0438 \u0434\u0432\u043e\u0439\u043d\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (Double), \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0434\u0430\u043a\u0446\u0438\u0438 SDK. \u041f\u043e\u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043f\u0440\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/code\/double_precision\/usage?rlang=cpp\"><u>\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445<\/u><\/a>, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043f\u043e\u0434 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<h3>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u043e\u0434\u0430<\/h3>\n<h4>\u0412\u044b\u0432\u043e\u0434 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>UE_LOG(LogTemp, Warning, TEXT(\"Your message\"));<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>Log::message(\"Debug info: %s\\n\", text);<\/code><\/p>\n<p align=\"left\"><code>Log::message(\"Debug info: %d\\n\", number);<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0421\u043c. \u0442\u0430\u043a\u0436\u0435:<\/h4>\n<ul>\n<li>\n<p>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 API \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/common\/class.log?rlang=cpp\"><em><u>Log<\/u><\/em><\/a><em>.<\/em><\/p>\n<\/li>\n<\/ul>\n<h4>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0446\u0435\u043d\u044b<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>UGameplayStatics::OpenLevel(GetWorld(), TEXT(\"MyLevelName\"));<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>World::loadWorld(\"YourWorldName\");<\/code>\u00a0\u00a0\u00a0 <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0414\u043e\u0441\u0442\u0443\u043f \u043a Actor \/ Node \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MyComponent->GetOwner();<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">N<code>odePtr owning_node = node;<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><strong>\u0421\u043c. \u0442\u0430\u043a\u0436\u0435:<\/strong><\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/youtu.be\/KjEGI311NiA\"><u>\u0412\u0438\u0434\u0435\u043e\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/u><\/a>, \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0435, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u043e\u0434\u0430\u043c \u0438\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e C++ Component System.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0438\u0437 Actor \/ Node<\/h4>\n<p><em>Unreal Engine<\/em> 4:<\/p>\n<pre><code class=\"cpp\">UMyComponent* MyComp = MyActor->FindComponentByClass&lt;UMyComponent>();<\/code><\/pre>\n<p>UNIGINE:<\/p>\n<pre><code class=\"cpp\">MyComponent *my_component = getComponent&lt;MyComponent>(node);<\/code><\/pre>\n<h4>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438<\/h4>\n<p>\u0412 Unreal Engine 4 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <strong><em>USceneComponent <\/em><\/strong>(\u0438\u043b\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u0439) \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 actor\u2019\u0430. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043e\u0441\u0435\u0439 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 \u043c\u0438\u0440\u043e\u0432\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u0445, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <em>USceneComponent <\/em>(<em>GetForwardVector()<\/em>) \u0438\u043b\u0438 AActor (<em>GetActorForwardVector()<\/em>).<\/p>\n<p>\u0412 UNIGINE \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u043e\u0434\u044b \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0435\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (<a href=\"https:\/\/developer.unigine.com\/en\/docs\/latest\/api\/library\/math\/cs\/mat4?rlang=cpp\"><em><u>mat4<\/u><\/em><\/a>), \u0430 \u0432\u0441\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u0438\u043b\u0438 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0435\u0439 \u043d\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 <a href=\"https:\/\/developer.unigine.com\/en\/docs\/2.15.1\/api\/library\/nodes\/class.node?rlang=cs\"><em><u>Node<\/u><\/em><\/a>. \u0422\u0430\u043a\u043e\u0439 \u0436\u0435 \u0432\u0435\u043a\u0442\u043e\u0440 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 UNIGINE \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/api\/library\/nodes\/class.node?rlang=cpp#getWorldDirection_int_vec3\"><em><u>Node::getWorldDirection()<\/u><\/em><\/a>:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"center\"><strong><u>Unreal Engine<\/u><\/strong> 4<\/p>\n<\/td>\n<td>\n<p align=\"center\"><strong><u>UNIGINE<\/u><\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>FVector forward = MyActor->GetActorForwardVector();<\/code><\/p>\n<p align=\"left\"><code>FVector up = MyActor->GetActorUpVector();<\/code><\/p>\n<p align=\"left\"><code>FVector right = MyActor->GetActorRightVector();<\/code><\/p>\n<p align=\"left\"><code>FVector CurrentLocation = MyActor->GetActorLocation();<\/code><\/p>\n<p align=\"left\"><code>CurrentLocation += forward * speed * DeltaTime;<\/code><\/p>\n<p align=\"left\"><code>MyActor->SetActorLocation(CurrentLocation);<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>mat4 t_local = node->getTransform();<\/code><\/p>\n<p align=\"left\"><code>mat4 t_world = node->getWorldTransform();<\/code><\/p>\n<p align=\"left\"><code>vec3 pos_world = node->getWorldPosition();<\/code><\/p>\n<p align=\"left\"><code>vec3 forward = node->getWorldDirection(Math::AXIS_Y);<\/code><\/p>\n<p align=\"left\"><code>vec3 right = node->getWorldDirection(Math::AXIS_X);<\/code><\/p>\n<p align=\"left\"><code>vec3 up = node->getWorldDirection(Math::AXIS_Z);<\/code><\/p>\n<p align=\"left\"><code>node->translate(forward * speed * Game::getIFps());<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0421\u043c. \u0442\u0430\u043a\u0436\u0435:<\/h4>\n<ul>\n<li>\n<p><a href=\"https:\/\/developer.unigine.com\/ru\/docs\/latest\/code\/fundamentals\/matrices\/index?rlang=cpp#coordinate_system\"><u>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442<\/u><\/a> \u0432 UNIGINE.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0411\u043e\u043b\u0435\u0435 \u043f\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 DeltaTime \/ IFps<\/h4>\n<p>\u0412 <em>Unreal Engine<\/em> 4, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0430 \u043e\u0434\u043d\u043e \u0438 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0430\u0434\u0440\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u0442. \u0434.), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c <strong>deltaTime<\/strong> (\u0432\u0440\u0435\u043c\u044f \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430), \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434\u0443 <em>Tick(float deltaTime)<\/em>. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-334257","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334257","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=334257"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/334257\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=334257"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=334257"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=334257"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}