{"id":457916,"date":"2025-04-29T09:18:50","date_gmt":"2025-04-29T09:18:50","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=457916"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=457916","title":{"rendered":"<span>Unreal Engine \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445: \u0423\u0447\u0438\u043c\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c API \u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b<\/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<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c API \u0432\u00a0Unreal Engine. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0430\u043b\u0435\u0440\u0435\u044e, \u0432\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0438\u0437 <a href=\"https:\/\/www.artic.edu\/collection\">The Art Institute of Chicago <\/a>\u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043e <a href=\"https:\/\/www.artic.edu\/open-access\/public-api\">\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 API<\/a>, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432\u00a0\u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043d\u0430\u00a0\u043f\u043b\u043e\u0441\u043a\u043e\u043c \u043c\u0435\u0448\u0435, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0432 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0441\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0438\u043c\u0435\u043d\u0435\u043c \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0430 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 C++, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Engine\/GameFramework\/AActor\">Actor<\/a>, \u0441 <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Engine\/Components\/UStaticMeshComponent\">UStaticMeshComponent <\/a>\u0438 <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Engine\/Components\/UTextRenderComponent\">UTextRenderComponent<\/a>, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Engine\/Components\/USceneComponent\">USceneComponent<\/a>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 CatalogId\u00a0\u2014 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0435, \u043a\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437\u00a0\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP\">HTTP<\/a>\u2011\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u041d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0430\u043a\u0442\u043e\u0440\u0430 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0430\u043b\u0435\u0440\u0435\u044e. \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0430\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u00a0\u0441\u0446\u0435\u043d\u0443 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0433\u043e CatalogId.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0434\u043b\u044f\u00a0\u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u00a0\u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0443\u0436\u0435 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0442\u0435\u043c\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0448\u0430\u0433 \u043d\u0430\u0437\u0430\u0434 \u0438 \u0441\u043a\u0430\u0436\u0435\u043c \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 API.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0435\u0441\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u0441\u043c\u0435\u043b\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0431\u0437\u0430\u0446\u0435\u0432 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u00a0\u0440\u0430\u0437\u0434\u0435\u043b\u0443 <a href=\"#1\"><strong>\u00ab\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Unreal Engine\u00bb<\/strong>.<\/a><\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 API?<\/h3>\n<p>\u0414\u043b\u044f\u00a0\u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435\u00a0\u0437\u043d\u0430\u043a\u043e\u043c \u0441\u00a0\u044d\u0442\u0438\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043c, API \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0Application Programming Interface\u00a0\u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0441\u00a0\u0434\u0440\u0443\u0433\u043e\u043c. API \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b.<\/p>\n<p>\u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b: \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Unreal Engine, \u0438 \u0432\u0435\u0431\u2011\u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 API \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <em>The Art Institute of Chicago (ARTIC).<\/em><\/p>\n<p>\u041d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432\u00a0\u0440\u043e\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f API, \u0430\u00a0\u0432\u0435\u0431\u2011\u0441\u0435\u0440\u0432\u0435\u0440\u00a0\u2014 \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 (\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430). \u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 API \u043d\u0435\u00a0\u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u0441\u044f \u043e\u00a0\u0442\u043e\u043c, \u043a\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u043c \u0438 \u043a\u0430\u043a\u00a0\u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<p>\u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0Unreal Engine, \u043d\u043e\u00a0\u0438 \u0432\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a\u00a0Unity \u0438\u043b\u0438\u00a0\u0434\u0430\u0436\u0435 \u0432\u00a0\u0432\u0435\u0431\u2011\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u044d\u0442\u043e\u043c, \u043f\u0435\u0440\u0435\u0439\u0434\u044f \u043f\u043e\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0435: <a href=\"https:\/\/api.artic.edu\/api\/v1\/artworks\/129884\">https:\/\/api.artic.edu\/api\/v1\/artworks\/<strong>129\u00a0884<\/strong><\/a><\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0430\u0436\u043c\u0435\u0442\u0435 \u043d\u0430\u00a0\u044d\u0442\u0443 \u0441\u0441\u044b\u043b\u043a\u0443, \u0432\u0430\u0448 \u0432\u0435\u0431\u2011\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 GET\u2011\u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u00a0\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043e\u0442\u0432\u0435\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 <a href=\"https:\/\/www.json.org\/json-en.html\">JSON (JavaScript Object Notation)<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 JSON\u2011\u0434\u0430\u043d\u043d\u044b\u0435\u00b9, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e\u00a0\u043e\u043d\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u0435 \u0410\u043b\u044c\u043c\u044b \u0422\u043e\u043c\u0430\u0441 <a href=\"https:\/\/www.artic.edu\/artworks\/129884\/starry-night-and-the-astronauts\">\u00ab\u0417\u0432\u0435\u0437\u0434\u043d\u0430\u044f \u043d\u043e\u0447\u044c \u0438 \u0430\u0441\u0442\u0440\u043e\u043d\u0430\u0432\u0442\u044b<\/a>\u00bb, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 ARTIC \u0441\u00a0ID <strong>129\u00a0884.<\/strong><\/p>\n<p><sub>(1) \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u00abJSON Prettifier\u00bb \u0438\u043b\u0438 \u00abJSON Formatter\u00bb. \u042d\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0431\u043e\u043b\u0435\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f\u00a0\u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0432\u0438\u0434 (\u00abpretty print\u00bb).<\/sub><\/p>\n<p>\u041a\u0430\u043a\u00a0\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u041a\u0430\u043a\u00a0\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0API, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442, \u043a\u0442\u043e \u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442: \u0432\u0435\u0431\u2011\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438\u00a0Unreal Engine \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435? \u041e\u0442\u0432\u0435\u0442 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u0430\u0445.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0API \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u0438 \u0432\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0412\u0430\u0448 \u0432\u0435\u0431\u2011\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u00a0\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP \u0438 \u043a\u0430\u043a\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442.<\/p>\n<p>\u041a\u00a0\u0441\u0447\u0430\u0441\u0442\u044c\u044e, Unreal Engine \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u0441\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e. \u0412\u00a0\u0435\u0433\u043e \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/HTTP\/FHttpModule\">HttpModule <\/a>\u0438 <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Json\/Serialization\/FJsonSerializer\">JSON Serializer<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431\u00a0API \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445, \u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0432\u00a0\u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a\u00a0XML \u0438 JSON. \u041d\u043e\u00a0\u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u043b\u044f\u00a0\u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u0436\u0435\u043d \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e\u00a0\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_HTTP_header_fields\">\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438<\/a>, \u0445\u043e\u0442\u044f \u044f \u0438 \u043d\u0435\u00a0\u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0430 \u0438\u0445 \u0432\u00a0\u044d\u0442\u043e\u043c \u043a\u0440\u0430\u0442\u043a\u043e\u043c \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 API \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u043a\u0440\u043e\u043b\u0438\u0447\u044c\u044e \u043d\u043e\u0440\u0443. \u0421\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u0432\u0441\u0435 API \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0435\u0431\u2011API, \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <a href=\"https:\/\/en.wikipedia.org\/wiki\/REST\">REST (Representational State Transfer)<\/a>\u00a0\u2014 \u043e\u0441\u043e\u0431\u044b\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u0441\u0442\u0438\u043b\u044c \u0438 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e API.<\/p>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Unreal Engine<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0448\u0430\u0433\u0438 \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 (\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0430\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c), \u043d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441<em> \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u00a0C++ <\/em>\u0432 <em>Unreal Engine 5.1.1<\/em>.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445, \u043d\u043e\u00a0\u044d\u0442\u043e\u0442 <a href=\"https:\/\/github.com\/marianpekar\/ue5-fetch-art\">\u043f\u0440\u0438\u043c\u0435\u0440 <\/a>\u044f \u043f\u0438\u0441\u0430\u043b\u0430 \u043d\u0430\u00a0\u0432\u0435\u0440\u0441\u0438\u0438 5.1.1, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435\u00a0\u043c\u043e\u0433\u0443 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u00a0\u0432\u0435\u0440\u0441\u0438\u0438 4.27.<\/p>\n<p>\u042f \u043d\u0430\u0437\u0432\u0430\u043b\u0430 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 FetchArt, \u043d\u043e\u00a0\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430<\/h3>\n<p>\u041d\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u0435\u043d \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043d\u043e\u00a0\u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0437\u0436\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043d\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043d\u0430\u00a0\u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 <em>Content Browser <\/em>\u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u043a\u043b\u0438\u043a\u043d\u0443\u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u0438 \u0432\u044b\u0431\u0440\u0430\u0432 \u043f\u0443\u043d\u043a\u0442 <em>New Folder<\/em>. \u041d\u0430\u0437\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 <em>Materials<\/em>. \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u0432\u044b\u0431\u0440\u0430\u0432 \u0432\u00a0\u0442\u043e\u043c\u00a0\u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u043f\u0443\u043d\u043a\u0442 <em>New Material<\/em>. \u041d\u0430\u0437\u043e\u0432\u0438\u0442\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b <em>ExampleMaterial<\/em>.<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 <em>Material Graph<\/em>. \u041d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0442\u0430\u043c \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0430\u0444\u0430 \u0438 \u043d\u0430\u0439\u0434\u0438\u0442\u0435 <em>Texture Sample<\/em>. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0443\u0437\u0435\u043b <em>Texture Sample<\/em>, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430\u00a0\u043d\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <em>Material Graph<\/em>.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043d\u0430\u00a0\u0443\u0437\u043b\u0435 <em>Texture Sample <\/em>\u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <em>Convert to Parameter<\/em>. \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0443\u0437\u0435\u043b <em>Texture Sample <\/em>\u0432\u00a0\u0443\u0437\u0435\u043b\u2011\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0447\u0442\u043e\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7ee\/37e\/f89\/7ee37ef89335f91168f9eccdd96df0b8.png\" alt=\"We convert the TextureSample node into a TextureParameter node so that we can easily assign a texture created from an image fetched from an API in our custom C++ class derived from Actor later on.\" title=\"\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u00abTexture Sample\u00bb \u0432 \u00abTexture Parameter\u00bb \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0438\u0437\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 API.\" width=\"303\" height=\"285\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7ee\/37e\/f89\/7ee37ef89335f91168f9eccdd96df0b8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7ee\/37e\/f89\/7ee37ef89335f91168f9eccdd96df0b8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u00abTexture Sample\u00bb \u0432 \u00abTexture Parameter\u00bb \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0438\u0437\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 API.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0437\u043b\u0430 <em>Texture Sample <\/em>\u0432\u00a0\u0443\u0437\u0435\u043b <em>Texture Parameter <\/em>\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0437\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>\u00abTextureParameter\u00bb <\/em>\u0438 \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u043d\u0430\u0448\u0435\u043c C++ \u043a\u043e\u0434\u0435 \u043d\u0430\u00a0\u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e\u00a0\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0412\u044b\u0431\u0440\u0430\u0432 \u0443\u0437\u0435\u043b <em>Texture Parameter<\/em>, \u043d\u0430\u0439\u0434\u0438\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b <em>Material Expression Texture Base <\/em>\u043d\u0430\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 <em>Details <\/em>\u0432\u00a0\u043b\u0435\u0432\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430\u00a0\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0437\u043d\u0430\u0447\u043e\u043a \u0438\u0437\u043e\u0433\u043d\u0443\u0442\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u00a0\u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 <em>Param<\/em>.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/25e\/e18\/05c\/25ee1805c0745a209b8d527c3d3601ed.png\" alt=\"We need to assign any texture to TextureParameter, even if we're not going to use that particular texture. This is because, without any assigned texture, we won't be able to save the material after we connect the RGB output pit of the parameter with the Base Color input of the parameter due to an error.\" title=\"\u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043a\u0430\u043a\u0443\u044e\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 TextureParameter, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u0431\u0435\u0437\u00a0\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u044b \u043d\u0435\u00a0\u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 RGB \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u00a0\u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c Base Color \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u0437\u2011\u0437\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438.\" width=\"564\" height=\"132\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/25e\/e18\/05c\/25ee1805c0745a209b8d527c3d3601ed.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/25e\/e18\/05c\/25ee1805c0745a209b8d527c3d3601ed.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043a\u0430\u043a\u0443\u044e\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 TextureParameter, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u0431\u0435\u0437\u00a0\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u044b \u043d\u0435\u00a0\u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 RGB \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u00a0\u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c Base Color \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u0437\u2011\u0437\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 <em>TextureParameter <\/em>\u043a\u00a0\u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 <em>Base Color <\/em>\u0432 <em>ExampleMaterial<\/em>. \u041d\u0435\u00a0\u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u043e\u043a\u043d\u0430 \u0438\u043b\u0438\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0438.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/11d\/f83\/528\/11df83528b2d96af955ad1ee549a45ec.png\" alt=\"Fun fact: this default texture has been with Unreal for more than 20 years. I remember it well from my days of making custom maps in UnrealEd 2.0 for LAN parties where my friends and I used to spend hours playing Unreal Tournament (GOTY 1999).\" title=\"\u0417\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u043a\u0442: \u044d\u0442\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0Unreal \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 20\u00a0\u043b\u0435\u0442. \u042f \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043c\u043d\u044e \u0435\u0435 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u0430\u0440\u0442 \u0432\u00a0UnrealEd 2.0\u00a0\u0434\u043b\u044f\u00a0LAN\u2011\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043e\u043a, \u043d\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0441\u00a0\u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438 \u0447\u0430\u0441\u0430\u043c\u0438 \u0438\u0433\u0440\u0430\u043b\u0438 \u0432\u00a0Unreal Tournament (GOTY 1999).\" width=\"482\" height=\"654\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/11d\/f83\/528\/11df83528b2d96af955ad1ee549a45ec.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/11d\/f83\/528\/11df83528b2d96af955ad1ee549a45ec.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0417\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u043a\u0442: \u044d\u0442\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0Unreal \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 20\u00a0\u043b\u0435\u0442. \u042f \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043c\u043d\u044e \u0435\u0435 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u0430\u0440\u0442 \u0432\u00a0UnrealEd 2.0\u00a0\u0434\u043b\u044f\u00a0LAN\u2011\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043e\u043a, \u043d\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0441\u00a0\u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438 \u0447\u0430\u0441\u0430\u043c\u0438 \u0438\u0433\u0440\u0430\u043b\u0438 \u0432\u00a0Unreal Tournament (GOTY 1999).<\/figcaption><\/div>\n<\/figure>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0430\u043a\u0442\u043e\u0440\u0430<\/h3>\n<p>\u0412 <em>Content Browser <\/em>\u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432\u00a0\u043f\u0430\u043f\u043a\u0443 <em>C++ Classes <\/em>\u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043f\u043e\u00a0\u043f\u0430\u043f\u043a\u0435 \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <em>Add New C++ Class<\/em>. \u0412\u043e\u00a0\u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <em>Actor <\/em>\u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dcb\/024\/c1f\/dcb024c1f149626642ae16b1a33a284a.png\" alt=\"According to the Unreal Engine documentation, &quot;An Actor is any object that can be placed into a level\u2026 Actors support 3D transformations such as translation, rotation, and scaling&quot;, which makes it the perfect parent class for our needs.\" title=\"\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Unreal Engine, \u00ab\u0410\u043a\u0442\u043e\u0440\u00a0\u2014 \u044d\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u0435\u043d\u044c... \u0410\u043a\u0442\u043e\u0440\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 3D\u2011\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u00bb, \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0445 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0434\u043b\u044f\u00a0\u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439.\" width=\"893\" height=\"467\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/dcb\/024\/c1f\/dcb024c1f149626642ae16b1a33a284a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dcb\/024\/c1f\/dcb024c1f149626642ae16b1a33a284a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Unreal Engine, \u00ab\u0410\u043a\u0442\u043e\u0440\u00a0\u2014 \u044d\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u0435\u043d\u044c&#8230; \u0410\u043a\u0442\u043e\u0440\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 3D\u2011\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u00bb, \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0445 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0434\u043b\u044f\u00a0\u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439.<\/figcaption><\/div>\n<\/figure>\n<h3>\u0418\u043c\u043f\u043e\u0440\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434. \u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 {\u0418\u043c\u044f\u0412\u0430\u0448\u0435\u0433\u043e\u041f\u0440\u043e\u0435\u043a\u0442\u0430}.Build.cs \u043c\u043e\u0434\u0443\u043b\u0438, \u043e\u0442\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<p>\u042d\u0442\u043e\u0442 C#\u2011\u0444\u0430\u0439\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/unreal-build-tool-in-unreal-engine\">Unreal Build Tool<\/a>. \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, UBT \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>\u0412\u00a0Unreal Engine \u043c\u043e\u0434\u0443\u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u00a0\u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e\u00a0\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u043a\u043e\u0434 \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430, \u044f \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u044e, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>HTTP<\/p>\n<\/li>\n<li>\n<p>Json<\/p>\n<\/li>\n<li>\n<p>JsonUtilities<\/p>\n<\/li>\n<li>\n<p>ImageWrapper<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432\u00a0\u0441\u043f\u0438\u0441\u043e\u043a <code>PublicDependencyModuleNames<\/code>, \u043a\u0430\u043a\u00a0\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435:<\/p>\n<pre><code>PublicDependencyModuleNames.AddRange(new string[] { \"Core\", \"CoreUObject\", \"Engine\", \"InputCore\", \"HTTP\", \"Json\", \"JsonUtilities\", \"ImageWrapper\" });<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 Unreal Engine \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u0441\u0431\u043e\u0440\u043a\u0443, \u0447\u0442\u043e, \u0432\u00a0\u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044e \u043e\u0431\u0449\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u00a0\u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 <code>RemoteImagePlane<\/code>. \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u00a0\u2014 RemoteImagePlane.h.<\/p>\n<p>\u042d\u0442\u043e\u043c\u0443 \u0430\u043a\u0442\u043e\u0440\u0443 \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 Tick \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c. \u041d\u0435\u00a0\u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 RemoteImagePlane.cpp. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 <code>PrimaryActorTick.bCanEverTick<\/code> \u0441\u00a0<code>true<\/code> \u043d\u0430\u00a0<code>false<\/code>.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u043c\u0435\u0436\u0434\u0443 <code>#include RemoteImagePlane.generated.h<\/code> \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c <code>UCLASS()<\/code>, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">class UStaticMeshComponent; class UTextRenderComponent; class USceneComponent;  class IHttpRequest; class IHttpResponse;  typedef TSharedPtr&lt;IHttpRequest, ESPMode::ThreadSafe&gt; FHttpRequestPtr; typedef TSharedPtr&lt;IHttpResponse, ESPMode::ThreadSafe&gt; FHttpResponsePtr;<\/code><\/pre>\n<p>\u042d\u0442\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u044b \u0442\u0438\u043f\u043e\u0432, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u00a0\u043a\u043e\u0434\u0435, \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0434\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u043b\u0435\u0433\u043a\u0438\u043c \u0432\u00a0\u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0438.<\/p>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u0442\u0435 \u0434\u0432\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 \u043f\u043e\u0434\u00a0\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 <code>protected<\/code>:<\/p>\n<pre><code class=\"cpp\">void OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful); void OnImageDownloaded(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful);<\/code><\/pre>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441\u00a0\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u00abOn\u00bb, \u0437\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0438\u043c\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u043d\u0430\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b, \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u0430\u043a\u0442\u043e\u0440\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\n<p><code>UStaticMeshComponent<\/code>\u00a0\u2014 \u0434\u043b\u044f\u00a0\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0448\u0430, \u043d\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0430 \u043d\u0430\u00a0\u044d\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0432\u00a0\u0432\u0438\u0434\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<\/li>\n<li>\n<p><code>UTextRenderComponent<\/code>\u00a0\u2014 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u044b, \u0438\u043c\u0435\u043d\u0438 \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0430 \u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u0430\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u00a0\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><code>USceneComponent<\/code>\u00a0\u2014 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<p>\u041c\u044b \u043d\u0435\u00a0\u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c <code>UTextRenderComponent<\/code> \u043a\u00a0<code>UStaticMeshComponent<\/code> \u0438\u043b\u0438\u00a0\u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u043c\u0443 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0430\u043a\u0442\u043e\u0440\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442 \u043d\u0430\u0448\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 (Plane) \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e USceneComponent, \u043a\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438 \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u0442\u0435 \u044d\u0442\u0438 \u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u2011\u0447\u043b\u0435\u043d\u0430, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">UPROPERTY(EditAnywhere) UStaticMeshComponent* PlaneComponent;  UPROPERTY(EditAnywhere) UTextRenderComponent* TextComponent;  USceneComponent* SceneComponent;<\/code><\/pre>\n<p>\u041c\u0430\u043a\u0440\u043e\u0441 <code>UPROPERTY()<\/code> \u0441\u043b\u0443\u0436\u0438\u0442 \u0434\u043b\u044f\u00a0\u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445\u2011\u0447\u043b\u0435\u043d\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u0430\u043a\u00a0\u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430. \u0421\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 EditAnywhere \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Unreal Editor, \u043a\u0430\u043a\u00a0\u0432\u00a0Blueprint, \u0442\u0430\u043a \u0438 \u043d\u0430\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 Details \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u0435 \u0434\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435\u2011\u0447\u043b\u0435\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u0448\u0438\u0440\u0438\u043d\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0434\u043b\u044f\u00a0\u043d\u0430\u0448\u0435\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0438 ID \u043a\u0430\u0440\u0442\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c:<\/p>\n<pre><code class=\"cpp\">UPROPERTY(EditAnywhere) int TextureWidth = 512;  UPROPERTY(EditAnywhere) int CatalogId = 129884;<\/code><\/pre>\n<p>\u041c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u00a0Unreal Editor \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u0448\u0438\u0445 \u0430\u043a\u0442\u043e\u0440\u043e\u0432, \u0432\u00a0\u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 CatalogId, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u043d\u0430\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u0445 \u0432\u00a0\u0438\u0433\u0440\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u0447\u0442\u043e\u00a0\u0435\u0441\u0442\u044c \u0432\u00a0\u043d\u0430\u0448\u0435\u043c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435,\u00a0\u2014 \u044d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u041e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e JSON, \u043d\u0435\u00a0\u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044f \u043a\u043e\u0434.<\/p>\n<pre><code class=\"cpp\">bool TryGetStringField(const TSharedPtr&lt;FJsonObject, ESPMode::ThreadSafe&gt;&amp; JsonObject, const FString&amp; FieldName, FString&amp; OutString) const;<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0448\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 DRY. DRY \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u00abDon&#8217;t Repeat Yourself\u00bb, \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e DRY\u2011\u043a\u043e\u0434\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f WET\u2011\u043a\u043e\u0434\u00a0\u2014 \u00abWrite Everything Twice\u00bb.<\/p>\n<h3>\u0424\u0430\u0439\u043b \u0441 \u043a\u043e\u0434\u043e\u043c<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u00a0\u0444\u0430\u0439\u043b\u0443 \u0441\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, RemoteImagePlane.cpp. \u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<pre><code class=\"cpp\">#include \"RemoteImagePlane.h\" #include \"Http.h\" #include \"JsonUtilities.h\" #include \"Components\/StaticMeshComponent.h\" #include \"Components\/TextRenderComponent.h\" #include \"Components\/SceneComponent.h\" #include \"Materials\/MaterialInstanceDynamic.h\" #include \"Engine\/Texture2D.h\" #include \"IImageWrapperModule.h\" #include \"IImageWrapper.h\"<\/code><\/pre>\n<p>\u041c\u044b \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0412\u00a0\u0444\u0430\u0439\u043b\u0435 \u0441\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e, \u0432\u043a\u043b\u044e\u0447\u0438\u0432 \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 #include. \u042d\u0442\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 \u043f\u043e\u00a0\u0441\u0443\u0442\u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0441\u044c \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442. \u0425\u043e\u0442\u044f \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a\u00a0\u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c.<\/p>\n<p>\u0412\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435, \u0433\u0434\u0435 \u043c\u044b \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 \u0434\u043b\u044f\u00a0<code>PrimaryActorTick.bCanEverTick<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>false<\/code>, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 <code>USceneComponent<\/code> \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0435\u0433\u043e \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<pre><code class=\"cpp\">SceneComponent = CreateDefaultSubobject&lt;USceneComponent&gt;(TEXT(\"SceneComponent\")); SetRootComponent(SceneComponent);<\/code><\/pre>\n<p>\u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c <code>USceneComponent<\/code> \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <code>CreateDefaultSubobject<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0435\u043c\u0443 \u0438\u043c\u044f \u00abSceneComponent\u00bb.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>UStaticMeshComponent<\/code> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441\u00a0\u043f\u043e\u0438\u0441\u043a\u0430 PlaneMesh \u0441\u0440\u0435\u0434\u0438 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0444\u0438\u0433\u0443\u0440 Unreal Engine \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e FObjectFinder. \u0415\u0441\u043b\u0438 \u043f\u043e\u0438\u0441\u043a \u0443\u0432\u0435\u043d\u0447\u0430\u043b\u0441\u044f \u0443\u0441\u043f\u0435\u0445\u043e\u043c, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 Plane \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0448\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0443\u0434\u0430\u0447\u0438 \u0437\u0430\u043d\u0435\u0441\u0438\u0442\u0435 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u00a0\u043b\u043e\u0433\u0438 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u043a\u0440\u043e\u0441\u0430 UE_LOG. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u0435 <code>PlaneComponent<\/code> \u043a\u00a0<code>SceneComponent<\/code>.<\/p>\n<pre><code class=\"cpp\">PlaneComponent = CreateDefaultSubobject&lt;UStaticMeshComponent&gt;(TEXT(\"PlaneComponent\")); static ConstructorHelpers::FObjectFinder&lt;UStaticMesh&gt; PlaneMesh(TEXT(\"\/Engine\/BasicShapes\/Plane\")); if (PlaneMesh.Succeeded()) {     PlaneComponent-&gt;SetStaticMesh(PlaneMesh.Object); } else  {     UE_LOG(LogTemp, Error, TEXT(\"[ARemoteImagePlane] Failed to find mesh\")); } PlaneComponent-&gt;SetupAttachment(SceneComponent);<\/code><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430\u00a0\u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0441\u00a0\u0438\u043c\u0435\u043d\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u0432\u00a0\u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0432\u00a0\u043b\u043e\u0433\u0430\u0445. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0438\u043b\u0438\u00a0\u0432\u0430\u0448\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u00a0\u043a\u043e\u043d\u0441\u043e\u043b\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u043f\u0440\u0438\u0448\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u0447\u0442\u043e\u00a0\u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435,\u00a0\u2014 \u044d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c <code>UTextRenderComponent<\/code> \u0438 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0435\u0433\u043e \u043a\u00a0\u043d\u0430\u0448\u0435\u043c\u0443 <code>SceneComponent<\/code>.<\/p>\n<pre><code class=\"cpp\">TextComponent = CreateDefaultSubobject&lt;UTextRenderComponent&gt;(TEXT(\"TextRenderComponent\")); TextComponent-&gt;SetupAttachment(SceneComponent);<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0430\u043a\u0442\u043e\u0440\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a\u00a0\u043c\u0435\u0442\u043e\u0434\u0443 BeginPlay. \u041f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 <code>Super::BeginPlay()<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u00a0\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u00a0\u043a\u043b\u0430\u0441\u0441\u0435 <code>AActor<\/code>), \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>FHttpModule<\/code>.<\/p>\n<pre><code class=\"cpp\">FHttpModule* HttpModule = &amp;FHttpModule::Get();<\/code><\/pre>\n<p><code>FHttpModule<\/code> \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0441\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c HTTP.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f HttpModule, \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 HttpRequest. \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 GET \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 RequestURL, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442 ARTIC Public API \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u0430\u0445. \u0412\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043d\u0430\u0448\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e\u2011\u0447\u043b\u0435\u043d CatalogId, \u0430\u00a0\u0434\u043b\u044f\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 Content\u2011Type\u00a0\u2014 application\/json.<\/p>\n<pre><code class=\"cpp\">TSharedRef&lt;IHttpRequest&gt; HttpRequest = HttpModule-&gt;CreateRequest(); HttpRequest-&gt;SetVerb(\"GET\"); FString RequestURL = FString::Format(TEXT(\"https:\/\/api.artic.edu\/api\/v1\/artworks\/{0}?fields=artist_display,title,image_id\"), { CatalogId }); HttpRequest-&gt;SetURL(RequestURL); HttpRequest-&gt;SetHeader(TEXT(\"Content-Type\"), TEXT(\"application\/json\"));<\/code><\/pre>\n<p>\u0412\u00a0Unreal Engine \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f SetVerb. \u041f\u043e\u043c\u0438\u043c\u043e GET, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 POST, PUT, DELETE, HEAD, OPTIONS, TRACE \u0438 CONNECT. \u042d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u043c HTTP \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e\u00a0\u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0440\u0438\u0432\u044f\u0436\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 OnResponseReceived, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u0435\u0449\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c, \u043a\u00a0<code>OnProcessRequestComplete<\/code>. \u0417\u0430\u0442\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u0437\u0430\u043f\u0440\u043e\u0441, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>ProcessRequest<\/code> \u043a\u043b\u0430\u0441\u0441\u0430 <code>HttpRequest<\/code>.<\/p>\n<pre><code class=\"cpp\">HttpRequest-&gt;OnProcessRequestComplete().BindUObject(this, &amp;ARemoteImagePlane::OnResponseReceived); HttpRequest-&gt;ProcessRequest();<\/code><\/pre>\n<p>\u041c\u0435\u0442\u043e\u0434 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 <code>OnResponseReceived<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 API \u0432\u0435\u0440\u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0443, \u0433\u0434\u0435 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438\u0445 \u043f\u043e\u00a0\u0441\u0432\u043e\u0435\u043c\u0443 \u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0442\u0435\u043b\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 <code>OnResponseReceived<\/code>. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0\u043b\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>bWasSuccessful<\/code> <code>true<\/code> \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f\u00a0\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 Response \u0432\u00a0\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0432\u044b\u0432\u0435\u0434\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431\u00a0\u043e\u0448\u0438\u0431\u043a\u0435 \u0432\u00a0Output Console \u0438 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u0438\u0437\u00a0\u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043e\u0441\u0440\u043e\u0447\u043d\u043e.<\/p>\n<pre><code class=\"cpp\">if (!bWasSuccessful || !Response.IsValid()) {     UE_LOG(LogTemp, Error, TEXT(\"[ARemoteImagePlane] Request failed\"));     return; }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438\u00a0\u0436\u0435 \u043e\u0442\u0432\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0435\u043d, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u00a0\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>GetContentAsString<\/code>. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON, \u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0435\u0435 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u00a0JsonObject \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e TJsonReader \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <code>FJsonSerializer::Deserialize<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">FString ResponseStr = Response-&gt;GetContentAsString(); TSharedPtr&lt;FJsonObject&gt; JsonObject; TSharedRef&lt;TJsonReader&lt;&gt;&gt; Reader = TJsonReaderFactory&lt;&gt;::Create(ResponseStr); if (!FJsonSerializer::Deserialize(Reader, JsonObject)) {     UE_LOG(LogTemp, Error, TEXT(\"[ARemoteImagePlane] Failed to parse JSON content\"));     return; }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043c\u0435\u0442\u043e\u0434 <code>Deserialize<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 false, \u0437\u043d\u0430\u0447\u0438\u0442, \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435\u00a0\u0443\u0434\u0430\u043b\u0430\u0441\u044c, \u0438 \u043d\u0430\u043c \u0441\u043d\u043e\u0432\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u043d\u0435\u0441\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u00a0\u043b\u043e\u0433 \u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0438\u0437\u00a0\u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0432\u00a0JsonObject, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a\u00a0\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0438\u0445 \u0432\u00a0FString \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043c\u044b \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>TryGetStringField<\/code>.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 JsonObject, \u0438\u043c\u044f \u043f\u043e\u043b\u044f \u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430\u00a0FString \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f.<\/p>\n<pre><code class=\"cpp\">bool ARemoteImagePlane::TryGetStringField(const TSharedPtr&lt;FJsonObject, ESPMode::ThreadSafe&gt;&amp; JsonObject, const FString&amp; FieldName, FString&amp; OutString) const {     if (JsonObject-&gt;TryGetStringField(FieldName, OutString))     {         UE_LOG(LogTemp, Log, TEXT(\"[ARemoteImagePlane] %s: %s\"), *FieldName, *OutString);         return true;     }     else     {         UE_LOG(LogTemp, Error, TEXT(\"[ARemoteImagePlane] Failed to get %s\"), *FieldName);         return false;     } }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f\u00a0\u043b\u0438\u0448\u044c \u0442\u043e\u043d\u043a\u043e\u0439 \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u0432\u043e\u043a\u0440\u0443\u0433 \u043c\u0435\u0442\u043e\u0434\u0430 <code>TryGetStringField<\/code> \u043d\u0430\u0434 JsonObject. \u041e\u043d \u0432\u0435\u0434\u0435\u0442 \u043b\u043e\u0433\u0438 \u0434\u043b\u044f\u00a0\u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u00a0\u043c\u0435\u0442\u043e\u0434\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0435 <code>OnResponseReceived<\/code>, \u043d\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c.<\/p>\n<p>JSON\u2011\u043e\u0442\u0432\u0435\u0442 \u043e\u0442\u00a0ARTIC API \u043d\u0435\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439, \u0430\u00a0\u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">{     \"data\": {         \"title\": \"Starry Night and the Astronauts\",         \"artist_display\": \"Alma Thomas\\nAmerican, 1891\u20131978\",         \"image_id\": \"e966799b-97ee-1cc6-bd2f-a94b4b8bb8f9\"     },     \"config\": {         \"iiif_url\": \"https:\/\/www.artic.edu\/iiif\/2\",         \"website_url\": \"http:\/\/www.artic.edu\"     },     \"info\": {          ...      } }<\/code><\/pre>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a\u0436\u0435 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f JsonObject (\u0434\u0430, \u043e\u0431\u044a\u0435\u043a\u0442\u044b JSON \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438 \u0447\u0430\u0441\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 JSON). \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>GetObjectField<\/code>.<\/p>\n<pre><code class=\"cpp\">const TSharedPtr&lt;FJsonObject, ESPMode::ThreadSafe&gt;&amp; DataObject = JsonObject-&gt;GetObjectField(\"data\"); if (!DataObject.IsValid()) {     UE_LOG(LogTemp, Error, TEXT(\"[ARemoteImagePlane] Invalid DataObject\"));     return; }<\/code><\/pre>\n<p>\u041a\u0430\u043a\u00a0\u043e\u0431\u044b\u0447\u043d\u043e, \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 JSON\u2011\u043e\u0431\u044a\u0435\u043a\u0442 DataObject, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c FString \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f\u00a0ImageId, Title, ArtistDisplay \u0438 IIIFUrl \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 <code>TryGetStringField<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cpp\">FString ImageId, Title, ArtistDisplay, IIIFUrl; if (!TryGetStringField(DataObject, \"image_id\", ImageId) || !TryGetStringField(DataObject, \"title\", Title) || !TryGetStringField(DataObject, \"artist_display\", ArtistDisplay))     return;<\/code><\/pre>\n<p>\u041c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c FString \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u043d\u0430\u0448 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u00a0\u0441\u0441\u044b\u043b\u043a\u0435, \u0430\u00a0\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043d\u0430\u00a0\u0443\u0441\u043f\u0435\u0445 \u0438\u043b\u0438\u00a0\u043d\u0435\u0443\u0434\u0430\u0447\u0443. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u00a0\u0443\u0441\u043b\u043e\u0432\u043d\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0435, \u0430\u00a0\u0432\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0434\u043e\u0441\u0440\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u041d\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c UE_LOG, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0\u043c\u044b \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u00a0\u0441\u0430\u043c\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 <code>TryGetStringField<\/code>.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 Title \u0438 ArtistDisplay \u0434\u043b\u044f\u00a0\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043d\u0430\u0448\u0435\u0433\u043e TextComponent. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0435\u0440\u0435\u0434 \u044d\u0442\u0438\u043c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 <em>\u0442\u0438\u0440\u0435 <\/em>\u043d\u0430 <em>\u0434\u0435\u0444\u0438\u0441\u044b<\/em>, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u00a0\u0448\u0440\u0438\u0444\u0442\u043e\u0432\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 UTextRenderComponent \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u0435\u0442 \u0433\u043b\u0438\u0444\u0430 \u0434\u043b\u044f <em>\u0442\u0438\u0440\u0435 <\/em>\u0438 \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 Replace.<\/p>\n<pre><code class=\"cpp\">FString LabelText = FString::Format(TEXT(\"{0}\\n{1}\"), { Title, ArtistDisplay });  FString EnDashChar = FString::Chr(0x2013); FString HyphenChar = FString::Chr(0x002D); LabelText = LabelText.Replace(*EnDashChar, *HyphenChar);  TextComponent-&gt;SetText(FText::FromString(LabelText));<\/code><\/pre>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u043c\u044b \u0437\u0430\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e\u00a0\u0441\u0442\u0440\u043e\u043a\u0430\u0445, \u0441\u0442\u043e\u0438\u0442 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e\u00a0\u0432\u00a0Unreal Engine \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<ul>\n<li>\n<p>FString\u00a0\u2014 \u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0\u043e\u0431\u044b\u0447\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u043e\u043a\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>FName\u00a0\u2014 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d \u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0432\u00a0\u0434\u0432\u0438\u0436\u043a\u0435. \u042d\u0442\u043e\u0442 \u0442\u0438\u043f \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u0438\u043c\u0435\u043d \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<\/li>\n<li>\n<p>FText\u00a0\u2014 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f\u00a0\u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438 TextComponent, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e URL\u2011\u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432 ImageId, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0443\u0436\u0435 \u0438\u0437\u0432\u043b\u0435\u043a\u043b\u0438 \u0438\u0437\u00a0DataObject, \u0441\u00a0IIIFUrl, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437\u00a0ConfigData, \u0435\u0449\u0435 \u043e\u0434\u043d\u043e\u0433\u043e JsonObject.<\/p>\n<p>\u0412\u044b \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 IIIFUrl \u0438\u0437\u00a0ConfigData \u043c\u0430\u043b\u043e \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u00a0\u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0DataObject.<\/p>\n<pre><code class=\"cpp\">const TSharedPtr&lt;FJsonObject, ESPMode::ThreadSafe&gt;&amp; ConfigObject = JsonObject-&gt;GetObjectField(\"config\"); if (!ConfigObject.IsValid()) {     UE_LOG(LogTemp, Error, TEXT(\"[ARemoteImagePlane] Invalid ConfigObject\"));     return; }  if (!TryGetStringField(ConfigObject, \"iiif_url\", IIIFUrl))     return;<\/code><\/pre>\n<p>\u0420\u0430\u043d\u0435\u0435 \u043c\u044b \u0443\u0436\u0435 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u0438 \u043f\u0440\u0438\u043d\u0446\u0438\u043f DRY, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043b\u043e\u0433\u0438\u043a\u0438 \u0432\u0441\u0435\u0433\u043e\u00a0\u043b\u0438\u0448\u044c \u0434\u0432\u0430\u0436\u0434\u044b. \u041d\u0430\u00a0\u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u00a0\u0441\u0442\u043e\u0438\u0442 \u0432\u044b\u0434\u0435\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f\u00a0\u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f ImageUrl. <\/p>\n<pre><code class=\"cpp\">FString ImageUrl = FString::Format(TEXT(\"{0}\/{1}\/full\/{2},\/0\/default.jpg\"), { IIIFUrl, ImageId, TextureWidth }); UE_LOG(LogTemp, Log, TEXT(\"[ARemoteImagePlane] ImageUrl: %s\"), *ImageUrl);<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0\u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e\u2011\u0447\u043b\u0435\u043d TextureWidth.<\/p>\n<p>\u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0441\u00a0CatalogId 129\u00a0884, TextureWidth 512\u00a0\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c ImageId e966\u00a0799b-97ee-1cc6-bd2f\u2011a94b4b8bb8f9\u00a0ImageUrl \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<p><a href=\"https:\/\/www.artic.edu\/iiif\/2\/e966799b-97ee-1cc6-bd2f-a94b4b8bb8f9\/full\/512,\/0\/default.jpg\">https:\/\/www.artic.edu\/iiif\/2\/<strong>e966\u00a0799b-97ee-1cc6-bd2f\u2011a94b4b8bb8f9<\/strong>\/full\/<strong>512<\/strong>,\/0\/default.jpg<\/a><\/p>\n<p>\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ImageUrl \u0434\u043b\u044f\u00a0\u0432\u0442\u043e\u0440\u043e\u0433\u043e HTTP\u2011\u0437\u0430\u043f\u0440\u043e\u0441\u0430, \u043d\u0430\u00a0\u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u0435\u0440\u0432\u043e\u043c\u0443, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043f\u043e\u2011\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u00a0\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP.<\/p>\n<pre><code class=\"cpp\">FHttpModule* HttpModule = &amp;FHttpModule::Get();  TSharedRef&lt;IHttpRequest&gt; GetImageRequest = FHttpModule::Get().CreateRequest(); GetImageRequest-&gt;SetVerb(\"GET\"); GetImageRequest-&gt;SetURL(ImageUrl); GetImageRequest-&gt;OnProcessRequestComplete().BindUObject(this, &amp;ARemoteImagePlane::OnImageDownloaded);  GetImageRequest-&gt;ProcessRequest();<\/code><\/pre>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f HTTP\u2011\u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043c\u0435\u0442\u043e\u0434\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0435, \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c \u043a\u00a0OnProcessRequestComplete. \u042d\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043b\u043e\u0433\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>\u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u0432\u00a0\u0442\u0435\u043b\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 OnImageDownload \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435, \u0447\u0442\u043e\u00a0\u0437\u0430\u043f\u0440\u043e\u0441\u00a0\u0431\u044b\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u043c, \u0430\u00a0\u043e\u0442\u0432\u0435\u0442\u00a0\u2014 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c, \u043a\u0430\u043a\u00a0\u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u044d\u0442\u043e \u0440\u0430\u043d\u0435\u0435.<\/p>\n<pre><code class=\"cpp\">if (!bWasSuccessful || !Response.IsValid()) {     UE_LOG(LogTemp, Error, TEXT(\"[ARemoteImagePlane] Failed get image\"));     return; }<\/code><\/pre>\n<p>\u0425\u043e\u0442\u044c \u0438 \u043c\u0430\u043b\u043e\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u00a0\u043e\u0442\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 <code>bWasSuccessful<\/code> \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c, \u043d\u043e\u00a0\u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e\u00a0\u0431\u044b\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0439 \u0432\u00a0Unreal Engine, \u0433\u0434\u0435 \u043e\u0434\u0438\u043d \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a\u00a0\u0441\u0431\u043e\u044e \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f!<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u043c \u0435\u0449\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0430\u0433\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0\u043d\u0430\u0448\u0435\u043c <code>PlaneComponent<\/code>.<\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 <code>ExampleMaterial<\/code> \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0442\u0438\u043f\u0430 <code>UMaterialInstanceDynamic<\/code>.<\/p>\n<pre><code class=\"cpp\">UMaterial* MaterialToInstance = LoadObject&lt;UMaterial&gt;(nullptr, TEXT(\"Material'\/Game\/Materials\/ExampleMaterial.ExampleMaterial'\"));  UMaterialInstanceDynamic* MaterialInstance = UMaterialInstanceDynamic::Create(MaterialToInstance, nullptr);<\/code><\/pre>\n<p>\u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0430\u0440\u0442\u0438\u043d. \u0425\u043e\u0442\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c, \u043d\u0430\u0448\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u0433\u0430\u043b\u0435\u0440\u0435\u044f \u043c\u043e\u0433\u043b\u0430\u00a0\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0443\u0447\u043d\u043e\u0439, \u0435\u0441\u043b\u0438\u00a0\u0431\u044b \u0432\u00a0\u043d\u0435\u0439 \u043f\u043e\u0432\u0441\u044e\u0434\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u0430.<\/p>\n<p>\u041a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0442\u043e\u0432, \u0430\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u044b \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0441\u0442\u0430\u043d\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 <code>ImageWrapper<\/code> \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u043e\u0434\u0443\u043b\u044f <code>IImageWrapperModule<\/code> \u0434\u043b\u044f\u00a0\u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"cpp\">TArray&lt;uint8&gt; ImageData = Response-&gt;GetContent(); IImageWrapperModule&amp; ImageWrapperModule = FModuleManager::LoadModuleChecked&lt;IImageWrapperModule&gt;(FName(\"ImageWrapper\")); TSharedPtr&lt;IImageWrapper&gt; ImageWrapper = ImageWrapperModule.CreateImageWrapper(EImageFormat::JPEG);<\/code><\/pre>\n<p>\u041c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c, \u0447\u0442\u043e\u00a0\u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u00a0\u2014 JPEG.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u0442\u00a0\u043b\u0438 <code>ImageWrapper<\/code> \u0434\u043e\u043b\u0436\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0432\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0442\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0437\u00a0\u0431\u0443\u0444\u0435\u0440\u0430 <code>ImageData<\/code> \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u0445 \u0432\u00a0\u0434\u0440\u0443\u0433\u043e\u043c \u0431\u0443\u0444\u0435\u0440\u0435 <code>UncompressedBGRA<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d \u043a\u0430\u043a\u00a0TArray.<\/p>\n<p>\u0411\u0443\u0444\u0435\u0440 <code>UncompressedBGRA<\/code> \u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u00a0\u0447\u0438\u0441\u0442\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 BGRA, \u0433\u0434\u0435 BGRA \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b \u0441\u0438\u043d\u0438\u0439, \u0437\u0435\u043b\u0435\u043d\u044b\u0439, \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438 \u0430\u043b\u044c\u0444\u0430 (\u043a\u0430\u043d\u0430\u043b \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438).<\/p>\n<pre><code class=\"cpp\">TArray&lt;uint8&gt; UncompressedBGRA; if (!ImageWrapper.IsValid() || !ImageWrapper-&gt;SetCompressed(ImageData.GetData(), ImageData.Num()) || !ImageWrapper-&gt;GetRaw(ERGBFormat::BGRA, 8, UncompressedBGRA)) {              UE_LOG(LogTemp, Error, TEXT(\"[ARemoteImagePlane] Failed to wrap image data\"));             return; }<\/code><\/pre>\n<p>\u041a\u0430\u043a\u00a0\u0438 \u043f\u0440\u0435\u0436\u0434\u0435, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0432\u044b\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u0430\u044f\u2011\u043b\u0438\u0431\u043e \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u0430\u0441\u0442 \u0441\u0431\u043e\u0439.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u044b \u043f\u043e\u0447\u0442\u0438 \u0433\u043e\u0442\u043e\u0432\u044b. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0441\u00a0\u0448\u0438\u0440\u0438\u043d\u043e\u0439 \u0438 \u0432\u044b\u0441\u043e\u0442\u043e\u0439, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0438\u0437\u00a0<code>ImageWrapper<\/code>, \u0438 \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c PF_B8G8R8A8. \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438, \u0431\u0435\u0437\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u0434\u0438\u0441\u043a\u0435 \u0432\u00a0\u0432\u0438\u0434\u0435 \u0444\u0430\u0439\u043b\u0430, \u0430\u00a0\u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 32-\u0431\u0438\u0442\u043d\u044b\u043c, \u0441 8\u00a0\u0431\u0438\u0442\u0430\u043c\u0438 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 (\u0441\u0438\u043d\u0438\u0439, \u0437\u0435\u043b\u0435\u043d\u044b\u0439, \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438 \u0430\u043b\u044c\u0444\u0430).<\/p>\n<pre><code class=\"cpp\">UTexture2D* Texture = UTexture2D::CreateTransient(ImageWrapper-&gt;GetWidth(), ImageWrapper-&gt;GetHeight(), PF_B8G8R8A8);<\/code><\/pre>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0434\u043b\u044f\u00a0\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0444\u043b\u0430\u0433 \u0441\u0436\u0430\u0442\u0438\u044f TC_Default \u0438 SRGB \u0432\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true. \u042d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u0433\u0430\u043c\u043c\u0430\u2011\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043f\u0440\u0438\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d\u0435. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0438\u0442\u0435 \u043c\u0435\u0442\u043e\u0434 <code>AddToRoot<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/unreal-object-handling-in-unreal-engine\">\u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u0443\u0441\u043e\u0440\u0430<\/a>.<\/p>\n<pre><code class=\"cpp\">Texture-&gt;CompressionSettings = TC_Default; Texture-&gt;SRGB = true; Texture-&gt;AddToRoot();<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u00a0\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0445 \u0438\u0437\u00a0\u0431\u0443\u0444\u0435\u0440\u0430 <code>UncompressedBGRA<\/code> \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0440\u0435\u0441\u0443\u0440\u0441, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u00a0\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 (GPU), \u0433\u0434\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u00a0\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435.<\/p>\n<pre><code class=\"cpp\">void* TextureData = Texture-&gt;GetPlatformData()-&gt;Mips[0].BulkData.Lock(LOCK_READ_WRITE); FMemory::Memcpy(TextureData, UncompressedBGRA.GetData(), UncompressedBGRA.Num()); Texture-&gt;GetPlatformData()-&gt;Mips[0].BulkData.Unlock(); Texture-&gt;UpdateResource();<\/code><\/pre>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <em>Mips <\/em>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u044b <code>Lock<\/code> \u0438 <code>Unlock<\/code>, \u0447\u0442\u043e\u0431\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u00a0\u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u043f\u043e\u043a\u0430 \u043c\u044b \u0435\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c <code>TextureParameter<\/code> \u043d\u0430\u0448\u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u041a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430, \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0434\u043b\u044f\u00a0\u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <code>PlaneComponent<\/code>.<\/p>\n<pre><code class=\"cpp\">MaterialInstance-&gt;SetTextureParameterValue(\"TextureParameter\", Texture); PlaneComponent-&gt;SetMaterial(0, MaterialInstance);<\/code><\/pre>\n<p>\u041c\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0432\u00a0\u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u043e\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0430\u0448\u0435\u0433\u043e PlaneComponent, \u0441\u043b\u043e\u0442 \u0441\u00a0\u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c 0.<\/p>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435: \u043d\u0435\u00a0\u043a\u0430\u0436\u0434\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443. \u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435,\u00a0\u043b\u0438\u0448\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u0438\u0435 \u0438\u0437\u00a0\u043d\u0438\u0445 \u043e\u0431\u043b\u0430\u0434\u0430\u044e\u0442 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d 1:1. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e\u00a0\u0436\u0435 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u0432\u044b\u0441\u043e\u0442\u0443, \u0430\u00a0\u0437\u043d\u0430\u0447\u0438\u0442, \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u043e\u043d.<\/p>\n<p>\u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0\u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438.<\/p>\n<p>\u041a\u00a0\u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0438\u043c \u0432\u044b\u0441\u043e\u0442\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u0435\u0433\u043e \u0448\u0438\u0440\u0438\u043d\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 Y \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u043d\u0430\u00a0\u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cpp\">float AspectRatio = (float)ImageWrapper-&gt;GetHeight() \/ (float)ImageWrapper-&gt;GetWidth(); PlaneComponent-&gt;SetWorldScale3D(FVector(1.f, AspectRatio, 1.f));<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u0435\u0442\u043e\u0434\u044b <code>GetHeight<\/code> \u0438 <code>GetWidth<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0446\u0435\u043b\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u043a <em>\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c<\/em>, \u0438\u043d\u0430\u0447\u0435 \u043d\u0430\u0448\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0440\u0430\u0432\u043d\u044b 0.<\/p>\n<p>\u042d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437\u00a0\u0440\u0430\u0441\u0442\u044f\u0436\u0435\u043d\u0438\u044f. \u0428\u0438\u0440\u0438\u043d\u0430 \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439, \u0430\u00a0\u0432\u044b\u0441\u043e\u0442\u0430 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h3>Blueprint \u043a\u043b\u0430\u0441\u0441\u00a0<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0448 \u043a\u043e\u0434 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u043d, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e Blueprint \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043e\u0439 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 C++ \u0432\u00a0Unreal Editor.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e, \u0432 <em>Content Browser,<\/em> \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043d\u0430\u00a0\u043d\u0430\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0438 \u0432\u00a0\u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0443\u043d\u043a\u0442 \u00abCreate Blueprint Class Based on RemoteImagePlane\u00bb. \u041d\u0430\u0437\u043e\u0432\u0438\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0447\u0435\u0440\u0442\u0435\u0436\u0435\u0439 <code>BP_RemoteImagePlane<\/code>.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b96\/82d\/e94\/b9682de94e7fd170059477da1ef69868.png\" alt=\"It's a common practice to prefix a name of a Blueprint class with &quot;BP_&quot;\" title=\"\u041e\u0431\u044b\u0447\u043d\u043e \u0432\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 Blueprint \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abBP_\u00bb.\" width=\"736\" height=\"315\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/b96\/82d\/e94\/b9682de94e7fd170059477da1ef69868.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b96\/82d\/e94\/b9682de94e7fd170059477da1ef69868.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0431\u044b\u0447\u043d\u043e \u0432\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 Blueprint \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u00abBP_\u00bb.<\/figcaption><\/div>\n<\/figure>\n<p>\u041c\u044b \u043c\u043e\u0433\u043b\u0438\u00a0\u0431\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 \u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u00a0\u043a\u043e\u0434\u0435 C++ \u0438\u043b\u0438\u00a0\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440, \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0432 \u043a\u043b\u0430\u0441\u0441 \u0438\u0437\u00a0\u043e\u0431\u043e\u0437\u0440\u0435\u0432\u0430\u0442\u0435\u043b\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043d\u0430\u00a0\u0441\u0446\u0435\u043d\u0443, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 \u00ab<em>Details<\/em>\u00bb.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0435\u0433\u043e \u0430\u043a\u0442\u043e\u0440\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u0432\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Blueprint. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 BP_RemoteImagePlane \u0432 <em>\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Full Blueprint <\/em>\u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Plane <em>\u043d\u0430\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0435 Components<\/em>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/60d\/4eb\/d3e\/60d4ebd3e936d72616da50c7d3370152.png\" alt=\"We parented Plan Component and Text Component to Scene Component, which we've set as the Root Component in the constructor of our C++ class.\" title=\"\u041c\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043b\u0438 Plan Component \u0438 Text Component \u043a\u00a0Scene Component, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 C++.\" width=\"397\" height=\"268\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/60d\/4eb\/d3e\/60d4ebd3e936d72616da50c7d3370152.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/60d\/4eb\/d3e\/60d4ebd3e936d72616da50c7d3370152.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041c\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043b\u0438 Plan Component \u0438 Text Component \u043a\u00a0Scene Component, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0432\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 C++.<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u0431\u0440\u0430\u043d Plane Component, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0433\u0438\u0437\u043c\u043e (gizmos). \u0414\u043b\u044f\u00a0\u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0433\u0438\u0437\u043c\u043e \u0434\u043b\u044f\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432\u00a0\u043f\u0440\u0430\u0432\u043e\u043c \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u0443\u0433\u043b\u0443 \u0432\u043a\u043b\u0430\u0434\u043a\u0438 <em>Viewport<\/em>, \u0438\u043b\u0438\u00a0\u043a\u043b\u0430\u0432\u0438\u0448\u0438 <strong>W <\/strong>\u0438 <strong>E <\/strong>\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eef\/f78\/d57\/eeff78d576f949fe735f9a009ae007b6.png\" alt=\"Alternatively, you can set the Transform values in the Details panel, which is located by default on the right side.\" title=\"\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 \u00abDetails\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0441\u043f\u0440\u0430\u0432\u0430.\" width=\"821\" height=\"904\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/eef\/f78\/d57\/eeff78d576f949fe735f9a009ae007b6.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/eef\/f78\/d57\/eeff78d576f949fe735f9a009ae007b6.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 \u00abDetails\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0441\u043f\u0440\u0430\u0432\u0430.<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 Text Component. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0435 <em>\u00abComponents<\/em> \u00bb \u0438\u043b\u0438\u00a0\u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 <em>\u00abSelect object\u00bb (O)<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0432\u0430 \u043e\u0442\u00a0\u0440\u0430\u043d\u0435\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0445 \u043a\u043d\u043e\u043f\u043e\u043a.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a\u00a0\u0432\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c \u0438 \u0442\u0435\u043a\u0441\u0442 \u043a\u0430\u043a\u00a0\u043d\u0443\u0436\u043d\u043e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 <em>Compile<\/em>, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0431\u043b\u044e\u043f\u0440\u0438\u043d\u0442 \u0438 \u0432\u044b\u0439\u0434\u0438\u0442\u0435 \u0438\u0437\u00a0\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0431\u043b\u044e\u043f\u0440\u0438\u043d\u0442\u043e\u0432.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 <code>BP_RemoteImagePlane<\/code> \u043d\u0430\u00a0\u0441\u0446\u0435\u043d\u0443 \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 <em>Play <\/em>(\u0438\u043b\u0438 <strong>Alt+P<\/strong>). \u0412\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430\u00a0\u044d\u0442\u043e:<\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/25f\/d67\/2c5\/25fd672c58a8b7355a4162bd19010dcd.png\" alt=\"Et voil\u00e0! Simply add a VR controller to the project, and you can create an immersive VR gallery experience!\" title=\"\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451! \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043a\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0443 VR\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0443\u00a0\u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0439 VR\u2011\u0433\u0430\u043b\u0435\u0440\u0435\u0438!\" width=\"862\" height=\"874\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/25f\/d67\/2c5\/25fd672c58a8b7355a4162bd19010dcd.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/25f\/d67\/2c5\/25fd672c58a8b7355a4162bd19010dcd.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451! \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0435 \u043a\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0443 VR\u2011\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u0443\u00a0\u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0437\u0430\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0439 VR\u2011\u0433\u0430\u043b\u0435\u0440\u0435\u0438!<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u043d\u0430\u00a0\u0441\u0446\u0435\u043d\u0435 \u0435\u0449\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 BP_RemotePlaneImage \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u00a0\u043d\u0438\u0445 \u0441\u0432\u043e\u0439 CatalogId \u043d\u0430\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0435 <em>Details<\/em> \u043f\u0440\u0438\u00a0\u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0436\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"https:\/\/www.artic.edu\/collection\">\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e ARTIC<\/a>. \u042d\u0442\u043e\u0442 \u043d\u043e\u043c\u0435\u0440 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u00a0\u0441\u0441\u044b\u043b\u043a\u0435 \u043d\u0430\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u0443, \u043a\u0430\u043a, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435:<\/p>\n<p><a href=\"https:\/\/www.artic.edu\/artworks\/28560\/the-bedroom\">https:\/\/www.artic.edu\/artworks\/<strong>28\u00a0560<\/strong>\/the\u2011bedroom<\/a><\/p>\n<figure class=\"full-width\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/638\/5b3\/dac\/6385b3dac790d3cbc844d91bcba42580.png\" alt=\"By default, in Unreal Engine 5.1.1, the Details tab is located in the bottom right corner, just below the Outliner.\" title=\"\u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u00a0Unreal Engine 5.1.1\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0430 Details \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0432\u00a0\u043f\u0440\u0430\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u00a0Outliner.\" width=\"643\" height=\"586\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/638\/5b3\/dac\/6385b3dac790d3cbc844d91bcba42580.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/638\/5b3\/dac\/6385b3dac790d3cbc844d91bcba42580.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u00a0Unreal Engine 5.1.1\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0430 Details \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0432\u00a0\u043f\u0440\u0430\u0432\u043e\u043c \u043d\u0438\u0436\u043d\u0435\u043c \u0443\u0433\u043b\u0443, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0434\u00a0Outliner.<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0436\u043d\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0438 \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 API \u0438\u0437 <a href=\"https:\/\/github.com\/art-institute-of-chicago\/api-data\">Data Dump<\/a>.<\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u0437\u0430\u00a0\u043d\u0430\u043c\u0438 \u0438 \u0441\u043c\u043e\u0433\u043b\u0438 \u0434\u043e\u0439\u0442\u0438 \u0434\u043e\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0437\u0434\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u0435\u0431\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a. \u0412\u044b \u0443\u0437\u043d\u0430\u043b\u0438 \u043e\u0431\u00a0API, \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c HTTP\u2011\u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u0430\u043a\u00a0\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c JSON\u2011\u043e\u0442\u0432\u0435\u0442\u044b \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0\u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 JSON. \u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u0432\u043e\u0438\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b Unreal Engine, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u043c\u044f \u0442\u0438\u043f\u0430\u043c\u0438 \u0441\u0442\u0440\u043e\u043a.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u044b \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0412\u044b \u0442\u0430\u043a\u0436\u0435 \u043e\u0441\u0432\u043e\u0438\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a\u00a0JPEG, \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0435\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0435\u0435 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0430\u00a0C++, \u0447\u0442\u043e\u00a0\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0442\u0435\u043c\u043e\u0439.<\/p>\n<p>\u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u00a0\u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437\u00a0\u043d\u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u0430\u0434\u0430\u0447, \u0447\u0435\u043c \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0434\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f.<\/p>\n<p>\u0411\u044b\u043b\u043e\u00a0\u0431\u044b \u0440\u0430\u0437\u0443\u043c\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043d\u0430\u00a0\u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u043b\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0434\u0430\u0432\u0430\u044f \u0438\u043c \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u0435\u0433\u043a\u043e \u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0431\u0435\u0437\u00a0\u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432.<\/p>\n<p>\u042f \u0440\u0435\u0448\u0438\u043b\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u0432\u00a0\u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0435\u0441\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u0432\u0441\u0435\u00a0\u043b\u0438\u043d\u0435\u0439\u043d\u043e. \u0422\u0435\u043c \u043d\u0435\u00a0\u043c\u0435\u043d\u0435\u0435, <a href=\"https:\/\/github.com\/marianpekar\/ue5-fetch-art\">\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <\/a>\u0431\u044b\u043b \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442\u044c \u043a\u043e\u0434, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u043c \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435\u043c \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0437\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0437\u043d\u0430\u043d\u0438\u044f.<\/p>\n<hr\/>\n<p>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u043d\u043b\u0430\u0439\u043d-\u043a\u0443\u0440\u0441\u0430 &#171;Unreal Engine Game Developer. Basic&#187; (\u043a \u0430\u043f\u0440\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443 \u043f\u043e\u043a\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043f\u0435\u0442\u044c \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c\u0441\u044f).<\/p>\n<p><a href=\"https:\/\/otus.pw\/Cgnx\/\">\u041d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043a\u0443\u0440\u0441\u0430<\/a> \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u043a\u0443\u0440\u0441\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0443\u0440\u043e\u043a\u043e\u0432. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0443\u0440\u043e\u043a\u0438 \u043f\u0440\u043e\u0448\u043b\u0438 \u043f\u043e \u0442\u0430\u043a\u0438\u043c \u0442\u0435\u043c\u0430\u043c:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/otus.pw\/vRn0\/\">\u00ab\u0417\u043e\u043c\u0431\u0438-\u0430\u043f\u043e\u043a\u0430\u043b\u0438\u043f\u0441\u0438\u0441: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u0438\u043a\u043e\u0432 \u0432 \u0441\u0442\u0438\u043b\u0435 Days Gone\u00bb<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/otus.pw\/ggpd\/\">\u00ab\u0412\u044b\u0436\u0438\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u0446\u0435\u043d\u043e\u0439: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0430\u0440\u0441\u0435\u043d\u0430\u043b \u0432 \u0441\u0442\u0438\u043b\u0435 Days Gone\u00bb<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/905044\/\"> https:\/\/habr.com\/ru\/articles\/905044\/<\/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<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c API \u0432\u00a0Unreal Engine. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0430\u043b\u0435\u0440\u0435\u044e, \u0432\u00a0\u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u044b \u0438\u0437 <a href=\"https:\/\/www.artic.edu\/collection\">The Art Institute of Chicago <\/a>\u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043e <a href=\"https:\/\/www.artic.edu\/open-access\/public-api\">\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 API<\/a>, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432\u00a0\u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043d\u0430\u00a0\u043f\u043b\u043e\u0441\u043a\u043e\u043c \u043c\u0435\u0448\u0435, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0432 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0441\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0438\u043c\u0435\u043d\u0435\u043c \u0445\u0443\u0434\u043e\u0436\u043d\u0438\u043a\u0430 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438.<\/p>\n<p>\u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 C++, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Engine\/GameFramework\/AActor\">Actor<\/a>, \u0441 <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Engine\/Components\/UStaticMeshComponent\">UStaticMeshComponent <\/a>\u0438 <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Engine\/Components\/UTextRenderComponent\">UTextRenderComponent<\/a>, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043a <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Engine\/Components\/USceneComponent\">USceneComponent<\/a>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.<\/p>\n<p>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 CatalogId\u00a0\u2014 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0435, \u043a\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437\u00a0\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0432\u044b\u0448\u0435\u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u043e\u0433\u043e \u0445\u0443\u0434\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u0430 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/en.wikipedia.org\/wiki\/HTTP\">HTTP<\/a>\u2011\u0437\u0430\u043f\u0440\u043e\u0441\u0430.<\/p>\n<p>\u041d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0430\u043a\u0442\u043e\u0440\u0430 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u0430\u043b\u0435\u0440\u0435\u044e. \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0430\u043a\u0442\u043e\u0440\u0430 \u043d\u0430\u00a0\u0441\u0446\u0435\u043d\u0443 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0433\u043e CatalogId.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u044f \u0441\u0442\u0430\u0440\u0430\u044e\u0441\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0434\u043b\u044f\u00a0\u043b\u044e\u0431\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u00a0\u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0443\u0436\u0435 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0435 \u0442\u0435\u043c\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0448\u0430\u0433 \u043d\u0430\u0437\u0430\u0434 \u0438 \u0441\u043a\u0430\u0436\u0435\u043c \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 API.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u0434\u0430\u0435\u0442\u0435\u0441\u044c \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0435, \u0441\u043c\u0435\u043b\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0431\u0437\u0430\u0446\u0435\u0432 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u00a0\u0440\u0430\u0437\u0434\u0435\u043b\u0443 <a href=\"#1\"><strong>\u00ab\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Unreal Engine\u00bb<\/strong>.<\/a><\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 API?<\/h3>\n<p>\u0414\u043b\u044f\u00a0\u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0435\u00a0\u0437\u043d\u0430\u043a\u043e\u043c \u0441\u00a0\u044d\u0442\u0438\u043c \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043c, API \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u00a0Application Programming Interface\u00a0\u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0441\u00a0\u0434\u0440\u0443\u0433\u043e\u043c. API \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u043a\u0430\u043a\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u0430\u00a0\u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b.<\/p>\n<p>\u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0431\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b: \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f Unreal Engine, \u0438 \u0432\u0435\u0431\u2011\u0441\u0435\u0440\u0432\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 API \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u00a0\u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 <em>The Art Institute of Chicago (ARTIC).<\/em><\/p>\n<p>\u041d\u0430\u0448\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0432\u00a0\u0440\u043e\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f API, \u0430\u00a0\u0432\u0435\u0431\u2011\u0441\u0435\u0440\u0432\u0435\u0440\u00a0\u2014 \u0435\u0433\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0449\u0438\u043a\u0430 (\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430). \u041f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 API \u043d\u0435\u00a0\u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u0441\u044f \u043e\u00a0\u0442\u043e\u043c, \u043a\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u043c \u0438 \u043a\u0430\u043a\u00a0\u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0445, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<p>\u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432\u00a0Unreal Engine, \u043d\u043e\u00a0\u0438 \u0432\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a\u00a0Unity \u0438\u043b\u0438\u00a0\u0434\u0430\u0436\u0435 \u0432\u00a0\u0432\u0435\u0431\u2011\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u044d\u0442\u043e\u043c, \u043f\u0435\u0440\u0435\u0439\u0434\u044f \u043f\u043e\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0435: <a href=\"https:\/\/api.artic.edu\/api\/v1\/artworks\/129884\">https:\/\/api.artic.edu\/api\/v1\/artworks\/<strong>129\u00a0884<\/strong><\/a><\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u043d\u0430\u0436\u043c\u0435\u0442\u0435 \u043d\u0430\u00a0\u044d\u0442\u0443 \u0441\u0441\u044b\u043b\u043a\u0443, \u0432\u0430\u0448 \u0432\u0435\u0431\u2011\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442 GET\u2011\u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u00a0\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043e\u0442\u0432\u0435\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 <a href=\"https:\/\/www.json.org\/json-en.html\">JSON (JavaScript Object Notation)<\/a>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 JSON\u2011\u0434\u0430\u043d\u043d\u044b\u0435\u00b9, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e\u00a0\u043e\u043d\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u043a\u0430\u0440\u0442\u0438\u043d\u0435 \u0410\u043b\u044c\u043c\u044b \u0422\u043e\u043c\u0430\u0441 <a href=\"https:\/\/www.artic.edu\/artworks\/129884\/starry-night-and-the-astronauts\">\u00ab\u0417\u0432\u0435\u0437\u0434\u043d\u0430\u044f \u043d\u043e\u0447\u044c \u0438 \u0430\u0441\u0442\u0440\u043e\u043d\u0430\u0432\u0442\u044b<\/a>\u00bb, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u00a0\u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 ARTIC \u0441\u00a0ID <strong>129\u00a0884.<\/strong><\/p>\n<p><sub>(1) \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 JSON \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u00abJSON Prettifier\u00bb \u0438\u043b\u0438 \u00abJSON Formatter\u00bb. \u042d\u0442\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u0431\u043e\u043b\u0435\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f\u00a0\u0432\u043e\u0441\u043f\u0440\u0438\u044f\u0442\u0438\u044f \u0432\u0438\u0434 (\u00abpretty print\u00bb).<\/sub><\/p>\n<p>\u041a\u0430\u043a\u00a0\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? \u041a\u0430\u043a\u00a0\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437\u00a0API, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435\u00a0\u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442, \u043a\u0442\u043e \u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442: \u0432\u0435\u0431\u2011\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438\u043b\u0438\u00a0Unreal Engine \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435? \u041e\u0442\u0432\u0435\u0442 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u0430\u0445.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0API \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 \u0438 \u0432\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0412\u0430\u0448 \u0432\u0435\u0431\u2011\u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0443\u0436\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u00a0\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043f\u043e\u00a0\u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 HTTP \u0438 \u043a\u0430\u043a\u00a0\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442.<\/p>\n<p>\u041a\u00a0\u0441\u0447\u0430\u0441\u0442\u044c\u044e, Unreal Engine \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0432\u0441\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e. \u0412\u00a0\u0435\u0433\u043e \u0430\u0440\u0441\u0435\u043d\u0430\u043b\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/HTTP\/FHttpModule\">HttpModule <\/a>\u0438 <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/API\/Runtime\/Json\/Serialization\/FJsonSerializer\">JSON Serializer<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431\u00a0API \u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u0445, \u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0432\u00a0\u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u044b \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a\u00a0XML \u0438 JSON. \u041d\u043e\u00a0\u0432\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0434\u043b\u044f\u00a0\u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0430\u0436\u0435\u043d \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e\u00a0\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438 \u043e\u0442\u0432\u0435\u0442\u044b \u0438\u043c\u0435\u044e\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/List_of_HTTP_header_fields\">\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438<\/a>, \u0445\u043e\u0442\u044f \u044f \u0438 \u043d\u0435\u00a0\u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0430 \u0438\u0445 \u0432\u00a0\u044d\u0442\u043e\u043c \u043a\u0440\u0430\u0442\u043a\u043e\u043c \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0438.<\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 API \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u043a\u0440\u043e\u043b\u0438\u0447\u044c\u044e \u043d\u043e\u0440\u0443. \u0421\u0442\u043e\u0438\u0442 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u043d\u0435\u00a0\u0432\u0441\u0435 API \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0435\u0431\u2011API, \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 <a href=\"https:\/\/en.wikipedia.org\/wiki\/REST\">REST (Representational State Transfer)<\/a>\u00a0\u2014 \u043e\u0441\u043e\u0431\u044b\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0439 \u0441\u0442\u0438\u043b\u044c \u0438 \u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e API.<\/p>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h3>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 Unreal Engine<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u0448\u0430\u0433\u0438 \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 (\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0430\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c), \u043d\u0430\u0447\u043d\u0438\u0442\u0435 \u0441<em> \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u00a0C++ <\/em>\u0432 <em>Unreal Engine 5.1.1<\/em>.<\/p>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445, \u043d\u043e\u00a0\u044d\u0442\u043e\u0442 <a href=\"https:\/\/github.com\/marianpekar\/ue5-fetch-art\">\u043f\u0440\u0438\u043c\u0435\u0440 <\/a>\u044f \u043f\u0438\u0441\u0430\u043b\u0430 \u043d\u0430\u00a0\u0432\u0435\u0440\u0441\u0438\u0438 5.1.1, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0435\u00a0\u043c\u043e\u0433\u0443 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u00a0\u0432\u0435\u0440\u0441\u0438\u0438 4.27.<\/p>\n<p>\u042f \u043d\u0430\u0437\u0432\u0430\u043b\u0430 \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 FetchArt, \u043d\u043e\u00a0\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430<\/h3>\n<p>\u041d\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u0435\u043d \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u043d\u0442, \u043d\u043e\u00a0\u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0437\u0436\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f\u00a0\u043d\u0430\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043d\u0430\u00a0\u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u044c.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 <em>Content Browser <\/em>\u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043f\u043a\u0443, \u043a\u043b\u0438\u043a\u043d\u0443\u0432 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u0438 \u0432\u044b\u0431\u0440\u0430\u0432 \u043f\u0443\u043d\u043a\u0442 <em>New Folder<\/em>. \u041d\u0430\u0437\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u043f\u043a\u0443 <em>Materials<\/em>. \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b, \u0432\u044b\u0431\u0440\u0430\u0432 \u0432\u00a0\u0442\u043e\u043c\u00a0\u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043d\u043e\u043c \u043c\u0435\u043d\u044e \u043f\u0443\u043d\u043a\u0442 <em>New Material<\/em>. \u041d\u0430\u0437\u043e\u0432\u0438\u0442\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b <em>ExampleMaterial<\/em>.<\/p>\n<p>\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 <em>Material Graph<\/em>. \u041d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0442\u0430\u043c \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0430\u0444\u0430 \u0438 \u043d\u0430\u0439\u0434\u0438\u0442\u0435 <em>Texture Sample<\/em>. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0443\u0437\u0435\u043b <em>Texture Sample<\/em>, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430\u00a0\u043d\u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <em>Material Graph<\/em>.<\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043d\u0430\u00a0\u0443\u0437\u043b\u0435 <em>Texture Sample <\/em>\u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <em>Convert to Parameter<\/em>. \u042d\u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0443\u0437\u0435\u043b <em>Texture Sample <\/em>\u0432\u00a0\u0443\u0437\u0435\u043b\u2011\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0447\u0442\u043e\u00a0\u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c.<\/p>\n<figure class=\"\">\n<div><figcaption>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 \u00abTexture Sample\u00bb \u0432 \u00abTexture Parameter\u00bb \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0443\u044e \u0438\u0437\u00a0\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 API.<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0437\u043b\u0430 <em>Texture Sample <\/em>\u0432\u00a0\u0443\u0437\u0435\u043b <em>Texture Parameter <\/em>\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0437\u043e\u0432\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>\u00abTextureParameter\u00bb <\/em>\u0438 \u0434\u0432\u0430\u0436\u0434\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u00a0\u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u0432\u00a0\u043d\u0430\u0448\u0435\u043c C++ \u043a\u043e\u0434\u0435 \u043d\u0430\u00a0\u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043f\u043e\u00a0\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u0438.<\/p>\n<p>\u0412\u044b\u0431\u0440\u0430\u0432 \u0443\u0437\u0435\u043b <em>Texture Parameter<\/em>, \u043d\u0430\u0439\u0434\u0438\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b <em>Material Expression Texture Base <\/em>\u043d\u0430\u00a0\u043f\u0430\u043d\u0435\u043b\u0438 <em>Details <\/em>\u0432\u00a0\u043b\u0435\u0432\u043e\u0439 \u043d\u0438\u0436\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430\u00a0\u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u0437\u043d\u0430\u0447\u043e\u043a \u0438\u0437\u043e\u0433\u043d\u0443\u0442\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0432\u00a0\u043f\u0440\u0430\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 <em>Param<\/em>.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043a\u0430\u043a\u0443\u044e\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 TextureParameter, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435\u00a0\u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u042d\u0442\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441\u00a0\u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u0431\u0435\u0437\u00a0\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u044b \u043d\u0435\u00a0\u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0430 RGB \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u00a0\u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043e\u043c Base Color \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u0437\u2011\u0437\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438.<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 <em>TextureParameter <\/em>\u043a\u00a0\u0432\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443 <em>Base Color <\/em>\u0432 <em>ExampleMaterial<\/em>. \u041d\u0435\u00a0\u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u043e\u043a\u043d\u0430 \u0438\u043b\u0438\u00a0\u0432\u043a\u043b\u0430\u0434\u043a\u0438.<\/p>\n<figure class=\"\">\n<div><figcaption>\u0417\u0430\u0431\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u043a\u0442: \u044d\u0442\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0Unreal \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 20\u00a0\u043b\u0435\u0442. \u042f \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043c\u043d\u044e \u0435\u0435 \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u043a\u0430\u0440\u0442 \u0432\u00a0UnrealEd 2.0\u00a0\u0434\u043b\u044f\u00a0LAN\u2011\u0432\u0435\u0447\u0435\u0440\u0438\u043d\u043e\u043a, \u043d\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0441\u00a0\u0434\u0440\u0443\u0437\u044c\u044f\u043c\u0438 \u0447\u0430\u0441\u0430\u043c\u0438 \u0438\u0433\u0440\u0430\u043b\u0438 \u0432\u00a0Unreal Tournament (GOTY 1999).<\/figcaption><\/div>\n<\/figure>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0430\u043a\u0442\u043e\u0440\u0430<\/h3>\n<p>\u0412 <em>Content Browser <\/em>\u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432\u00a0\u043f\u0430\u043f\u043a\u0443 <em>C++ Classes <\/em>\u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043f\u0440\u0430\u0432\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043c\u044b\u0448\u0438 \u043f\u043e\u00a0\u043f\u0430\u043f\u043a\u0435 \u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <em>Add New C++ Class<\/em>. \u0412\u043e\u00a0\u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u043c \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 <em>Actor <\/em>\u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Unreal Engine, \u00ab\u0410\u043a\u0442\u043e\u0440\u00a0\u2014 \u044d\u0442\u043e \u043b\u044e\u0431\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043d\u0430\u00a0\u0443\u0440\u043e\u0432\u0435\u043d\u044c&#8230; \u0410\u043a\u0442\u043e\u0440\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 3D\u2011\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a\u00a0\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u00bb, \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0445 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0434\u043b\u044f\u00a0\u043d\u0430\u0448\u0438\u0445 \u0446\u0435\u043b\u0435\u0439.<\/figcaption><\/div>\n<\/figure>\n<h3>\u0418\u043c\u043f\u043e\u0440\u0442 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434. \u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 {\u0418\u043c\u044f\u0412\u0430\u0448\u0435\u0433\u043e\u041f\u0440\u043e\u0435\u043a\u0442\u0430}.Build.cs \u043c\u043e\u0434\u0443\u043b\u0438, \u043e\u0442\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442.<\/p>\n<p>\u042d\u0442\u043e\u0442 C#\u2011\u0444\u0430\u0439\u043b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/unreal-build-tool-in-unreal-engine\">Unreal Build Tool<\/a>. \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, UBT \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0435\u0433\u043e \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>\u0412\u00a0Unreal Engine \u043c\u043e\u0434\u0443\u043b\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u00a0\u043c\u0435\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u043e\u00a0\u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044f \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0430 \u043a\u043e\u0434 \u0434\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430, \u044f \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u044e, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>HTTP<\/p>\n<\/li>\n<li>\n<p>Json<\/p>\n<\/li>\n<li>\n<p>JsonUtilities<\/p>\n<\/li>\n<li>\n<p>ImageWrapper<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u044d\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432\u00a0\u0441\u043f\u0438\u0441\u043e\u043a <code>PublicDependencyModuleNames<\/code>, \u043a\u0430\u043a\u00a0\u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0438\u0436\u0435:<\/p>\n<pre><code>PublicDependencyModuleNames.AddRange(new string[] { \"Core\", \"CoreUObject\", \"Engine\", \"InputCore\", \"HTTP\", \"Json\", \"JsonUtilities\", \"ImageWrapper\" });<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 Unreal Engine \u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u0441\u0431\u043e\u0440\u043a\u0443, \u0447\u0442\u043e, \u0432\u00a0\u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0441\u043f\u043e\u0441\u043e\u0431\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044e \u043e\u0431\u0449\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h3>\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u043e\u0434\u0443\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u00a0\u043d\u0430\u0448 \u043a\u043b\u0430\u0441\u0441 <code>RemoteImagePlane<\/code>. \u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u00a0\u2014 RemoteImagePlane.h.<\/p>\n<p>\u042d\u0442\u043e\u043c\u0443 \u0430\u043a\u0442\u043e\u0440\u0443 \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u00a0\u043a\u0430\u0436\u0434\u043e\u043c \u0442\u0438\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 Tick \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c. \u041d\u0435\u00a0\u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u0435\u0442\u043e\u0434\u0430 \u0432\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 RemoteImagePlane.cpp. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u00a0\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 <code>PrimaryActorTick.bCanEverTick<\/code> \u0441\u00a0<code>true<\/code> \u043d\u0430\u00a0<code>false<\/code>.<\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432\u00a0\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u043c\u0435\u0436\u0434\u0443 <code>#include RemoteImagePlane.generated.h<\/code> \u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u043e\u043c <code>UCLASS()<\/code>, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">class UStaticMeshComponent; class UTextRenderComponent; class USceneComponent;  class IHttpRequest; class IHttpResponse;  typedef TSharedPtr&lt;IHttpRequest, ESPMode::ThreadSafe&gt; FHttpRequestPtr; typedef TSharedPtr&lt;IHttpResponse, ESPMode::ThreadSafe&gt; FHttpResponsePtr;<\/code><\/pre>\n<p>\u042d\u0442\u0438 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u041f\u0441\u0435\u0432\u0434\u043e\u043d\u0438\u043c\u044b \u0442\u0438\u043f\u043e\u0432, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u00a0\u043a\u043e\u0434\u0435, \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0434\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f\u00a0\u0442\u0438\u043f\u0430, \u0447\u0442\u043e\u00a0\u0434\u0435\u043b\u0430\u0435\u0442 \u043a\u043e\u0434 \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u043b\u0435\u0433\u043a\u0438\u043c \u0432\u00a0\u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0435\u043d\u0438\u0438.<\/p>\n<p>\u041e\u0431\u044a\u044f\u0432\u0438\u0442\u0435 \u0434\u0432\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 \u043f\u043e\u0434\u00a0\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 <code>protected<\/code>:<\/p>\n<pre><code class=\"cpp\">void OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bWasSuccessful); void OnImageDownloaded(FHttpRequestPtr Request, FHttpResponsePtr<\/code><\/pre>\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-457916","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/457916","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=457916"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/457916\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=457916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=457916"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=457916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}