{"id":291410,"date":"2018-10-26T13:55:03","date_gmt":"2018-10-26T09:55:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=291410"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=291410","title":{"rendered":"\u041a\u0430\u0440\u0442\u044b \u0438\u0437 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0432 Unity: \u0442\u0443\u043c\u0430\u043d \u0432\u043e\u0439\u043d\u044b, \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b, \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\"><a href=\"https:\/\/habr.com\/post\/424257\/\">\u0427\u0430\u0441\u0442\u0438 1-3: \u0441\u0435\u0442\u043a\u0430, \u0446\u0432\u0435\u0442\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0435\u043a<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/424491\/\">\u0427\u0430\u0441\u0442\u0438 4-7: \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/425463\/\">\u0427\u0430\u0441\u0442\u0438 8-11: \u0432\u043e\u0434\u0430, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0438 \u043a\u0440\u0435\u043f\u043e\u0441\u0442\u043d\u044b\u0435 \u0441\u0442\u0435\u043d\u044b<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/425919\/\">\u0427\u0430\u0441\u0442\u0438 12-15: \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/426481\/\">\u0427\u0430\u0441\u0442\u0438 16-19: \u043f\u043e\u0438\u0441\u043a \u043f\u0443\u0442\u0438, \u043e\u0442\u0440\u044f\u0434\u044b \u0438\u0433\u0440\u043e\u043a\u0430, \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 20: \u0442\u0443\u043c\u0430\u043d \u0432\u043e\u0439\u043d\u044b<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435.<\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0431\u0435\u0437 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438.<\/li>\n<li>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c.<\/li>\n<li>\u0417\u0430\u0442\u0435\u043c\u043d\u044f\u0435\u043c \u0432\u0441\u0451 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0435.<\/li>\n<\/ul>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u044d\u0444\u0444\u0435\u043a\u0442 \u0442\u0443\u043c\u0430\u043d\u0430 \u0432\u043e\u0439\u043d\u044b.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0435\u0440\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 Unity 2017.1.0.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/716\/b6b\/8a9\/716b6b8a9d024dc87b2d645b5d4bdbb6.jpg\"><\/div>\n<p>  <i>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c.<\/i><br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0414\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435<\/h2>\n<p>  \u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0433\u0440\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0442\u0443\u043c\u0430\u043d\u0430 \u0432\u043e\u0439\u043d\u044b. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0437\u0440\u0435\u043d\u0438\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043e. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u0435\u0433\u043e \u043e\u0442\u0440\u044f\u0434\u0430\u043c \u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0437\u043e\u043d\u0435. \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u043b\u044c\u0435\u0444, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0442\u0451\u043c\u043d\u044b\u043c. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0435\u0451 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433.<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430 \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043c\u0435\u0448\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044e \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043f\u043b\u043e\u0445\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0433\u0440\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e.<\/p>\n<p>  \u0427\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u043f\u043e\u0432\u0435\u0440\u0445 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u0442 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0438\u0433\u0440\u043e\u043a\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438. \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043b\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043b\u043e\u0441\u043a\u043e\u0433\u043e \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c \u043e\u0431\u0437\u043e\u0440\u0430. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u0440\u0435\u043b\u044c\u0435\u0444 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0432\u044b\u0441\u043e\u0442\u044b \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0448, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0444\u043e\u0440\u043c\u0435 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u043c, \u0447\u0435\u043c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0439 \u0432\u044b\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u0440\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u0448\u0435\u0439\u0434\u0435\u0440 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u0435\u0448\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0414\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u2014 \u044d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0447\u0435\u043c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u044f.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0430?<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0448\u0435\u0439\u0434\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u043e\u0435 \u0432 \u0442\u044b\u0441\u044f\u0447\u0430\u0445 \u0431\u0430\u0439\u0442, \u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u044b \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u0430\u0440\u0442 \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>HexCellShaderData<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u0438\u043c \u0437\u0430\u0439\u043c\u0451\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">using UnityEngine;  public class HexCellShaderData : MonoBehaviour { \t \tTexture2D cellTexture; }<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u043c\u0435\u0442\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 RGBA \u0431\u0435\u0437 mip-\u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u0447\u0435\u0447\u043d\u0443\u044e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044e (point filtering). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u0438\u043a\u0441\u0435\u043b\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void Initialize (int x, int z) { \t\tcellTexture = new Texture2D( \t\t\tx, z, TextureFormat.RGBA32, false, true \t\t); \t\tcellTexture.filterMode = FilterMode.Point; \t\tcellTexture.wrapMode = TextureWrapMode.Clamp; \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u043e\u043b\u0436\u0435\u043d \u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u0430\u0440\u0442\u044b?<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0435\u0442, \u0432 \u043d\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a. \u041f\u0440\u0438 \u0442\u043e\u0447\u043d\u043e\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u0430\u0440\u0442\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438, \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044f\u043c\u0438 \u0434\u0432\u043e\u0439\u043a\u0438 (non-power-of-two, NPOT), \u0430 \u0442\u0430\u043a\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0441\u0430\u043c\u044b\u043c \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0434\u0432\u043e\u0439\u043a\u0438, \u044d\u0442\u043e \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u044f\u0447\u0435\u0435\u043a.<\/div>\n<\/div>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0430\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041d\u0430\u043c \u0434\u0430\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <code>Texture2D.Resize<\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u0451\u043d, \u0447\u0442\u043e\u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0437\u0430 \u043d\u0430\u0441.<\/p>\n<pre><code class=\"cs\">\tpublic void Initialize (int x, int z) { \t\tif (cellTexture) { \t\t\tcellTexture.Resize(x, z); \t\t} \t\telse { \t\t\tcellTexture = new Texture2D( \t\t\t\tcellCountX, cellCountZ, TextureFormat.RGBA32, false, true \t\t\t); \t\t\tcellTexture.filterMode = FilterMode.Point; \t\t\tcellTexture.wrapMode = TextureWrapMode.Clamp; \t\t} \t}<\/code><\/pre>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043f\u0438\u043a\u0441\u0435\u043b\u044e \u0437\u0430 \u0440\u0430\u0437, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0443\u0444\u0435\u0440 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u0437\u0430 \u0440\u0430\u0437. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <code>Color32<\/code>. \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 \u043a\u043e\u043d\u0446\u0435 <code>Initialize<\/code>. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0442\u043e \u043c\u044b \u043e\u0447\u0438\u0449\u0430\u0435\u043c \u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435.<\/p>\n<pre><code class=\"cs\">\tTexture2D cellTexture; \tColor32[] cellTextureData; \t \tpublic void Initialize () { \t\t\u2026 \t\t \t\tif (cellTextureData == null || cellTextureData.Length != x * z) { \t\t\tcellTextureData = new Color32[x * z]; \t\t} \t\telse { \t\t\tfor (int i = 0; i &lt; cellTextureData.Length; i++) { \t\t\t\tcellTextureData[i] = new Color32(0, 0, 0, 0); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 Color32?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043d\u0435\u0441\u0436\u0430\u0442\u044b\u0435 RGBA-\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u0438\u043a\u0441\u0435\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e \u0431\u0430\u0439\u0442\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 256 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b Unity <code>Color<\/code> \u0435\u0451 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 0\u20131 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0431\u0430\u0439\u0442\u044b \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 0\u2013255. \u041f\u0440\u0438 \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 GPU \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435.<\/p>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 <code>Color32<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a, \u0431\u0443\u0434\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0441\u044b\u0440\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u0430 \u043d\u0435 \u0441 <code>Color<\/code>.<\/div>\n<\/div>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f <code>HexGrid<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u043f\u043e\u043b\u0435 <code>cellShaderData<\/code> \u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432\u043d\u0443\u0442\u0440\u0438 <code>Awake<\/code>.<\/p>\n<pre><code class=\"cs\">\tHexCellShaderData cellShaderData;  \tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource; \t\tHexMetrics.InitializeHashGrid(seed); \t\tHexUnit.unitPrefab = unitPrefab; \t\tcellShaderData = gameObject.AddComponent&lt;HexCellShaderData&gt;(); \t\tCreateMap(cellCountX, cellCountZ); \t}<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 <code>cellShaderData<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic bool CreateMap (int x, int z) { \t\t\u2026  \t\tcellCountX = x; \t\tcellCountZ = z; \t\tchunkCountX = cellCountX \/ HexMetrics.chunkSizeX; \t\tchunkCountZ = cellCountZ \/ HexMetrics.chunkSizeZ; \t\tcellShaderData.Initialize(cellCountX, cellCountZ); \t\tCreateChunks(); \t\tCreateCells(); \t\treturn true; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u0414\u043e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0431\u044b\u043b\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432 <code>HexCell<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic HexCellShaderData ShaderData { get; set; }<\/code><\/pre>\n<p>  \u0412 <code>HexGrid.CreateCell<\/code> \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid CreateCell (int x, int z, int i) { \t\t\u2026  \t\tHexCell cell = cells[i] = Instantiate&lt;HexCell&gt;(cellPrefab); \t\tcell.transform.localPosition = position; \t\tcell.coordinates = HexCoordinates.FromOffsetCoordinates(x, z); \t\tcell.ShaderData = cellShaderData; \t\t \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430. \u041f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c, \u043d\u043e \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0434\u043b\u044f \u0447\u0435\u0433\u043e-\u0442\u043e \u0435\u0449\u0451. \u0422\u0438\u043f \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u043f\u0440\u0438 \u0435\u0451 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435. \u041e\u043d \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u044f\u0447\u0435\u0439\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u043d\u0435 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0448\u0430. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCellShaderData<\/code> \u043c\u0435\u0442\u043e\u0434 <code>RefreshTerrain<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0443\u0441\u0442\u044b\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic void RefreshTerrain (HexCell cell) { \t}<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>HexCell.TerrainTypeIndex<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u0430 \u043d\u0435 \u043f\u0440\u0438\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic int TerrainTypeIndex { \t\tget { \t\t\treturn terrainTypeIndex; \t\t} \t\tset { \t\t\tif (terrainTypeIndex != value) { \t\t\t\tterrainTypeIndex = value; \/\/\t\t\t\tRefresh(); \t\t\t\tShaderData.RefreshTerrain(this); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0435\u0433\u043e \u0432 <code>HexCell.Load<\/code> \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader) { \t\tterrainTypeIndex = reader.ReadByte(); \t\tShaderData.RefreshTerrain(this); \t\televation = reader.ReadByte(); \t\tRefreshPosition(); \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0418\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438<\/h3>\n<p>  \u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 <code>HexCell<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Index<\/code>. \u041e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u044f\u0447\u0435\u0435\u043a \u043a\u0430\u0440\u0442\u044b, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0451 \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic int Index { get; set; }<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 <code>HexGrid.CreateCell<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid CreateCell (int x, int z, int i) { \t\t\u2026 \t\tcell.coordinates = HexCoordinates.FromOffsetCoordinates(x, z); \t\tcell.Index = i; \t\tcell.ShaderData = cellShaderData;  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>HexCellShaderData.RefreshTerrain<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0439\u043a\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432 \u0430\u043b\u044c\u0444\u0430-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 \u0435\u0451 \u043f\u0438\u043a\u0441\u0435\u043b\u044f, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u044f \u0442\u0438\u043f \u0432 byte. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043e 256 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u0447\u0435\u0433\u043e \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic void RefreshTerrain (HexCell cell) { \t\tcellTextureData[cell.Index].a = (byte)cell.TerrainTypeIndex; \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0435\u0451 \u0432 GPU, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>Texture2D.SetPixels32<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c <code>Texture2D.Apply<\/code>. \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438, \u043c\u044b \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 <code>LateUpdate<\/code>, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u0445 \u043d\u0435 \u0447\u0430\u0449\u0435 \u0440\u0430\u0437\u0430 \u0437\u0430 \u043a\u0430\u0434\u0440, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tpublic void RefreshTerrain (HexCell cell) { \t\tcellTextureData[cell.Index].a = (byte)cell.TerrainTypeIndex; \t\tenabled = true; \t} \t \tvoid LateUpdate () { \t\tcellTexture.SetPixels32(cellTextureData); \t\tcellTexture.Apply(); \t\tenabled = false; \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void Initialize (int x, int z) { \t\t\u2026 \t\tenabled = true; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0445 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a, \u0448\u0435\u0439\u0434\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0447\u0435\u0435\u043a \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0448\u0430, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u043c\u0435\u0448\u0430 \u0434\u043b\u044f \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<p>  \u0423\u0434\u0430\u043b\u0438\u043c \u0438\u0437 <code>HexMesh<\/code> \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u043e\u0431\u0449\u0438\u0435 \u043f\u043e\u043b\u044f <code>useColors<\/code> \u0438 <code>useTerrainTypes<\/code>. \u0417\u0430\u043c\u0435\u043d\u0438\u043c \u0438\u0445 \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u0435\u043c <code>useCellData<\/code>.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic bool useCollider, useColors, useUVCoordinates, useUV2Coordinates; \/\/\tpublic bool useTerrainTypes; \tpublic bool useCollider, useCellData, useUVCoordinates, useUV2Coordinates; <\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433-\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 <code>terrainTypes<\/code> \u0432 <code>cellIndices<\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043c-\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c <code>colors<\/code> \u0432 <code>cellWeights<\/code> \u2014 \u044d\u0442\u043e \u0438\u043c\u044f \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<pre><code class=\"cs\">\/\/\t[NonSerialized] List&lt;Vector3&gt; vertices, terrainTypes; \/\/\t[NonSerialized] List&lt;Color&gt; colors; \t[NonSerialized] List&lt;Vector3&gt; vertices, cellIndices; \t[NonSerialized] List&lt;Color&gt; cellWeights; \t[NonSerialized] List&lt;Vector2&gt; uvs, uv2s; \t[NonSerialized] List&lt;int&gt; triangles; <\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>Clear<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u0434\u0432\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0432\u043c\u0435\u0441\u0442\u0435, \u0430 \u043d\u0435 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void Clear () { \t\thexMesh.Clear(); \t\tvertices = ListPool&lt;Vector3&gt;.Get(); \t\tif (useCellData) { \t\t\tcellWeights = ListPool&lt;Color&gt;.Get(); \t\t\tcellIndices = ListPool&lt;Vector3&gt;.Get(); \t\t} \/\/\t\tif (useColors) { \/\/\t\t\tcolors = ListPool&lt;Color&gt;.Get(); \/\/\t\t} \t\tif (useUVCoordinates) { \t\t\tuvs = ListPool&lt;Vector2&gt;.Get(); \t\t} \t\tif (useUV2Coordinates) { \t\t\tuv2s = ListPool&lt;Vector2&gt;.Get(); \t\t} \/\/\t\tif (useTerrainTypes) { \/\/\t\t\tterrainTypes = ListPool&lt;Vector3&gt;.Get(); \/\/\t\t} \t\ttriangles = ListPool&lt;int&gt;.Get(); \t}<\/code><\/pre>\n<p>  \u0412\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 <code>Apply<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void Apply () { \t\thexMesh.SetVertices(vertices); \t\tListPool&lt;Vector3&gt;.Add(vertices); \t\tif (useCellData) { \t\t\thexMesh.SetColors(cellWeights); \t\t\tListPool&lt;Color&gt;.Add(cellWeights); \t\t\thexMesh.SetUVs(2, cellIndices); \t\t\tListPool&lt;Vector3&gt;.Add(cellIndices); \t\t} \/\/\t\tif (useColors) { \/\/\t\t\thexMesh.SetColors(colors); \/\/\t\t\tListPool&lt;Color&gt;.Add(colors); \/\/\t\t} \t\tif (useUVCoordinates) { \t\t\thexMesh.SetUVs(0, uvs); \t\t\tListPool&lt;Vector2&gt;.Add(uvs); \t\t} \t\tif (useUV2Coordinates) { \t\t\thexMesh.SetUVs(1, uv2s); \t\t\tListPool&lt;Vector2&gt;.Add(uv2s); \t\t} \/\/\t\tif (useTerrainTypes) { \/\/\t\t\thexMesh.SetUVs(2, terrainTypes); \/\/\t\t\tListPool&lt;Vector3&gt;.Add(terrainTypes); \/\/\t\t} \t\thexMesh.SetTriangles(triangles, 0); \t\tListPool&lt;int&gt;.Add(triangles); \t\thexMesh.RecalculateNormals(); \t\tif (useCollider) { \t\t\tmeshCollider.sharedMesh = hexMesh; \t\t} \t}<\/code><\/pre>\n<p>  \u0423\u0434\u0430\u043b\u0438\u043c \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>AddTriangleColor<\/code> \u0438 <code>AddTriangleTerrainTypes<\/code>. \u0417\u0430\u043c\u0435\u043d\u0438\u043c \u0438\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 <code>AddTriangleCellData<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0432\u0435\u0441\u0430 \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437.<\/p>\n<pre><code class=\"cs\">\tpublic void AddTriangleCellData ( \t\tVector3 indices, Color weights1, Color weights2, Color weights3 \t) { \t\tcellIndices.Add(indices); \t\tcellIndices.Add(indices); \t\tcellIndices.Add(indices); \t\tcellWeights.Add(weights1); \t\tcellWeights.Add(weights2); \t\tcellWeights.Add(weights3); \t} \t\t \tpublic void AddTriangleCellData (Vector3 indices, Color weights) { \t\tAddTriangleCellData(indices, weights, weights, weights); \t}<\/code><\/pre>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430 <code>AddQuad<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void AddQuadCellData ( \t\tVector3 indices, \t\tColor weights1, Color weights2, Color weights3, Color weights4 \t) { \t\tcellIndices.Add(indices); \t\tcellIndices.Add(indices); \t\tcellIndices.Add(indices); \t\tcellIndices.Add(indices); \t\tcellWeights.Add(weights1); \t\tcellWeights.Add(weights2); \t\tcellWeights.Add(weights3); \t\tcellWeights.Add(weights4); \t}  \tpublic void AddQuadCellData ( \t\tVector3 indices, Color weights1, Color weights2 \t) { \t\tAddQuadCellData(indices, weights1, weights1, weights2, weights2); \t}  \tpublic void AddQuadCellData (Vector3 indices, Color weights) { \t\tAddQuadCellData(indices, weights, weights, weights, weights); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 HexGridChunk<\/h3>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432 <code>HexGridChunk<\/code> \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c. \u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0434\u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043c-\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0432 \u0432\u0435\u0441\u0430.<\/p>\n<pre><code class=\"cs\">\tstatic Color weights1 = new Color(1f, 0f, 0f); \tstatic Color weights2 = new Color(0f, 1f, 0f); \tstatic Color weights3 = new Color(0f, 0f, 1f);<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>TriangulateEdgeFan<\/code>. \u0420\u0430\u043d\u044c\u0448\u0435 \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u0438\u043f, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438. \u0417\u0430\u043c\u0435\u043d\u0438\u043c \u043a\u043e\u0434 <code>AddTriangleColor<\/code> \u0438 <code>AddTriangleTerrainTypes<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c <code>AddTriangleCellData<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeFan (Vector3 center, EdgeVertices edge, float index) { \t\tterrain.AddTriangle(center, edge.v1, edge.v2); \t\tterrain.AddTriangle(center, edge.v2, edge.v3); \t\tterrain.AddTriangle(center, edge.v3, edge.v4); \t\tterrain.AddTriangle(center, edge.v4, edge.v5);  \t\tVector3 indices; \t\tindices.x = indices.y = indices.z = index; \t\tterrain.AddTriangleCellData(indices, weights1); \t\tterrain.AddTriangleCellData(indices, weights1); \t\tterrain.AddTriangleCellData(indices, weights1); \t\tterrain.AddTriangleCellData(indices, weights1);  \/\/\t\tterrain.AddTriangleColor(weights1); \/\/\t\tterrain.AddTriangleColor(weights1); \/\/\t\tterrain.AddTriangleColor(weights1); \/\/\t\tterrain.AddTriangleColor(weights1);  \/\/\t\tVector3 types; \/\/\t\ttypes.x = types.y = types.z = type; \/\/\t\tterrain.AddTriangleTerrainTypes(types); \/\/\t\tterrain.AddTriangleTerrainTypes(types); \/\/\t\tterrain.AddTriangleTerrainTypes(types); \/\/\t\tterrain.AddTriangleTerrainTypes(types); \t}<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u0445. \u041f\u0440\u043e\u0439\u0434\u0451\u043c\u0441\u044f \u043f\u043e \u043d\u0438\u043c \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0442\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u043d\u0435 \u0442\u0438\u043f \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<pre><code class=\"cs\">\t\tTriangulateEdgeFan(center, e, cell.Index);<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 <code>TriangulateEdgeStrip<\/code>. \u0417\u0434\u0435\u0441\u044c \u0432\u0441\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434. \u0422\u0430\u043a\u0436\u0435 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043c-\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0438\u043c\u0435\u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 <code>c1<\/code> \u0438 <code>c2<\/code> \u0432 <code>w1<\/code> \u0438 <code>w2<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeStrip ( \t\tEdgeVertices e1, Color w1, float index1, \t\tEdgeVertices e2, Color w2, float index2, \t\tbool hasRoad = false \t) { \t\tterrain.AddQuad(e1.v1, e1.v2, e2.v1, e2.v2); \t\tterrain.AddQuad(e1.v2, e1.v3, e2.v2, e2.v3); \t\tterrain.AddQuad(e1.v3, e1.v4, e2.v3, e2.v4); \t\tterrain.AddQuad(e1.v4, e1.v5, e2.v4, e2.v5);  \t\tVector3 indices; \t\tindices.x = indices.z = index1; \t\tindices.y = index2; \t\tterrain.AddQuadCellData(indices, w1, w2); \t\tterrain.AddQuadCellData(indices, w1, w2); \t\tterrain.AddQuadCellData(indices, w1, w2); \t\tterrain.AddQuadCellData(indices, w1, w2);  \/\/\t\tterrain.AddQuadColor(c1, c2); \/\/\t\tterrain.AddQuadColor(c1, c2); \/\/\t\tterrain.AddQuadColor(c1, c2); \/\/\t\tterrain.AddQuadColor(c1, c2);  \/\/\t\tVector3 types; \/\/\t\ttypes.x = types.z = type1; \/\/\t\ttypes.y = type2; \/\/\t\tterrain.AddQuadTerrainTypes(types); \/\/\t\tterrain.AddQuadTerrainTypes(types); \/\/\t\tterrain.AddQuadTerrainTypes(types); \/\/\t\tterrain.AddQuadTerrainTypes(types);  \t\tif (hasRoad) { \t\t\tTriangulateRoadSegment(e1.v2, e1.v3, e1.v4, e2.v2, e2.v3, e2.v4); \t\t} \t}<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u044b \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0451\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"cs\">\t\tTriangulateEdgeStrip( \t\t\tm, weights1, cell.Index, \t\t\te, weights1, cell.Index \t\t); \t\t \t\u2026 \t\t \t\t\tTriangulateEdgeStrip( \t\t\t\te1, weights1, cell.Index, \t\t\t\te2, weights2, neighbor.Index, hasRoad \t\t\t); \t \t\u2026 \t \tvoid TriangulateEdgeTerraces ( \t\tEdgeVertices begin, HexCell beginCell, \t\tEdgeVertices end, HexCell endCell, \t\tbool hasRoad \t) { \t\tEdgeVertices e2 = EdgeVertices.TerraceLerp(begin, end, 1); \t\tColor w2 = HexMetrics.TerraceLerp(weights1, weights2, 1); \t\tfloat i1 = beginCell.Index; \t\tfloat i2 = endCell.Index;  \t\tTriangulateEdgeStrip(begin, weights1, i1, e2, w2, i2, hasRoad);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tEdgeVertices e1 = e2; \t\t\tColor w1 = w2; \t\t\te2 = EdgeVertices.TerraceLerp(begin, end, i); \t\t\tw2 = HexMetrics.TerraceLerp(weights1, weights2, i); \t\t\tTriangulateEdgeStrip(e1, w1, i1, e2, w2, i2, hasRoad); \t\t}  \t\tTriangulateEdgeStrip(e2, w2, i1, end, weights2, i2, hasRoad); \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0443\u0433\u043b\u043e\u0432. \u042d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u044b, \u043d\u043e \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0451\u043c \u043a\u043e\u0434\u0430. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 <code>TriangulateCorner<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCorner ( \t\tVector3 bottom, HexCell bottomCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\t\u2026 \t\telse { \t\t\tterrain.AddTriangle(bottom, left, right); \t\t\tVector3 indices; \t\t\tindices.x = bottomCell.Index; \t\t\tindices.y = leftCell.Index; \t\t\tindices.z = rightCell.Index; \t\t\tterrain.AddTriangleCellData(indices, weights1, weights2, weights3); \/\/\t\t\tterrain.AddTriangleColor(weights1, weights2, weights3); \/\/\t\t\tVector3 types; \/\/\t\t\ttypes.x = bottomCell.TerrainTypeIndex; \/\/\t\t\ttypes.y = leftCell.TerrainTypeIndex; \/\/\t\t\ttypes.z = rightCell.TerrainTypeIndex; \/\/\t\t\tterrain.AddTriangleTerrainTypes(types); \t\t}  \t\tfeatures.AddWall(bottom, bottomCell, left, leftCell, right, rightCell); \t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432 <code>TriangulateCornerTerraces<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerTerraces ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\tVector3 v3 = HexMetrics.TerraceLerp(begin, left, 1); \t\tVector3 v4 = HexMetrics.TerraceLerp(begin, right, 1); \t\tColor w3 = HexMetrics.TerraceLerp(weights1, weights2, 1); \t\tColor w4 = HexMetrics.TerraceLerp(weights1, weights3, 1); \t\tVector3 indices; \t\tindices.x = beginCell.Index; \t\tindices.y = leftCell.Index; \t\tindices.z = rightCell.Index;  \t\tterrain.AddTriangle(begin, v3, v4); \t\tterrain.AddTriangleCellData(indices, weights1, w3, w4); \/\/\t\tterrain.AddTriangleColor(weights1, w3, w4); \/\/\t\tterrain.AddTriangleTerrainTypes(indices);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tVector3 v1 = v3; \t\t\tVector3 v2 = v4; \t\t\tColor w1 = w3; \t\t\tColor w2 = w4; \t\t\tv3 = HexMetrics.TerraceLerp(begin, left, i); \t\t\tv4 = HexMetrics.TerraceLerp(begin, right, i); \t\t\tw3 = HexMetrics.TerraceLerp(weights1, weights2, i); \t\t\tw4 = HexMetrics.TerraceLerp(weights1, weights3, i); \t\t\tterrain.AddQuad(v1, v2, v3, v4); \t\t\tterrain.AddQuadCellData(indices, w1, w2, w3, w4); \/\/\t\t\tterrain.AddQuadColor(w1, w2, w3, w4); \/\/\t\t\tterrain.AddQuadTerrainTypes(indices); \t\t}  \t\tterrain.AddQuad(v3, v4, left, right); \t\tterrain.AddQuadCellData(indices, w3, w4, weights2, weights3); \/\/\t\tterrain.AddQuadColor(w3, w4, weights2, weights3); \/\/\t\tterrain.AddQuadTerrainTypes(indices); \t}<\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u0432 <code>TriangulateCornerTerracesCliff<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerTerracesCliff ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\tfloat b = 1f \/ (rightCell.Elevation - beginCell.Elevation); \t\tif (b &lt; 0) { \t\t\tb = -b; \t\t} \t\tVector3 boundary = Vector3.Lerp( \t\t\tHexMetrics.Perturb(begin), HexMetrics.Perturb(right), b \t\t); \t\tColor boundaryWeights = Color.Lerp(weights1, weights3, b); \t\tVector3 indices; \t\tindices.x = beginCell.Index; \t\tindices.y = leftCell.Index; \t\tindices.z = rightCell.Index;  \t\tTriangulateBoundaryTriangle( \t\t\tbegin, weights1, left, weights2, boundary, boundaryWeights, indices \t\t);  \t\tif (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { \t\t\tTriangulateBoundaryTriangle( \t\t\t\tleft, weights2, right, weights3, \t\t\t\tboundary, boundaryWeights, indices \t\t\t); \t\t} \t\telse { \t\t\tterrain.AddTriangleUnperturbed( \t\t\t\tHexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary \t\t\t); \t\t\tterrain.AddTriangleCellData( \t\t\t\tindices, weights2, weights3, boundaryWeights \t\t\t); \/\/\t\t\tterrain.AddTriangleColor(weights2, weights3, boundaryColor); \/\/\t\t\tterrain.AddTriangleTerrainTypes(indices); \t\t} \t}<\/code><\/pre>\n<p>  \u0418 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435 \u0432 <code>TriangulateCornerCliffTerraces<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerCliffTerraces ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\tfloat b = 1f \/ (leftCell.Elevation - beginCell.Elevation); \t\tif (b &lt; 0) { \t\t\tb = -b; \t\t} \t\tVector3 boundary = Vector3.Lerp( \t\t\tHexMetrics.Perturb(begin), HexMetrics.Perturb(left), b \t\t); \t\tColor boundaryWeights = Color.Lerp(weights1, weights2, b); \t\tVector3 indices; \t\tindices.x = beginCell.Index; \t\tindices.y = leftCell.Index; \t\tindices.z = rightCell.Index;  \t\tTriangulateBoundaryTriangle( \t\t\tright, weights3, begin, weights1, boundary, boundaryWeights, indices \t\t);  \t\tif (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { \t\t\tTriangulateBoundaryTriangle( \t\t\t\tleft, weights2, right, weights3, \t\t\t\tboundary, boundaryWeights, indices \t\t\t); \t\t} \t\telse { \t\t\tterrain.AddTriangleUnperturbed( \t\t\t\tHexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary \t\t\t); \t\t\tterrain.AddTriangleCellData( \t\t\t\tindices, weights2, weights3, boundaryWeights \t\t\t); \/\/\t\t\tterrain.AddTriangleColor(weights2, weights3, boundaryWeights); \/\/\t\t\tterrain.AddTriangleTerrainTypes(indices); \t\t} \t}<\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0434\u0432\u0443\u0445 \u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <code>TriangulateBoundaryTriangle<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u043e\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateBoundaryTriangle ( \t\tVector3 begin, Color beginWeights, \t\tVector3 left, Color leftWeights, \t\tVector3 boundary, Color boundaryWeights, Vector3 indices \t) { \t\tVector3 v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, 1)); \t\tColor w2 = HexMetrics.TerraceLerp(beginWeights, leftWeights, 1);  \t\tterrain.AddTriangleUnperturbed(HexMetrics.Perturb(begin), v2, boundary); \t\tterrain.AddTriangleCellData(indices, beginWeights, w2, boundaryWeights); \/\/\t\tterrain.AddTriangleColor(beginColor, c2, boundaryColor); \/\/\t\tterrain.AddTriangleTerrainTypes(types);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tVector3 v1 = v2; \t\t\tColor w1 = w2; \t\t\tv2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, i)); \t\t\tw2 = HexMetrics.TerraceLerp(beginWeights, leftWeights, i); \t\t\tterrain.AddTriangleUnperturbed(v1, v2, boundary); \t\t\tterrain.AddTriangleCellData(indices, w1, w2, boundaryWeights); \/\/\t\t\tterrain.AddTriangleColor(c1, c2, boundaryColor); \/\/\t\t\tterrain.AddTriangleTerrainTypes(types); \t\t}  \t\tterrain.AddTriangleUnperturbed(v2, HexMetrics.Perturb(left), boundary); \t\tterrain.AddTriangleCellData(indices, w2, leftWeights, boundaryWeights); \/\/\t\tterrain.AddTriangleColor(c2, leftColor, boundaryColor); \/\/\t\tterrain.AddTriangleTerrainTypes(types); \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u2014 <code>TriangulateWithRiver<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t\u2026  \t\tterrain.AddTriangle(centerL, m.v1, m.v2); \t\tterrain.AddQuad(centerL, center, m.v2, m.v3); \t\tterrain.AddQuad(center, centerR, m.v3, m.v4); \t\tterrain.AddTriangle(centerR, m.v4, m.v5);  \t\tVector3 indices; \t\tindices.x = indices.y = indices.z = cell.Index; \t\tterrain.AddTriangleCellData(indices, weights1); \t\tterrain.AddQuadCellData(indices, weights1); \t\tterrain.AddQuadCellData(indices, weights1); \t\tterrain.AddTriangleCellData(indices, weights1);  \/\/\t\tterrain.AddTriangleColor(weights1); \/\/\t\tterrain.AddQuadColor(weights1); \/\/\t\tterrain.AddQuadColor(weights1); \/\/\t\tterrain.AddTriangleColor(weights1);  \/\/\t\tVector3 types; \/\/\t\ttypes.x = types.y = types.z = cell.TerrainTypeIndex; \/\/\t\tterrain.AddTriangleTerrainTypes(types); \/\/\t\tterrain.AddQuadTerrainTypes(types); \/\/\t\tterrain.AddQuadTerrainTypes(types); \/\/\t\tterrain.AddTriangleTerrainTypes(types);  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u044c\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0434\u043b\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/919\/b8c\/731\/919b8c7317b2aa3c06f1077eef27fe96.png\"><\/div>\n<p>  <i>\u0420\u0435\u043b\u044c\u0435\u0444 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u0435\u0448 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0447\u0435\u0435\u043a. \u0422\u0430\u043a \u043a\u0430\u043a \u0448\u0435\u0439\u0434\u0435\u0440 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u0438\u0445 \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u0441\u044f \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8a5\/a23\/ce8\/8a5a23ce850af789e759dde6879f93eb.png\"><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u044f\u0447\u0435\u0435\u043a \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0435 \u043c\u043e\u0433\u0443 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u0427\u0442\u043e \u044f \u0434\u0435\u043b\u0430\u044e \u043d\u0435 \u0442\u0430\u043a?<\/b><\/p>\n<div class=\"spoiler_text\">\u0417\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0431\u044a\u0451\u043c \u043a\u043e\u0434\u0430 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u043b\u0438 \u043d\u0435\u0434\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u043e\u0448\u0438\u0431\u043a\u0443, \u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b. \u041c\u043e\u0436\u0435\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u0448\u0435\u0439\u0434\u0435\u0440<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a, \u0448\u0435\u0439\u0434\u0435\u0440 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b <code>HexCellShaderData<\/code> \u0437\u0430\u0434\u0430\u0432\u0430\u043b \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0418\u043b\u0438 \u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <code>Shader.SetGlobalTexture<\/code>, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u043a\u0430\u043a <em>_HexCellData<\/em>.<\/p>\n<pre><code class=\"cs\">\tpublic void Initialize (int x, int z) { \t\t\u2026 \t\telse { \t\t\tcellTexture = new Texture2D( \t\t\t\tx, z, TextureFormat.RGBA32, false, true \t\t\t); \t\t\tcellTexture.filterMode = FilterMode.Point; \t\t\tcellTexture.wrapMode = TextureWrapMode.Clamp; \t\t\tShader.SetGlobalTexture(\"_HexCellData\", cellTexture); \t\t}  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 Unity \u0434\u0435\u043b\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <em>textureName_TexelSize<\/em>. \u042d\u0442\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\u0439 \u0432\u044b\u0435\u043a\u0442\u043e\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b, \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0448\u0438\u0440\u0438\u043d\u0435 \u0438 \u0432\u044b\u0441\u043e\u0442\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u0430\u043c\u0438 \u0448\u0438\u0440\u0438\u043d\u0443 \u0438 \u0432\u044b\u0441\u043e\u0442\u0443. \u041d\u043e \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0439 \u044d\u0442\u043e \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Shader.SetGlobalVector<\/code> \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<pre><code class=\"cs\">\t\telse { \t\t\tcellTexture = new Texture2D( \t\t\t\tx, z, TextureFormat.RGBA32, false, true \t\t\t); \t\t\tcellTexture.filterMode = FilterMode.Point; \t\t\tcellTexture.wrapMode = TextureWrapMode.Clamp; \t\t\tShader.SetGlobalTexture(\"_HexCellData\", cellTexture); \t\t} \t\tShader.SetGlobalVector( \t\t\t\"_HexCellData_TexelSize\", \t\t\tnew Vector4(1f \/ x, 1f \/ z, x, z) \t\t);<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0430<\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 \u043f\u0430\u043f\u043a\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u043d\u043e\u0432\u044b\u0439 include-\u0444\u0430\u0439\u043b \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <em>HexCellData<\/em>. \u0412\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0422\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0448\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u044b.<\/p>\n<pre><code>sampler2D _HexCellData; float4 _HexCellData_TexelSize;  float4 GetCellData (appdata_full v) { }<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a64\/604\/dbc\/a64604dbc7d3ad5ff1e1578bd0c84eec.png\"><\/div>\n<p>  <i>\u041d\u043e\u0432\u044b\u0439 include-\u0444\u0430\u0439\u043b.<\/i><\/p>\n<p>  \u0418\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0447\u0435\u0435\u043a \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 <code>v.texcoord2<\/code>, \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0438 \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u2014 <code>v.texcoord2.x<\/code>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u041d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b U \u2014 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 \u0448\u0438\u0440\u0438\u043d\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0443\u043c\u043d\u043e\u0436\u0438\u0432 \u0435\u0433\u043e \u043d\u0430 <code>_HexCellData_TexelSize.x<\/code>.<\/p>\n<pre><code>float4 GetCellData (appdata_full v) { \tfloat2 uv; \tuv.x = v.texcoord2.x * _HexCellData_TexelSize.x; }<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0432 \u0432\u0438\u0434\u0435 Z.U, \u0433\u0434\u0435 Z \u2014 \u044d\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0442\u0440\u043e\u043a\u0438, \u0430 U \u2014 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 U \u044f\u0447\u0435\u0439\u043a\u0438. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0441\u0442\u0440\u043e\u043a\u0443, \u043e\u043a\u0440\u0443\u0433\u043b\u0438\u0432 \u0447\u0438\u0441\u043b\u043e \u0432 \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0447\u0442\u044f \u0435\u0433\u043e \u0438\u0437 \u0447\u0438\u0441\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 U.<\/p>\n<pre><code>float4 GetCellData (appdata_full v) { \tfloat2 uv; \tuv.x = v.texcoord2.x * _HexCellData_TexelSize.x; \tfloat row = floor(uv.x); \tuv.x -= row; }<\/code><\/pre>\n<p>  \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 V \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<pre><code>float4 GetCellData (appdata_full v) { \tfloat2 uv; \tuv.x = v.texcoord2.x * _HexCellData_TexelSize.x; \tfloat row = floor(uv.x); \tuv.x -= row; \tuv.y = row * _HexCellData_TexelSize.y; }<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u0445 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0430 \u043d\u0435 \u043d\u0430 \u0438\u0445 \u043a\u0440\u0430\u044f\u0445. \u0422\u0430\u043a \u043c\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u00bd.<\/p>\n<pre><code>float4 GetCellData (appdata_full v) { \tfloat2 uv; \tuv.x = (v.texcoord2.x + 0.5) * _HexCellData_TexelSize.x; \tfloat row = floor(uv.x); \tuv.x -= row; \tuv.y = (row + 0.5) * _HexCellData_TexelSize.y; }<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0432\u0435\u0440\u043d\u044b\u0435 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u043b\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0433\u043e\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u041d\u043e \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e \u0442\u0440\u0451\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b <code>GetCellData<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>index<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code>float4 GetCellData (appdata_full v, int index) { \tfloat2 uv; \tuv.x = (v.texcoord2[index] + 0.5) * _HexCellData_TexelSize.x; \tfloat row = floor(uv.x); \tuv.x -= row; \tuv.y = (row + 0.5) * _HexCellData_TexelSize.y; }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>_HexCellData<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u0443, \u043a\u0430\u043a\u0443\u044e mip-\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>tex2Dlod<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u0422\u0430\u043a \u043a\u0430\u043a \u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0435\u0442 mip-\u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u043b\u0438\u0448\u043d\u0438\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u043d\u0443\u043b\u0435\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<pre><code>float4 GetCellData (appdata_full v, int index) { \tfloat2 uv; \tuv.x = (v.texcoord2[index] + 0.5) * _HexCellData_TexelSize.x; \tfloat row = floor(uv.x); \tuv.x -= row; \tuv.y = (row + 0.5) * _HexCellData_TexelSize.y; \tfloat4 data = tex2Dlod(_HexCellData, float4(uv, 0, 0)); }<\/code><\/pre>\n<p>  \u0427\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u0431\u0430\u0439\u0442. \u041e\u0434\u043d\u0430\u043a\u043e GPU \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 0\u20131. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0443\u043c\u043d\u043e\u0436\u0438\u043c \u0435\u0433\u043e \u043d\u0430 255. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<pre><code>\tfloat4 data = tex2Dlod(_HexCellData, float4(uv, 0, 0)); \tdata.w *= 255; \treturn data;<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c, \u0432\u043a\u043b\u044e\u0447\u0438\u043c <em>HexCellData<\/em> \u0432 \u0448\u0435\u0439\u0434\u0435\u0440 <em>Terrain<\/em>. \u0422\u0430\u043a \u043a\u0430\u043a \u044f \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b \u044d\u0442\u043e\u0442 \u0448\u0435\u0439\u0434\u0435\u0440 \u0432 <em>Materials \/ Terrain<\/em>, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c <em>..\/HexCellData.cginc<\/em>.<\/p>\n<pre><code>\t\t#include \"..\/HexCellData.cginc\"  \t\tUNITY_DECLARE_TEX2DARRAY(_MainTex);<\/code><\/pre>\n<p>  \u0412 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u044f\u0447\u0435\u0439\u043a\u0438, \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c <code>data.terrain<\/code> \u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<pre><code>\t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data); \/\/\t\t\tdata.terrain = v.texcoord2.xyz;  \t\t\tfloat4 cell0 = GetCellData(v, 0); \t\t\tfloat4 cell1 = GetCellData(v, 1); \t\t\tfloat4 cell2 = GetCellData(v, 2);  \t\t\tdata.terrain.x = cell0.w; \t\t\tdata.terrain.y = cell1.w; \t\t\tdata.terrain.z = cell2.w; \t\t}<\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043a\u0430\u0440\u0442\u0430 \u0441\u043d\u043e\u0432\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444. \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u043e\u0432\u044b\u043c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f\u043c. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a, \u0442\u043e \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e.<\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-20\/cell-shader-data\/cell-shader-data.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c<\/h2>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432 \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u0448\u0435\u0439\u0434\u0435\u0440, \u0441\u0430\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435 \u0437\u043d\u0430\u0435\u0442.<\/p>\n<h3>\u0428\u0435\u0439\u0434\u0435\u0440<\/h3>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0443 <em>Terrain<\/em> \u043e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0432\u0430\u0442\u044c \u0435\u0451 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <code>Input<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0442\u0440\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u0442\u0440\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<pre><code>\t\tstruct Input { \t\t\tfloat4 color : COLOR; \t\t\tfloat3 worldPos; \t\t\tfloat3 terrain; \t\t\tfloat3 visibility; \t\t};<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code>\t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data);  \t\t\tfloat4 cell0 = GetCellData(v, 0); \t\t\tfloat4 cell1 = GetCellData(v, 1); \t\t\tfloat4 cell2 = GetCellData(v, 2);  \t\t\tdata.terrain.x = cell0.w; \t\t\tdata.terrain.y = cell1.w; \t\t\tdata.terrain.z = cell2.w;  \t\t\tdata.visibility.x = cell0.x; \t\t\tdata.visibility.y = cell1.x; \t\t\tdata.visibility.z = cell2.x; \t\t}<\/code><\/pre>\n<p>  \u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c, \u0440\u0430\u0432\u043d\u0430\u044f 0, \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430. \u0415\u0441\u043b\u0438 \u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u0432\u0438\u0434\u0438\u043c\u0430, \u0442\u043e \u0438\u043c\u0435\u043b\u0430 \u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 1. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0442\u0435\u043c\u043d\u0438\u0442\u044c \u0440\u0435\u043b\u044c\u0435\u0444, \u0443\u043c\u043d\u043e\u0436\u0438\u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <code>GetTerrainColor<\/code> \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u044b \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u0446\u0432\u0435\u0442 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code>\t\tfloat4 GetTerrainColor (Input IN, int index) { \t\t\tfloat3 uvw = float3(IN.worldPos.xz * 0.02, IN.terrain[index]); \t\t\tfloat4 c = UNITY_SAMPLE_TEX2DARRAY(_MainTex, uvw); \t\t\treturn c * (IN.color[index] * IN.visibility[index]); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1bf\/183\/e69\/1bf183e695a42f4691f63cec72255993.png\"><\/div>\n<p>  <i>\u042f\u0447\u0435\u0439\u043a\u0438 \u0441\u0442\u0430\u043b\u0438 \u0447\u0451\u0440\u043d\u044b\u043c\u0438.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043c\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u0442\u043e\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0432 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u0440\u0438 \u0441\u044d\u043c\u043f\u043b\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0432\u043a\u043b\u0430\u0434 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \u0421\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0431\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u043d\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f.<\/div>\n<\/div>\n<p>  \u041f\u043e\u043b\u043d\u0430\u044f \u0442\u0435\u043c\u043d\u043e\u0442\u0430 \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0427\u0442\u043e\u0431\u044b \u043c\u044b \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u043b\u044c\u0435\u0444, \u043d\u0443\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0441\u043a\u0440\u044b\u0442\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043e\u0442 0\u20131 \u043a \u00bc\u20131, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <code>lerp<\/code> \u0432 \u043a\u043e\u043d\u0446\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<pre><code>\t\tvoid vert (inout appdata_full v, out Input data) { \t\t\t\u2026  \t\t\tdata.visibility.x = cell0.x; \t\t\tdata.visibility.y = cell1.x; \t\t\tdata.visibility.z = cell2.x; \t\t\tdata.visibility = lerp(0.25, 1, data.visibility); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a20\/090\/3e2\/a200903e2f31f3bdcd0c996d42f91a02.png\"><\/div>\n<p>  <i>\u0417\u0430\u0442\u0435\u043c\u043d\u0451\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438.<\/i><\/p>\n<h3>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430, \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \u041d\u043e \u043a\u0430\u043a \u044f\u0447\u0435\u0439\u043a\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442, \u0432\u0438\u0434\u0438\u043c\u0430 \u043b\u0438 \u043e\u043d\u0430? \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e, \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0438\u0434\u044f\u0449\u0438\u0445 \u0435\u0451 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439. \u041a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0435. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443, \u043e\u043d \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442\u044c \u0435\u0451 \u043e\u0431 \u044d\u0442\u043e\u043c. \u042f\u0447\u0435\u0439\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u043c\u043e\u0442\u0440\u044f\u0449\u0438\u0445, \u043a\u0430\u043a\u0438\u043c\u0438 \u0431\u044b \u043d\u0438 \u0431\u044b\u043b\u0438 \u044d\u0442\u0438 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 1, \u0442\u043e \u043e\u043d\u0430 \u0432\u0438\u0434\u0438\u043c\u0430, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCell<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic bool IsVisible { \t\tget { \t\t\treturn visibility &gt; 0; \t\t} \t}  \t\u2026  \tint visibility;  \t\u2026  \tpublic void IncreaseVisibility () { \t\tvisibility += 1; \t}  \tpublic void DecreaseVisibility () { \t\tvisibility -= 1; \t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCellShaderData<\/code> \u043c\u0435\u0442\u043e\u0434 <code>RefreshVisibility<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435, \u0447\u0442\u043e \u0438 <code>RefreshTerrain<\/code>, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435 R \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 0\u20131, \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>(byte)255<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void RefreshVisibility (HexCell cell) { \t\tcellTextureData[cell.Index].r = cell.IsVisible ? (byte)255 : (byte)0; \t\tenabled = true; \t}<\/code><\/pre>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043c\u0435\u043d\u044f\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 0 \u0438 1.<\/p>\n<pre><code class=\"cs\">\tpublic void IncreaseVisibility () { \t\tvisibility += 1; \t\tif (visibility == 1) { \t\t\tShaderData.RefreshVisibility(this); \t\t} \t}  \tpublic void DecreaseVisibility () { \t\tvisibility -= 1; \t\tif (visibility == 0) { \t\t\tShaderData.RefreshVisibility(this); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u044f\u0434\u043e\u0432<\/h3>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u044f\u0434\u044b \u043c\u043e\u0433\u043b\u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0443\u044e \u0438\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0443. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u0430 <code>IncreaseVisibility<\/code> \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u044f\u0434\u0430 \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0438 <code>HexUnit.Location<\/code>. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u043c \u0434\u043b\u044f \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442) <code>DecreaseVisibility<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic HexCell Location { \t\tget { \t\t\treturn location; \t\t} \t\tset { \t\t\tif (location) { \t\t\t\tlocation.DecreaseVisibility(); \t\t\t\tlocation.Unit = null; \t\t\t} \t\t\tlocation = value; \t\t\tvalue.Unit = this; \t\t\tvalue.IncreaseVisibility(); \t\t\ttransform.localPosition = value.Position; \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7bc\/f95\/a07\/7bcf95a07fdf4c10ed1d53055dddf6a4.png\"><\/div>\n<p>  <i>\u041e\u0442\u0440\u044f\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u0438\u0434\u0435\u0442\u044c, \u0433\u0434\u0435 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f.<\/i><\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u043c\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c! \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u043e\u0442\u0440\u044f\u0434\u044b \u0434\u0435\u043b\u0430\u044e\u0442 \u0441\u0432\u043e\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0432\u0438\u0434\u0438\u043c\u043e\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0432 \u0438\u0445 \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u041d\u043e \u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0440\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043e\u0442\u0440\u044f\u0434\u043e\u0432 \u0441 \u043a\u0430\u0440\u0442\u044b. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e, \u0431\u0443\u0434\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0445 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0438 \u043e\u0442\u0440\u044f\u0434\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tpublic void Die () { \t\tif (location) { \t\t\tlocation.DecreaseVisibility(); \t\t} \t\tlocation.Unit = null; \t\tDestroy(gameObject); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0414\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/h3>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0447\u0435\u0439\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442\u0440\u044f\u0434, \u0438 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u043c \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0438 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0440\u044f\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0442\u0440\u044f\u0434\u0430.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexGrid<\/code> \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a, \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0432 \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0432 <code>Search<\/code>. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u044f\u0447\u0435\u0435\u043a, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0443\u043b \u0441\u043f\u0438\u0441\u043a\u043e\u0432.<\/p>\n<p>  \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430. \u041a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0438\u0441\u043a \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f, \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0432 \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 \u043b\u043e\u0433\u0438\u043a\u0438 \u0445\u043e\u0434\u043e\u0432 \u0438 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>PathFrom<\/code> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u0438 \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u043c\u0435\u0448\u0430\u0442\u044c \u043f\u0443\u0442\u0438 \u043f\u043e \u0441\u0435\u0442\u043a\u0435.<\/p>\n<p>  \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 1. \u0415\u0441\u043b\u0438 \u043e\u043d\u043e \u043f\u0440\u0435\u0432\u043e\u0441\u0445\u043e\u0434\u0438\u0442 \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u044d\u0442\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u0418 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0430\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0435\u0451 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 0. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u0441\u0443\u0442\u0438 \u043c\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u0414\u0435\u0439\u043a\u0441\u0442\u0440\u044b.<\/p>\n<pre><code class=\"cs\">\tList&lt;HexCell&gt; GetVisibleCells (HexCell fromCell, int range) { \t\tList&lt;HexCell&gt; visibleCells = ListPool&lt;HexCell&gt;.Get();  \t\tsearchFrontierPhase += 2; \t\tif (searchFrontier == null) { \t\t\tsearchFrontier = new HexCellPriorityQueue(); \t\t} \t\telse { \t\t\tsearchFrontier.Clear(); \t\t}  \t\tfromCell.SearchPhase = searchFrontierPhase; \t\tfromCell.Distance = 0; \t\tsearchFrontier.Enqueue(fromCell); \t\twhile (searchFrontier.Count &gt; 0) { \t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tcurrent.SearchPhase += 1; \t\t\tvisibleCells.Add(current); \/\/\t\t\tif (current == toCell) { \/\/\t\t\t\treturn true; \/\/\t\t\t}  \/\/\t\t\tint currentTurn = (current.Distance - 1) \/ speed;  \t\t\tfor (HexDirection d = HexDirection.NE; d &lt;= HexDirection.NW; d++) { \t\t\t\tHexCell neighbor = current.GetNeighbor(d); \t\t\t\tif ( \t\t\t\t\tneighbor == null || \t\t\t\t\tneighbor.SearchPhase &gt; searchFrontierPhase \t\t\t\t) { \t\t\t\t\tcontinue; \t\t\t\t} \/\/\t\t\t\t\u2026 \/\/\t\t\t\tint moveCost; \/\/\t\t\t\t\u2026  \t\t\t\tint distance = current.Distance + 1; \t\t\t\tif (distance &gt; range) { \t\t\t\t\tcontinue; \t\t\t\t} \/\/\t\t\t\tint turn = (distance - 1) \/ speed; \/\/\t\t\t\tif (turn &gt; currentTurn) { \/\/\t\t\t\t\tdistance = turn * speed + moveCost; \/\/\t\t\t\t}  \t\t\t\tif (neighbor.SearchPhase &lt; searchFrontierPhase) { \t\t\t\t\tneighbor.SearchPhase = searchFrontierPhase; \t\t\t\t\tneighbor.Distance = distance; \/\/\t\t\t\t\tneighbor.PathFrom = current; \t\t\t\t\tneighbor.SearchHeuristic = 0; \t\t\t\t\tsearchFrontier.Enqueue(neighbor); \t\t\t\t} \t\t\t\telse if (distance &lt; neighbor.Distance) { \t\t\t\t\tint oldPriority = neighbor.SearchPriority; \t\t\t\t\tneighbor.Distance = distance; \/\/\t\t\t\t\tneighbor.PathFrom = current; \t\t\t\t\tsearchFrontier.Change(neighbor, oldPriority); \t\t\t\t} \t\t\t} \t\t} \t\treturn visibleCells; \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c?<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u043e\u0436\u0435\u043c, \u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435.<\/div>\n<\/div>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c <code>HexGrid<\/code> \u043c\u0435\u0442\u043e\u0434\u044b <code>IncreaseVisibility<\/code> \u0438 <code>DecreaseVisibility<\/code>. \u041e\u043d\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u044f\u0447\u0435\u0439\u043a\u0443 \u0438 \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0440\u0443\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0442\/\u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0442 \u0438\u0445 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0441 \u044d\u0442\u0438\u043c, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0435\u0433\u043e \u043f\u0443\u043b.<\/p>\n<pre><code class=\"cs\">\tpublic void IncreaseVisibility (HexCell fromCell, int range) { \t\tList&lt;HexCell&gt; cells = GetVisibleCells(fromCell, range); \t\tfor (int i = 0; i &lt; cells.Count; i++) { \t\t\tcells[i].IncreaseVisibility(); \t\t} \t\tListPool&lt;HexCell&gt;.Add(cells); \t}  \tpublic void DecreaseVisibility (HexCell fromCell, int range) { \t\tList&lt;HexCell&gt; cells = GetVisibleCells(fromCell, range); \t\tfor (int i = 0; i &lt; cells.Count; i++) { \t\t\tcells[i].DecreaseVisibility(); \t\t} \t\tListPool&lt;HexCell&gt;.Add(cells); \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b, <code>HexUnit<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0441\u0435\u0442\u043a\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Grid<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic HexGrid Grid { get; set; }<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u0442\u0440\u044f\u0434\u0430 \u043a \u0441\u0435\u0442\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u0441\u0435\u0442\u043a\u0443 \u0432 <code>HexGrid.AddUnit<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void AddUnit (HexUnit unit, HexCell location, float orientation) { \t\tunits.Add(unit); \t\tunit.Grid = this; \t\tunit.transform.SetParent(transform, false); \t\tunit.Location = location; \t\tunit.Orientation = orientation; \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0442\u0440\u0438 \u044f\u0447\u0435\u0439\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexUnit<\/code> \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. \u0417\u0430\u0442\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0440\u044f\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0442\u043a\u0438 \u043c\u0435\u0442\u043e\u0434\u044b <code>IncreaseVisibility<\/code> \u0438 <code>DecreaseVisibility<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u0441\u0432\u043e\u044e \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043b \u0432 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e.<\/p>\n<pre><code class=\"cs\">\tconst int visionRange = 3;  \t\u2026  \tpublic HexCell Location { \t\tget { \t\t\treturn location; \t\t} \t\tset { \t\t\tif (location) { \/\/\t\t\t\tlocation.DecreaseVisibility(); \t\t\t\tGrid.DecreaseVisibility(location, visionRange); \t\t\t\tlocation.Unit = null; \t\t\t} \t\t\tlocation = value; \t\t\tvalue.Unit = this; \/\/\t\t\tvalue.IncreaseVisibility(); \t\t\tGrid.IncreaseVisibility(value, visionRange); \t\t\ttransform.localPosition = value.Position; \t\t} \t}  \t\u2026  \tpublic void Die () { \t\tif (location) { \/\/\t\t\tlocation.DecreaseVisibility(); \t\t\tGrid.DecreaseVisibility(location, visionRange); \t\t} \t\tlocation.Unit = null; \t\tDestroy(gameObject); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8cd\/c45\/ccb\/8cdc45ccb01449b3c7d50a7bef9b249c.png\"><\/div>\n<p>  <i>\u041e\u0442\u0440\u044f\u0434\u044b \u0441 \u0434\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f.<\/i><\/p>\n<h3>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438<\/h3>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u044f\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443. \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0431\u044b \u043b\u0443\u0447\u0448\u0435, \u0435\u0441\u043b\u0438 \u0431\u044b \u043e\u0442\u0440\u044f\u0434 \u0438 \u0435\u0433\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u0432\u0438\u0433\u0430\u043b\u0438\u0441\u044c \u0432\u043c\u0435\u0441\u0442\u0435. \u041f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043a \u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Location<\/code> \u0432 <code>HexUnit.Travel<\/code>. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u043b\u0435 <code>location<\/code>, \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u043a\u043e\u0434\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0447\u0438\u0449\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u043c\u0435\u0441\u0442\u043e. \u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<pre><code class=\"cs\">\tpublic void Travel (List&lt;HexCell&gt; path) { \/\/\t\tLocation = path[path.Count - 1]; \t\tlocation.Unit = null; \t\tlocation = path[path.Count - 1]; \t\tlocation.Unit = this; \t\tpathToTravel = path; \t\tStopAllCoroutines(); \t\tStartCoroutine(TravelPath()); \t}<\/code><\/pre>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b <code>TravelPath<\/code> \u0431\u0443\u0434\u0435\u043c \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f <code>LookAt<\/code>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432 \u043d\u043e\u0432\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443, \u0431\u0443\u0434\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0441 \u044d\u0442\u0438\u043c, \u0441\u043d\u043e\u0432\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0437 \u043d\u0435\u0439. \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tIEnumerator TravelPath () { \t\tVector3 a, b, c = pathToTravel[0].Position; \/\/\t\ttransform.localPosition = c; \t\tyield return LookAt(pathToTravel[1].Position); \t\tGrid.DecreaseVisibility(pathToTravel[0], visionRange);  \t\tfloat t = Time.deltaTime * travelSpeed; \t\tfor (int i = 1; i &lt; pathToTravel.Count; i++) { \t\t\ta = c; \t\t\tb = pathToTravel[i - 1].Position; \t\t\tc = (b + pathToTravel[i].Position) * 0.5f; \t\t\tGrid.IncreaseVisibility(pathToTravel[i], visionRange); \t\t\tfor (; t &lt; 1f; t += Time.deltaTime * travelSpeed) { \t\t\t\t\u2026 \t\t\t} \t\t\tGrid.DecreaseVisibility(pathToTravel[i], visionRange); \t\t\tt -= 1f; \t\t}  \t\ta = c; \t\tb = location.Position; \/\/ We can simply use the destination here. \t\tc = b; \t\tGrid.IncreaseVisibility(location, visionRange); \t\tfor (; t &lt; 1f; t += Time.deltaTime * travelSpeed) { \t\t\t\u2026 \t\t}  \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 60.9125%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/SkinnyIcyHairstreakbutterfly\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438.<\/i><\/p>\n<p>  \u0412\u0441\u0451 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043a\u0430\u0437 \u043e\u0442\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u044f\u0434\u0430. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u043a \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u044f\u0434\u0430.<\/p>\n<pre><code class=\"cs\">\tHexCell location, currentTravelLocation;<\/code><\/pre>\n<p>  \u0411\u0443\u0434\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0440\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0438 \u0432 \u043d\u043e\u0432\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f, \u043f\u043e\u043a\u0430 \u043e\u0442\u0440\u044f\u0434 \u043d\u0435 \u0434\u043e\u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0434\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tIEnumerator TravelPath () { \t\t\u2026 \t\t \t\tfor (int i = 1; i &lt; pathToTravel.Count; i++) { \t\t\tcurrentTravelLocation = pathToTravel[i]; \t\t\ta = c; \t\t\tb = pathToTravel[i - 1].Position; \t\t\tc = (b + currentTravelLocation.Position) * 0.5f; \t\t\tGrid.IncreaseVisibility(pathToTravel[i], visionRange); \t\t\tfor (; t &lt; 1f; t += Time.deltaTime * travelSpeed) { \t\t\t\ttransform.localPosition = Bezier.GetPoint(a, b, c, t); \t\t\t\tVector3 d = Bezier.GetDerivative(a, b, c, t); \t\t\t\td.y = 0f; \t\t\t\ttransform.localRotation = Quaternion.LookRotation(d); \t\t\t\tyield return null; \t\t\t} \t\t\tGrid.DecreaseVisibility(pathToTravel[i], visionRange); \t\t\tt -= 1f; \t\t} \t\tcurrentTravelLocation = null; \t\t \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0432 <code>TravelPath<\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u043b\u0438 \u0441\u0442\u0430\u0440\u043e\u0435 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435, \u0430 \u043d\u0435 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043f\u0443\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\tIEnumerator TravelPath () { \t\tVector3 a, b, c = pathToTravel[0].Position; \t\tyield return LookAt(pathToTravel[1].Position); \t\tGrid.DecreaseVisibility( \t\t\tcurrentTravelLocation ? currentTravelLocation : pathToTravel[0], \t\t\tvisionRange \t\t);  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0435\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u044f\u0434\u0430. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0442\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043d\u0451\u043c \u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid OnEnable () { \t\tif (location) { \t\t\ttransform.localPosition = location.Position; \t\t\tif (currentTravelLocation) { \t\t\t\tGrid.IncreaseVisibility(location, visionRange); \t\t\t\tGrid.DecreaseVisibility(currentTravelLocation, visionRange); \t\t\t\tcurrentTravelLocation = null; \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-20\/visibility\/visibility.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043e\u0440\u043e\u0433 \u0438 \u0432\u043e\u0434\u044b<\/h2>\n<p>  \u0425\u043e\u0442\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u044b \u043d\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0434\u043e\u0440\u043e\u0433 \u0438 \u0432\u043e\u0434\u044b \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442. \u041e\u043d\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u044f\u0440\u043a\u0438\u043c\u0438 \u0434\u043b\u044f \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a \u0434\u043e\u0440\u043e\u0433\u0430\u043c \u0438 \u0432\u043e\u0434\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0447\u0435\u0435\u043a \u0438 \u0432\u0435\u0441\u0430 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u044f \u0438 \u043a \u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u043c \u043c\u0435\u0448\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b <em>Use Cell Data<\/em> for the <em>Rivers<\/em>, <em>Roads<\/em>, <em>Water<\/em>, <em>Water Shore<\/em> \u0438 <em>Estuaries<\/em> \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430.<\/p>\n<h3>\u0414\u043e\u0440\u043e\u0433\u0438<\/h3>\n<p>  \u041c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0434\u043e\u0440\u043e\u0433. \u041c\u0435\u0442\u043e\u0434 <code>HexGridChunk.TriangulateRoadEdge<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u0440\u043e\u0433\u0438 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u043e\u0434\u0438\u043d \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0434\u043b\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoadEdge ( \t\tVector3 center, Vector3 mL, Vector3 mR, float index \t) { \t\troads.AddTriangle(center, mL, mR); \t\troads.AddTriangleUV( \t\t\tnew Vector2(1f, 0f), new Vector2(0f, 0f), new Vector2(0f, 0f) \t\t); \t\tVector3 indices; \t\tindices.x = indices.y = indices.z = index; \t\troads.AddTriangleCellData(indices, weights1); \t}<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u043e\u0440\u043e\u0433 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f <code>TriangulateRoadSegment<\/code>. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u0432\u043d\u0443\u0442\u0440\u0438, \u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432. \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0440\u043e\u0433 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u0443\u0441\u0442\u0443\u043f\u043e\u0432, \u0442\u043e \u0432\u0435\u0441\u0430 \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoadSegment ( \t\tVector3 v1, Vector3 v2, Vector3 v3, \t\tVector3 v4, Vector3 v5, Vector3 v6, \t\tColor w1, Color w2, Vector3 indices \t) { \t\troads.AddQuad(v1, v2, v4, v5); \t\troads.AddQuad(v2, v3, v5, v6); \t\troads.AddQuadUV(0f, 1f, 0f, 0f); \t\troads.AddQuadUV(1f, 0f, 0f, 0f); \t\troads.AddQuadCellData(indices, w1, w2); \t\troads.AddQuadCellData(indices, w1, w2); \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a <code>TriangulateRoad<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0434\u043e\u0440\u043e\u0433\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0447\u0435\u0435\u043a. \u0415\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u041e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c \u0438\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0434\u043e\u0440\u043e\u0433, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u043a \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoad ( \t\tVector3 center, Vector3 mL, Vector3 mR, \t\tEdgeVertices e, bool hasRoadThroughCellEdge, float index \t) { \t\tif (hasRoadThroughCellEdge) { \t\t\tVector3 indices; \t\t\tindices.x = indices.y = indices.z = index; \t\t\tVector3 mC = Vector3.Lerp(mL, mR, 0.5f); \t\t\tTriangulateRoadSegment( \t\t\t\tmL, mC, mR, e.v2, e.v3, e.v4, \t\t\t\tweights1, weights1, indices \t\t\t); \t\t\troads.AddTriangle(center, mL, mC); \t\t\troads.AddTriangle(center, mC, mR); \t\t\troads.AddTriangleUV( \t\t\t\tnew Vector2(1f, 0f), new Vector2(0f, 0f), new Vector2(1f, 0f) \t\t\t); \t\t\troads.AddTriangleUV( \t\t\t\tnew Vector2(1f, 0f), new Vector2(1f, 0f), new Vector2(0f, 0f) \t\t\t); \t\t\troads.AddTriangleCellData(indices, weights1); \t\t\troads.AddTriangleCellData(indices, weights1); \t\t} \t\telse { \t\t\tTriangulateRoadEdge(center, mL, mR, index); \t\t} \t}<\/code><\/pre>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432 <code>TriangulateRoad<\/code>, <code>TriangulateRoadEdge<\/code> \u0438 <code>TriangulateRoadSegment<\/code>, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithoutRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tTriangulateEdgeFan(center, e, cell.Index);  \t\tif (cell.HasRoads) { \t\t\tVector2 interpolators = GetRoadInterpolators(direction, cell); \t\t\tTriangulateRoad( \t\t\t\tcenter, \t\t\t\tVector3.Lerp(center, e.v1, interpolators.x), \t\t\t\tVector3.Lerp(center, e.v5, interpolators.y), \t\t\t\te, cell.HasRoadThroughEdge(direction), cell.Index \t\t\t); \t\t} \t} \t \t\u2026 \t \tvoid TriangulateRoadAdjacentToRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t\u2026 \t\tTriangulateRoad(roadCenter, mL, mR, e, hasRoadThroughEdge, cell.Index); \t\tif (previousHasRiver) { \t\t\tTriangulateRoadEdge(roadCenter, center, mL, cell.Index); \t\t} \t\tif (nextHasRiver) { \t\t\tTriangulateRoadEdge(roadCenter, mR, center, cell.Index); \t\t} \t} \t \t\u2026 \t \tvoid TriangulateEdgeStrip ( \t\t\u2026 \t) { \t\t\u2026  \t\tif (hasRoad) { \t\t\tTriangulateRoadSegment( \t\t\t\te1.v2, e1.v3, e1.v4, e2.v2, e2.v3, e2.v4, w1, w2, indices \t\t\t); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0448\u0435\u0439 \u0432\u0435\u0440\u043d\u044b, \u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0448\u0435\u0439\u0434\u0435\u0440\u0443 <em>Road<\/em>. \u0415\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c <em>HexCellData<\/em>.<\/p>\n<pre><code>\t\t#pragma surface surf Standard fullforwardshadows decal:blend vertex:vert \t\t#pragma target 3.0  \t\t#include \"HexCellData.cginc\"<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432, \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043e\u0434\u0438\u043d \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<pre><code>\t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t\tfloat3 worldPos; \t\t\tfloat visibility; \t\t};<\/code><\/pre>\n<p>  \u041d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0432\u0443\u0445 \u044f\u0447\u0435\u0435\u043a. \u041c\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u043c \u0438\u0445 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0435\u0451 \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c.<\/p>\n<pre><code>\t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data);  \t\t\tfloat4 cell0 = GetCellData(v, 0); \t\t\tfloat4 cell1 = GetCellData(v, 1);  \t\t\tdata.visibility = cell0.x * v.color.x + cell1.x * v.color.y; \t\t\tdata.visibility = lerp(0.25, 1, data.visibility); \t\t}<\/code><\/pre>\n<p>  \u0412\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a \u0446\u0432\u0435\u0442\u0443.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfloat4 noise = tex2D(_MainTex, IN.worldPos.xz * 0.025); \t\t\tfixed4 c = _Color * ((noise.y * 0.75 + 0.25) * IN.visibility); \t\t\t\u2026 \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/af8\/92f\/46e\/af892f46e364906cc547aaecb4e50e3a.png\"><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433\u0438 \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e.<\/i><\/p>\n<h3>\u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u043e\u0434\u0430<\/h3>\n<p>  \u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043d\u0430 \u0432\u043e\u0434\u0443 \u0443\u0436\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u043b\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c, \u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0433\u0440\u0443\u0436\u0451\u043d\u043d\u043e\u0433\u043e \u0432 \u0432\u043e\u0434\u0443 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0432\u043e\u0434\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <code>HexGridChunk.TriangulateOpenWater<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateOpenWater ( \t\tHexDirection direction, HexCell cell, HexCell neighbor, Vector3 center \t) { \t\t\u2026  \t\twater.AddTriangle(center, c1, c2); \t\tVector3 indices; \t\tindices.x = indices.y = indices.z = cell.Index; \t\twater.AddTriangleCellData(indices, weights1);  \t\tif (direction &lt;= HexDirection.SE &amp;&amp; neighbor != null) { \t\t\t\u2026  \t\t\twater.AddQuad(c1, c2, e1, e2); \t\t\tindices.y = neighbor.Index; \t\t\twater.AddQuadCellData(indices, weights1, weights2);  \t\t\tif (direction &lt;= HexDirection.E) { \t\t\t\t\u2026 \t\t\t\twater.AddTriangle( \t\t\t\t\tc2, e2, c2 + HexMetrics.GetWaterBridge(direction.Next()) \t\t\t\t); \t\t\t\tindices.z = nextNeighbor.Index; \t\t\t\twater.AddTriangleCellData( \t\t\t\t\tindices, weights1, weights2, weights3 \t\t\t\t); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u043a \u0432\u0435\u0435\u0440\u0430\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0440\u044f\u0434\u043e\u043c \u0441 \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u044f\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWaterShore ( \t\tHexDirection direction, HexCell cell, HexCell neighbor, Vector3 center \t) { \t\t\u2026 \t\twater.AddTriangle(center, e1.v1, e1.v2); \t\twater.AddTriangle(center, e1.v2, e1.v3); \t\twater.AddTriangle(center, e1.v3, e1.v4); \t\twater.AddTriangle(center, e1.v4, e1.v5); \t\tVector3 indices; \t\tindices.x = indices.y = indices.z = cell.Index; \t\twater.AddTriangleCellData(indices, weights1); \t\twater.AddTriangleCellData(indices, weights1); \t\twater.AddTriangleCellData(indices, weights1); \t\twater.AddTriangleCellData(indices, weights1); \t\t \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0428\u0435\u0439\u0434\u0435\u0440 <em>Water<\/em> \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u043c \u0436\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u0430\u043a \u0438 \u0448\u0435\u0439\u0434\u0435\u0440 <em>Road<\/em>, \u043d\u043e \u0432 \u043d\u0451\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0435 \u0434\u0432\u0443\u0445, \u0430 \u0442\u0440\u0451\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code>\t\t#pragma surface surf Standard alpha vertex:vert \t\t#pragma target 3.0  \t\t#include \"Water.cginc\" \t\t#include \"HexCellData.cginc\"  \t\tsampler2D _MainTex;  \t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t\tfloat3 worldPos; \t\t\tfloat visibility; \t\t};  \t\t\u2026  \t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data);  \t\t\tfloat4 cell0 = GetCellData(v, 0); \t\t\tfloat4 cell1 = GetCellData(v, 1); \t\t\tfloat4 cell2 = GetCellData(v, 2);  \t\t\tdata.visibility = \t\t\t\tcell0.x * v.color.x + cell1.x * v.color.y + cell2.x * v.color.z; \t\t\tdata.visibility = lerp(0.25, 1, data.visibility); \t\t}  \t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfloat waves = Waves(IN.worldPos.xz, _MainTex);  \t\t\tfixed4 c = saturate(_Color + waves); \t\t\to.Albedo = c.rgb * IN.visibility; \t\t\t\u2026 \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6a4\/c52\/36c\/6a4c5236c52eaae78cbde54fb2fdeeac.png\"><\/div>\n<p>  <i>\u041e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u043e\u0434\u0430 \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e.<\/i><\/p>\n<h3>\u041f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u044f \u0438 \u0443\u0441\u0442\u044c\u044f<\/h3>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u043e\u0432\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <code>HexGridChunk.TriangulateWaterShore<\/code>. \u041c\u044b \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0432\u0435\u043a\u0442\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432, \u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0439 \u0432\u043e\u0434\u044b. \u041f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u044f\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u043e\u0441\u0435\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043a\u043e\u0434.<\/p>\n<pre><code class=\"cs\">\t\tVector3 indices; \/\/\t\tindices.x = indices.y = indices.z = cell.Index; \t\tindices.x = indices.z = cell.Index; \t\tindices.y = neighbor.Index;<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u043a quad-\u0430\u043c \u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443 \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u044f. \u0422\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>TriangulateEstuary<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverThroughEdge(direction)) { \t\t\tTriangulateEstuary( \t\t\t\te1, e2, cell.IncomingRiver == direction, indices \t\t\t); \t\t} \t\telse { \t\t\t\u2026 \t\t\twaterShore.AddQuadUV(0f, 0f, 0f, 1f); \t\t\twaterShore.AddQuadCellData(indices, weights1, weights2); \t\t\twaterShore.AddQuadCellData(indices, weights1, weights2); \t\t\twaterShore.AddQuadCellData(indices, weights1, weights2); \t\t\twaterShore.AddQuadCellData(indices, weights1, weights2); \t\t}  \t\tHexCell nextNeighbor = cell.GetNeighbor(direction.Next()); \t\tif (nextNeighbor != null) { \t\t\t\u2026 \t\t\twaterShore.AddTriangleUV( \t\t\t\t\u2026 \t\t\t); \t\t\tindices.z = nextNeighbor.Index; \t\t\twaterShore.AddTriangleCellData( \t\t\t\tindices, weights1, weights2, weights3 \t\t\t); \t\t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 <code>TriangulateEstuary<\/code> \u0438 \u0437\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u044f\u0447\u0435\u0435\u043a \u0434\u043b\u044f \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u044f \u0438 \u0443\u0441\u0442\u044c\u044f. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0443\u0441\u0442\u044c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438\u0437 \u0442\u0440\u0430\u043f\u0435\u0446\u043e\u0438\u0434\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438 \u043f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u044f \u043f\u043e \u0431\u043e\u043a\u0430\u043c. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0441\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0432\u0435\u0440\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEstuary ( \t\tEdgeVertices e1, EdgeVertices e2, bool incomingRiver, Vector3 indices \t) { \t\twaterShore.AddTriangle(e2.v1, e1.v2, e1.v1); \t\twaterShore.AddTriangle(e2.v5, e1.v5, e1.v4); \t\twaterShore.AddTriangleUV( \t\t\tnew Vector2(0f, 1f), new Vector2(0f, 0f), new Vector2(0f, 0f) \t\t); \t\twaterShore.AddTriangleUV( \t\t\tnew Vector2(0f, 1f), new Vector2(0f, 0f), new Vector2(0f, 0f) \t\t); \t\twaterShore.AddTriangleCellData(indices, weights2, weights1, weights1); \t\twaterShore.AddTriangleCellData(indices, weights2, weights1, weights1);  \t\testuaries.AddQuad(e2.v1, e1.v2, e2.v2, e1.v3); \t\testuaries.AddTriangle(e1.v3, e2.v2, e2.v4); \t\testuaries.AddQuad(e1.v3, e1.v4, e2.v4, e2.v5);  \t\testuaries.AddQuadUV( \t\t\tnew Vector2(0f, 1f), new Vector2(0f, 0f), \t\t\tnew Vector2(1f, 1f), new Vector2(0f, 0f) \t\t); \t\testuaries.AddTriangleUV( \t\t\tnew Vector2(0f, 0f), new Vector2(1f, 1f), new Vector2(1f, 1f) \t\t); \t\testuaries.AddQuadUV( \t\t\tnew Vector2(0f, 0f), new Vector2(0f, 0f), \t\t\tnew Vector2(1f, 1f), new Vector2(0f, 1f) \t\t); \t\testuaries.AddQuadCellData( \t\t\tindices, weights2, weights1, weights2, weights1 \t\t); \t\testuaries.AddTriangleCellData(indices, weights1, weights2, weights2); \t\testuaries.AddQuadCellData(indices, weights1, weights2); \t\t \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0412 \u0448\u0435\u0439\u0434\u0435\u0440 <em>WaterShore<\/em> \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0438 \u0432 \u0448\u0435\u0439\u0434\u0435\u0440 <em>Water<\/em>, \u0441\u043c\u0435\u0448\u0430\u0432 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u0440\u0451\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code>\t\t#pragma surface surf Standard alpha vertex:vert \t\t#pragma target 3.0  \t\t#include \"Water.cginc\" \t\t#include \"HexCellData.cginc\"  \t\tsampler2D _MainTex;  \t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t\tfloat3 worldPos; \t\t\tfloat visibility; \t\t};  \t\t\u2026  \t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data);  \t\t\tfloat4 cell0 = GetCellData(v, 0); \t\t\tfloat4 cell1 = GetCellData(v, 1); \t\t\tfloat4 cell2 = GetCellData(v, 2);  \t\t\tdata.visibility = \t\t\t\tcell0.x * v.color.x + cell1.x * v.color.y + cell2.x * v.color.z; \t\t\tdata.visibility = lerp(0.25, 1, data.visibility); \t\t}  \t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\t\u2026  \t\t\tfixed4 c = saturate(_Color + max(foam, waves)); \t\t\to.Albedo = c.rgb * IN.visibility; \t\t\t\u2026 \t\t}<\/code><\/pre>\n<p>  \u0428\u0430\u0439\u0434\u0435\u0440 <em>Estuary<\/em> \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u0432\u0443\u0445 \u044f\u0447\u0435\u0435\u043a, \u043a\u0430\u043a \u0438 \u0448\u0435\u0439\u0434\u0435\u0440 <em>Road<\/em>. \u0423 \u043d\u0435\u0433\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0440\u0435\u043a.<\/p>\n<pre><code>\t\t#include \"Water.cginc\" \t\t#include \"HexCellData.cginc\"  \t\tsampler2D _MainTex;  \t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t\tfloat2 riverUV; \t\t\tfloat3 worldPos; \t\t\tfloat visibility; \t\t};  \t\thalf _Glossiness; \t\thalf _Metallic; \t\tfixed4 _Color;  \t\tvoid vert (inout appdata_full v, out Input o) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, o); \t\t\to.riverUV = v.texcoord1.xy;  \t\t\tfloat4 cell0 = GetCellData(v, 0); \t\t\tfloat4 cell1 = GetCellData(v, 1);  \t\t\to.visibility = cell0.x * v.color.x + cell1.x * v.color.y; \t\t\to.visibility = lerp(0.25, 1, o.visibility); \t\t}  \t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\t\u2026  \t\t\tfixed4 c = saturate(_Color + water); \t\t\to.Albedo = c.rgb * IN.visibility; \t\t\t\u2026 \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/88f\/829\/254\/88f829254235a293040ac755d8318bc3.png\"><\/div>\n<p>  <i>\u041f\u043e\u0431\u0435\u0440\u0435\u0436\u044c\u044f \u0438 \u0443\u0441\u0442\u044c\u044f \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e.<\/i><\/p>\n<h3>\u0420\u0435\u043a\u0438<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0432\u043e\u0434\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u043e\u043d\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u2014 \u044d\u0442\u043e \u0440\u0435\u043a\u0438. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexGridChunk.TriangulateRiverQuad<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a \u043c\u0435\u0448\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u0432\u0443\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRiverQuad ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y, float v, bool reversed, Vector3 indices \t) { \t\tTriangulateRiverQuad(v1, v2, v3, v4, y, y, v, reversed, indices); \t}  \tvoid TriangulateRiverQuad ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y1, float y2, float v, bool reversed, Vector3 indices \t) { \t\t\u2026 \t\trivers.AddQuadCellData(indices, weights1, weights2); \t}<\/code><\/pre>\n<p>  <code>TriangulateWithRiverBeginOrEnd<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0440\u0435\u043a \u0441 quad-\u043e\u043c \u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiverBeginOrEnd ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t\u2026  \t\tif (!cell.IsUnderwater) { \t\t\tbool reversed = cell.HasIncomingRiver; \t\t\tVector3 indices; \t\t\tindices.x = indices.y = indices.z = cell.Index; \t\t\tTriangulateRiverQuad( \t\t\t\tm.v2, m.v4, e.v2, e.v4, \t\t\t\tcell.RiverSurfaceY, 0.6f, reversed, indices \t\t\t); \t\t\tcenter.y = m.v2.y = m.v4.y = cell.RiverSurfaceY; \t\t\trivers.AddTriangle(center, m.v2, m.v4); \t\t\t\u2026 \t\t\trivers.AddTriangleCellData(indices, weights1); \t\t} \t}<\/code><\/pre>\n<p>  \u0423 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u044d\u0442\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0447\u0435\u0435\u043a \u0432 <code>TriangulateWithRiver<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0438\u0445 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>TriangulateRiverQuad<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t\u2026  \t\tif (!cell.IsUnderwater) { \t\t\tbool reversed = cell.IncomingRiver == direction; \t\t\tTriangulateRiverQuad( \t\t\t\tcenterL, centerR, m.v2, m.v4, \t\t\t\tcell.RiverSurfaceY, 0.4f, reversed, indices \t\t\t); \t\t\tTriangulateRiverQuad( \t\t\t\tm.v2, m.v4, e.v2, e.v4, \t\t\t\tcell.RiverSurfaceY, 0.6f, reversed, indices \t\t\t); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0432\u043e\u0434\u043e\u043f\u0430\u0434\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0433\u043b\u0443\u0431\u043e\u043a\u0443\u044e \u0432\u043e\u0434\u0443.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWaterfallInWater ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y1, float y2, float waterY, Vector3 indices \t) { \t\t\u2026 \t\trivers.AddQuadCellData(indices, weights1, weights2); \t}<\/code><\/pre>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>TriangulateConnection<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0440\u0435\u043a \u0438 \u0432\u043e\u0434\u043e\u043f\u0430\u0434\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateConnection ( \t\tHexDirection direction, HexCell cell, EdgeVertices e1 \t) { \t\t\u2026  \t\tif (hasRiver) { \t\t\te2.v3.y = neighbor.StreamBedY; \t\t\tVector3 indices; \t\t\tindices.x = indices.z = cell.Index; \t\t\tindices.y = neighbor.Index;  \t\t\tif (!cell.IsUnderwater) { \t\t\t\tif (!neighbor.IsUnderwater) { \t\t\t\t\tTriangulateRiverQuad( \t\t\t\t\t\te1.v2, e1.v4, e2.v2, e2.v4, \t\t\t\t\t\tcell.RiverSurfaceY, neighbor.RiverSurfaceY, 0.8f, \t\t\t\t\t\tcell.HasIncomingRiver &amp;&amp; cell.IncomingRiver == direction, \t\t\t\t\t\tindices \t\t\t\t\t); \t\t\t\t} \t\t\t\telse if (cell.Elevation &gt; neighbor.WaterLevel) { \t\t\t\t\tTriangulateWaterfallInWater( \t\t\t\t\t\te1.v2, e1.v4, e2.v2, e2.v4, \t\t\t\t\t\tcell.RiverSurfaceY, neighbor.RiverSurfaceY, \t\t\t\t\t\tneighbor.WaterSurfaceY, indices \t\t\t\t\t); \t\t\t\t} \t\t\t} \t\t\telse if ( \t\t\t\t!neighbor.IsUnderwater &amp;&amp; \t\t\t\tneighbor.Elevation &gt; cell.WaterLevel \t\t\t) { \t\t\t\tTriangulateWaterfallInWater( \t\t\t\t\te2.v4, e2.v2, e1.v4, e1.v2, \t\t\t\t\tneighbor.RiverSurfaceY, cell.RiverSurfaceY, \t\t\t\t\tcell.WaterSurfaceY, indices \t\t\t\t); \t\t\t} \t\t}  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0412 \u0448\u0435\u0439\u0434\u0435\u0440 <em>River<\/em> \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0442\u0435 \u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u0438 \u0432 \u0448\u0435\u0439\u0434\u0435\u0440 <em>Road<\/em>.<\/p>\n<pre><code>\t\t#pragma surface surf Standard alpha vertex:vert \t\t#pragma target 3.0  \t\t#include \"Water.cginc\" \t\t#include \"HexCellData.cginc\"  \t\tsampler2D _MainTex;  \t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t\tfloat visibility; \t\t};  \t\t\u2026  \t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data);  \t\t\tfloat4 cell0 = GetCellData(v, 0); \t\t\tfloat4 cell1 = GetCellData(v, 1);  \t\t\tdata.visibility = cell0.x * v.color.x + cell1.x * v.color.y; \t\t\tdata.visibility = lerp(0.25, 1, data.visibility); \t\t}  \t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfloat river = River(IN.uv_MainTex, _MainTex); \t\t\t \t\t\tfixed4 c = saturate(_Color + river); \t\t\to.Albedo = c.rgb * IN.visibility; \t\t\t\u2026 \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1ef\/db6\/76a\/1efdb676afe28b61b73f317d25158505.png\"><\/div>\n<p>  <i>\u0420\u0435\u043a\u0438 \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-20\/visibility-of-roads-and-water\/visibility-of-roads-and-water.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043d\u043e \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043e\u043d\u0430 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442. \u0417\u0434\u0430\u043d\u0438\u044f, \u0444\u0435\u0440\u043c\u044b \u0438 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438\u0437 \u043f\u0440\u0435\u0444\u0430\u0431\u043e\u0432, \u0430 \u043d\u0435 \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0447\u0435\u0435\u043a \u0438 \u0441\u043c\u0435\u0448\u0430\u0442\u044c \u0432\u0435\u0441\u0430 \u0441 \u0438\u0445 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u041c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u0438 XZ \u043c\u0438\u0440\u0430 \u0432 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0447\u0435\u0435\u043a. \u042d\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u044f\u0434\u0430\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0435\u043c\u0443 \u043a\u043e\u0434 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d. \u0412 \u043d\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0451\u0431\u0440\u0430\u043c\u0438. \u0414\u043b\u044f \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0435\u0447\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451.<\/p>\n<p>  \u041c\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0441 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438 \u043f\u043e\u0432\u0435\u0440\u0445 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u042d\u0442\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0437\u0430\u0434\u0430\u0451\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u044f\u0447\u0435\u0435\u043a 2\u00d72. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e X \u0438 Z \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a \u0432 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f.<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430. \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e X \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0435\u0451 \u043a\u0440\u0430\u0441\u043d\u043e\u043c \u043a\u0430\u043d\u0430\u043b\u0435, \u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e Z \u2014 \u0432 \u0437\u0435\u043b\u0451\u043d\u043e\u043c \u043a\u0430\u043d\u0430\u043b\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u044f\u0447\u0435\u0435\u043a 2\u00d72, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0442 0 \u0438 2. \u0422\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u043c \u043a\u0430\u043d\u0430\u043b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443. \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0447\u0451\u0442\u043a\u0438\u0435 \u043a\u0440\u0430\u044f \u044f\u0447\u0435\u0435\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/795\/63c\/d3c\/79563cd3c22e7aa2ca66e40b5ffe3f7e.png\"><\/div>\n<p>  <i>\u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u0435\u0442\u043a\u0438.<\/i><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u0435\u0451 <em>Wrap Mode<\/em> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>Repeat<\/em>, \u043a\u0430\u043a \u0438 \u0443 \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441\u0435\u0442\u043a\u0438. \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f <em>Blend Mode<\/em> \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>Point<\/em>. \u0422\u0430\u043a\u0436\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c <em>Compression<\/em>, \u0447\u0442\u043e\u0431\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0438\u0441\u043a\u0430\u0436\u0430\u043b\u0438\u0441\u044c. \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0440\u0435\u0436\u0438\u043c <em>sRGB<\/em>, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0435 \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432. \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b mip-\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/866\/aa9\/de3\/866aa9de36f6953f54d4fb8197fb75ff.png\"><\/div>\n<p>  <i>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/i><\/p>\n<h3>\u0428\u0435\u0439\u0434\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e<\/h3>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440 <em>Feature<\/em>, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440 \u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e <em>HexCellData<\/em> \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0438 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0443\u0447\u0442\u0451\u043c \u0435\u0433\u043e \u0432 \u0446\u0432\u0435\u0442\u0435. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0434\u0435\u0441\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>GetCellData<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0448\u0435\u0439 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0432 \u043c\u0438\u0440\u0435. \u041d\u043e \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0432\u043d\u043e\u0439 1.<\/p>\n<pre><code>Shader \"Custom\/Feature\" { \tProperties { \t\t_Color (\"Color\", Color) = (1,1,1,1) \t\t_MainTex (\"Albedo (RGB)\", 2D) = \"white\" {} \t\t_Glossiness (\"Smoothness\", Range(0,1)) = 0.5 \t\t_Metallic (\"Metallic\", Range(0,1)) = 0.0 \t\t[NoTilingOffset] _GridCoordinates (\"Grid Coordinates\", 2D) = \"white\" {} \t} \tSubShader { \t\tTags { \"RenderType\"=\"Opaque\" } \t\tLOD 200 \t\t \t\tCGPROGRAM \t\t#pragma surface surf Standard fullforwardshadows vertex:vert \t\t#pragma target 3.0  \t\t#include \"..\/HexCellData.cginc\"  \t\tsampler2D _MainTex, _GridCoordinates;  \t\thalf _Glossiness; \t\thalf _Metallic; \t\tfixed4 _Color;  \t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t\tfloat visibility; \t\t};  \t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data); \t\t\tfloat3 pos = mul(unity_ObjectToWorld, v.vertex);  \t\t\tdata.visibility = 1; \t\t}  \t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; \t\t\to.Albedo = c.rgb * IN.visibility; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t} \t\tENDCG \t} \tFallBack \"Diffuse\" }<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0432\u0441\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440, \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043c \u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u0435\u0442\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e35\/fad\/546\/e35fad5469e6c9e5c6a31626ba182ec8.png\"><\/div>\n<p>  <i>\u0423\u0440\u0431\u0430\u043d\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0441\u0435\u0442\u043a\u0438.<\/i><\/p>\n<h3>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u0435\u0442\u043a\u0438 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435, \u043d\u0430\u043c \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f <code>tex2Dlod<\/code> \u0441 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u2014 \u044d\u0442\u043e \u043f\u043e\u0437\u0438\u0446\u0438\u044f XZ \u043c\u0438\u0440\u0430. \u0414\u0432\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e.<\/p>\n<pre><code>\t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data); \t\t\tfloat3 pos = mul(unity_ObjectToWorld, v.vertex);  \t\t\tfloat4 gridUV = float4(pos.xz, 0, 0);  \t\t\tdata.visibility = 1; \t\t}<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 <em>Terrain<\/em>, \u0440\u0430\u0441\u0442\u044f\u043d\u0435\u043c UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u0447\u0442\u043e\u0431\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0438\u043c\u0435\u043b\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0441\u0435\u0442\u043a\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432.<\/p>\n<pre><code>\t\t\tfloat4 gridUV = float4(pos.xz, 0, 0); \t\t\tgridUV.x *= 1 \/ (4 * 8.66025404); \t\t\tgridUV.y *= 1 \/ (2 * 15.0);<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u044f\u0447\u0435\u0435\u043a 2\u00d72 \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f, \u0432\u0437\u044f\u0432 \u043e\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u043e\u0435 \u0432\u043d\u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u042d\u0442\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0431\u0430\u0437\u0438\u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code>\t\t\tfloat4 gridUV = float4(pos.xz, 0, 0); \t\t\tgridUV.x *= 1 \/ (4 * 8.66025404); \t\t\tgridUV.y *= 1 \/ (2 * 15.0); \t\t\tfloat2 cellDataCoordinates = floor(gridUV.xy);<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f, \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0435\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n<pre><code>\t\t\tfloat2 cellDataCoordinates = \t\t\t\tfloor(gridUV.xy) + tex2Dlod(_GridCoordinates, gridUV).rg;<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u0441\u0435\u0442\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 2\u00d72, \u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u044b \u0432\u0434\u0432\u043e\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0432\u043e\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b.<\/p>\n<pre><code>\t\t\tfloat2 cellDataCoordinates = \t\t\t\tfloor(gridUV.xy) + tex2Dlod(_GridCoordinates, gridUV).rg; \t\t\tcellDataCoordinates *= 2;<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b XZ \u0441\u0435\u0442\u043a\u0438 \u044f\u0447\u0435\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0432\u0448\u0438\u0441\u044c \u043a \u0446\u0435\u043d\u0442\u0440\u0430\u043c \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u0430 \u0437\u0430\u0442\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 include-\u0444\u0430\u0439\u043b <em>HexCellData<\/em> \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0439\u043c\u0451\u0442\u0441\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c.<\/p>\n<pre><code>float4 GetCellData (float2 cellDataCoordinates) { \tfloat2 uv = cellDataCoordinates + 0.5; \tuv.x *= _HexCellData_TexelSize.x; \tuv.y *= _HexCellData_TexelSize.y; \treturn tex2Dlod(_HexCellData, float4(uv, 0, 0)); }<\/code><\/pre>\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 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 <em>Feature<\/em>.<\/p>\n<pre><code>\t\t\tcellDataCoordinates *= 2;  \t\t\tdata.visibility = GetCellData(cellDataCoordinates).x; \t\t\tdata.visibility = lerp(0.25, 1, data.visibility);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1ed\/9c9\/7ed\/1ed9c97ed37aa88aaee6c0efd9d075d7.png\"><\/div>\n<p>  <i>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e.<\/i><\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446-\u0442\u043e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0442\u0440\u044f\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0438\u0434\u0438\u043c\u044b \u0432\u0441\u0435\u0433\u0434\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u0442\u043e \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0449\u0435\u0433\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u044f\u0447\u0435\u0439\u043a\u0438, \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u0438\u043c \u044f\u0447\u0435\u0435\u043a. \u041d\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0442\u0430\u043a \u043c\u0430\u043b\u044b, \u0447\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u043e\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438, \u0434\u0430\u0436\u0435 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u0432\u0435\u0440\u0448\u0438\u043d \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u0451\u0448\u0435\u0432, \u043d\u043e \u043d\u0435\u0438\u0434\u0435\u0430\u043b\u0435\u043d. \u0411\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0435\u043d, \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u043e\u043b\u0435\u0431\u043b\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/421\/1c7\/f7d\/4211c7f7dea80bbbd13664586074c43a.png\"><\/div>\n<p>  <i>\u0421\u0442\u0435\u043d\u044b \u0441 \u043c\u0435\u043d\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u0442\u0435\u043d \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0438\u0445 \u043c\u0435\u0448\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438 \u0434\u043b\u044f \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0431\u0430\u0448\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0430\u0431\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0430\u0441 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f. \u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u043d\u0430\u043c\u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438 \u0441\u0442\u0435\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0443\u0435\u043c \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u0445 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-20\/features\/features.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 21: \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0432\u0441\u0451 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/li>\n<li>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438.<\/li>\n<li>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e.<\/li>\n<li>\u0417\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043e\u0442\u0440\u044f\u0434\u044b \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438.<\/li>\n<\/ul>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0442\u0443\u043c\u0430\u043d \u0432\u043e\u0439\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0443\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/81d\/40e\/bff\/81d40ebff615fc7c4e39a15d88da016d.jpg\"><\/div>\n<p>  <i>\u041c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043c\u0438\u0440.<\/i><\/p>\n<h2>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  \u0421\u043c\u044b\u0441\u043b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c\u0438, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438. \u041e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0435 \u0437\u0430\u0442\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/h3>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u043c, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442 \u043b\u0438 \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c, \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u0441 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430 \u0441\u0435\u0442\u043a\u0443. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <em>HEX_MAP_EDIT_MODE<\/em>, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0431 \u044d\u0442\u043e\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u043c \u0441\u043b\u043e\u0432\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432, \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0435\u0433\u043e \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>Shader.EnableKeyWord<\/code> \u0438 <code>Shader.DisableKeyword<\/code>. \u0411\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432 <code>HexGameUI.SetEditMode<\/code> \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic void SetEditMode (bool toggle) { \t\tenabled = !toggle; \t\tgrid.ShowUI(!toggle); \t\tgrid.ClearPath(); \t\tif (toggle) { \t\t\tShader.EnableKeyword(\"HEX_MAP_EDIT_MODE\"); \t\t} \t\telse { \t\t\tShader.DisableKeyword(\"HEX_MAP_EDIT_MODE\"); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0428\u0435\u0439\u0434\u0435\u0440\u044b \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u041a\u043e\u0433\u0434\u0430 <em>HEX_MAP_EDIT_MODE<\/em> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e, \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c. \u042d\u0442\u043e \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0432\u043d\u043e\u0439 1. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u043e include-\u0444\u0430\u0439\u043b\u0430 <em>HexCellData<\/em> \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430.<\/p>\n<pre><code>sampler2D _HexCellData; float4 _HexCellData_TexelSize;  float4 FilterCellData (float4 data) { \t#if defined(HEX_MAP_EDIT_MODE) \t\tdata.x = 1; \t#endif \treturn data; }<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0431\u0435\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>GetCellData<\/code> \u043f\u0435\u0440\u0435\u0434 \u0435\u0433\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u043e\u043c.<\/p>\n<pre><code>float4 GetCellData (appdata_full v, int index) { \t\u2026 \treturn FilterCellData(data); }  float4 GetCellData (float2 cellDataCoordinates) { \t\u2026 \treturn FilterCellData(tex2Dlod(_HexCellData, float4(uv, 0, 0))); }<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0432\u0441\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 multi_compile \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <em>HEX_MAP_EDIT_MODE<\/em> \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u044b <em>Estuary<\/em>, <em>Feature<\/em>, <em>River<\/em>, <em>Road<\/em>, <em>Terrain<\/em>, <em>Water<\/em> \u0438 <em>Water Shore<\/em>, \u043c\u0435\u0436\u0434\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 target \u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u043e\u0439 include.<\/p>\n<pre><code>\t\t#pragma multi_compile _ HEX_MAP_EDIT_MODE<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u0442\u0443\u043c\u0430\u043d \u0432\u043e\u0439\u043d\u044b \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0442\u044c.<\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-21\/seeing-everything-in-edit-mode\/seeing-everything-in-edit-mode.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a<\/h2>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438. \u041e\u043d\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u0438\u0445 \u0443\u0432\u0438\u0434\u0438\u0442 \u043e\u0442\u0440\u044f\u0434. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043c\u043e\u0436\u0435\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0442\u0440\u044f\u0434.<\/p>\n<h3>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCell<\/code> \u043e\u0431\u0449\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>IsExplored<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic bool IsExplored { get; set; }<\/code><\/pre>\n<p>  \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e <code>HexCell<\/code>. \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0435\u0442\u0442\u0435\u0440 \u0447\u0430\u0441\u0442\u043d\u044b\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic bool IsExplored { get; private set; }<\/code><\/pre>\n<p>  \u0412 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f, \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0439, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 <code>IsExplored<\/code> \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>true<\/code>. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0447\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443 \u043a\u0430\u043a \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u0443\u044e, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e 1. \u042d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>RefreshVisibility<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void IncreaseVisibility () { \t\tvisibility += 1; \t\tif (visibility == 1) { \t\t\tIsExplored = true; \t\t\tShaderData.RefreshVisibility(this); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u043c<\/h3>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u044f\u0447\u0435\u0435\u043a, \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u0434\u0430\u043d\u043d\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. <code>HexCellShaderData.RefreshVisibility<\/code> \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 R \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u0430\u043d\u0430\u043b\u0435 G \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"cs\">\tpublic void RefreshVisibility (HexCell cell) { \t\tint index = cell.Index; \t\tcellTextureData[index].r = cell.IsVisible ? (byte)255 : (byte)0; \t\tcellTextureData[index].g = cell.IsExplored ? (byte)255 : (byte)0; \t\tenabled = true; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0427\u0451\u0440\u043d\u044b\u0439 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u044b. \u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u0447\u0451\u0440\u043d\u044b\u043c. \u041d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u043c, \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>FilterCellData<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u044b\u0432\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code>float4 FilterCellData (float4 data) { \t#if defined(HEX_MAP_EDIT_MODE) \t\tdata.xy = 1; \t#endif \treturn data; }<\/code><\/pre>\n<p>  \u0428\u0435\u0439\u0434\u0435\u0440 <em>Terrain<\/em> \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 <code>visibility<\/code> \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u0447\u0442\u043e\u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u043e.<\/p>\n<pre><code>\t\tstruct Input { \t\t\tfloat4 color : COLOR; \t\t\tfloat3 worldPos; \t\t\tfloat3 terrain; \t\t\tfloat4 visibility; \t\t};<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a <code>data.visibility.xyz<\/code>.<\/p>\n<pre><code>\t\tvoid vert (inout appdata_full v, out Input data) { \t\t\t\u2026 \t\t\tdata.visibility.xyz = lerp(0.25, 1, data.visibility.xyz); \t\t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 <code>data.visibility.w<\/code>. \u042d\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u0445, \u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 Y \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code>\t\t\tdata.visibility.xyz = lerp(0.25, 1, data.visibility.xyz); \t\t\tdata.visibility.w = \t\t\t\tcell0.y * v.color.x + cell1.y * v.color.y + cell2.y * v.color.z;<\/code><\/pre>\n<p>  \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0447\u0435\u0440\u0435\u0437 <code>IN.visibility.w<\/code>. \u0423\u0447\u0442\u0451\u043c \u0435\u0433\u043e \u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 albedo.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\t\u2026  \t\t\tfloat explored = IN.visibility.w; \t\t\to.Albedo = c.rgb * grid * _Color * explored; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b2d\/de4\/c18\/b2dde4c1831a9ecc637550b2b8e2e134.png\"><\/div>\n<p>  <i>\u041d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u0442\u0435\u043f\u0435\u0440\u044c \u0447\u0451\u0440\u043d\u044b\u0439.<\/i><\/p>\n<p>  \u0420\u0435\u043b\u044c\u0435\u0444 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u0435\u0435\u0442 \u0447\u0451\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442. \u041d\u043e \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0434\u043e\u0440\u043e\u0433\u0438 \u0438 \u0432\u043e\u0434\u0443 \u044d\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u043b\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u0430\u0440\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u0430\u0440\u0442 \u0434\u043e 3. \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 <code>SaveLoadMenu<\/code> \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443.<\/p>\n<pre><code class=\"cs\">\tconst int mapFileVersion = 3;<\/code><\/pre>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432 <code>Save<\/code> \u0438 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432 <code>Load<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid Save (string path) { \t\tusing ( \t\t\tBinaryWriter writer = \t\t\tnew BinaryWriter(File.Open(path, FileMode.Create)) \t\t) { \t\t\twriter.Write(mapFileVersion); \t\t\thexGrid.Save(writer); \t\t} \t}  \tvoid Load (string path) { \t\tif (!File.Exists(path)) { \t\t\tDebug.LogError(\"File does not exist \" + path); \t\t\treturn; \t\t} \t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t\tint header = reader.ReadInt32(); \t\t\tif (header &lt;= mapFileVersion) { \t\t\t\thexGrid.Load(reader, header); \t\t\t\tHexMapCamera.ValidatePosition(); \t\t\t} \t\t\telse { \t\t\t\tDebug.LogWarning(\"Unknown map format \" + header); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0448\u0430\u0433\u0430 <code>HexCell.Save<\/code> \u043c\u044b \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic void Save (BinaryWriter writer) { \t\t\u2026 \t\twriter.Write(IsExplored); \t}<\/code><\/pre>\n<p>  \u0418 \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 <code>Load<\/code>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>RefreshVisibility<\/code> \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader) { \t\t\u2026  \t\tIsExplored = reader.ReadBoolean(); \t\tShaderData.RefreshVisibility(this); \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 3. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u00ab\u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u0430\u044f\u00bb. \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>Load<\/code> \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader, int header) { \t\t\u2026  \t\tIsExplored = header &gt;= 3 ? reader.ReadBoolean() : false; \t\tShaderData.RefreshVisibility(this); \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>HexGrid.Load<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 <code>HexCell.Load<\/code> \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader, int header) { \t\t\u2026  \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Load(reader, header); \t\t} \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u0430\u0440\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u044f\u0447\u0435\u0435\u043a \u0431\u0443\u0434\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-21\/exploring-cells\/exploring-cells.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438<\/h2>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0451\u0440\u043d\u044b\u043c \u0440\u0435\u043b\u044c\u0435\u0444\u043e\u043c. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u044b\u043b\u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0443\u044e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0435\u0451 \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 Unity \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u0438 \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0444\u043e\u043d\u0443, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0445 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c\u0438.<\/p>\n<h3>\u0414\u0435\u043b\u0430\u0435\u043c \u0440\u0435\u043b\u044c\u0435\u0444 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0447\u0451\u0440\u043d\u044b\u043c<\/h3>\n<p>  \u0425\u043e\u0442\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u0438\u043c\u0435\u0435\u0442 \u0447\u0451\u0440\u043d\u044b\u0439 \u0446\u0432\u0435\u0442, \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0435\u0433\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u0438\u043c\u0435\u0435\u0442 specular lighting. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0442\u043e\u0432\u043e-\u0447\u0451\u0440\u043d\u044b\u043c. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438, \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c specular color \u043d\u0430 \u0447\u0451\u0440\u043d\u044b\u0439. \u042d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u043e specular, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 metallic. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0448\u0435\u0439\u0434\u0435\u0440\u0430 <em>Terrain<\/em> \u043d\u0430 specular.<\/p>\n<p>  \u0417\u0430\u043c\u0435\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <em>_Metallic<\/em> \u043d\u0430 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <em>_Specular<\/em>. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u043e (0.2, 0.2, 0.2). \u0422\u0430\u043a \u043c\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u0432\u0438\u0434\u0443 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 metallic.<\/p>\n<pre><code>\tProperties { \t\t_Color (\"Color\", Color) = (1,1,1,1) \t\t_MainTex (\"Terrain Texture Array\", 2DArray) = \"white\" {} \t\t_GridTex (\"Grid Texture\", 2D) = \"white\" {} \t\t_Glossiness (\"Smoothness\", Range(0,1)) = 0.5 \/\/\t\t_Metallic (\"Metallic\", Range(0,1)) = 0.0 \t\t_Specular (\"Specular\", Color) = (0.2, 0.2, 0.2) \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u0430. \u0426\u0432\u0435\u0442 specular \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a <code>fixed3<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e.<\/p>\n<pre><code>\t\thalf _Glossiness; \/\/\t\thalf _Metallic; \t\tfixed3 _Specular; \t\tfixed4 _Color;<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c pragma surface surf \u0441\u043e <em>Standard<\/em> \u043d\u0430 <em>StandardSpecular<\/em>. \u042d\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 Unity \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u044b \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c specular.<\/p>\n<pre><code>\t\t#pragma surface surf StandardSpecular fullforwardshadows vertex:vert<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>surf<\/code> \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u043c\u0435\u043b \u0442\u0438\u043f <code>SurfaceOutputStandardSpecular<\/code>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 <code>o.Metallic<\/code>, \u0430 <code>o.Specular<\/code>.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandardSpecular o) { \t\t\t\u2026  \t\t\tfloat explored = IN.visibility.w; \t\t\to.Albedo = c.rgb * grid * _Color * explored; \/\/\t\t\to.Metallic = _Metallic; \t\t\to.Specular = _Specular; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0442\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u0441\u0432\u0435\u0442\u044b, \u0443\u0447\u0442\u044f <code>explored<\/code> \u0432 \u0446\u0432\u0435\u0442\u0435 specular.<\/p>\n<pre><code>\t\t\to.Specular = _Specular * explored;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/289\/d05\/128\/289d0512816a7d6f692b0e7639e882eb.png\"><\/div>\n<p>  <i>\u041d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u0431\u0435\u0437 \u043e\u0442\u0440\u0430\u0436\u0451\u043d\u043d\u043e\u0433\u043e \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f.<\/i><\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043c\u0430\u0442\u043e\u0432\u043e-\u0447\u0451\u0440\u043d\u044b\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u043f\u043e\u0434 \u043a\u0430\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0443\u0433\u043b\u043e\u043c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0437\u0435\u0440\u043a\u0430\u043b\u043e, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0440\u0435\u043b\u044c\u0435\u0444 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043a\u0430\u0439\u0431\u043e\u043a\u0441.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0437\u0435\u0440\u043a\u0430\u043b\u0430\u043c\u0438?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u043c \u0424\u0440\u0435\u043d\u0435\u043b\u044f. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u0441\u043c. \u0432 \u0441\u0435\u0440\u0438\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432 <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/rendering\/part-1\/\">Rendering<\/a>.<\/div>\n<\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/255\/d63\/627\/255d636278eb947c27117d6c596a9489.png\"><\/div>\n<p>  <i>\u041d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u0438\u0445 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u0442\u0435\u043d\u0451\u043d\u043d\u044b\u043c. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>explored<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443 occlusion, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0430\u043a \u043c\u0430\u0441\u043a\u0443 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/p>\n<pre><code>\t\t\tfloat explored = IN.visibility.w; \t\t\to.Albedo = c.rgb * grid * _Color * explored; \t\t\to.Specular = _Specular * explored; \t\t\to.Smoothness = _Glossiness; \t\t\to.Occlusion = explored; \t\t\to.Alpha = c.a;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/118\/ab6\/a5a\/118ab6a5a91711eda2165433a7b99513.png\"><\/div>\n<p>  <i>\u041d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0431\u0435\u0437 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u0439.<\/i><\/p>\n<h3>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0444\u043e\u043d\u0443<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0451 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u043d\u0443. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448\u0430 \u043a\u0430\u043c\u0435\u0440\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u0441\u0432\u0435\u0440\u0445\u0443, \u0444\u043e\u043d \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0441\u0435\u0440\u044b\u043c. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u0443 <em>Terrain<\/em>, \u043a\u0430\u043a\u043e\u0439 \u0446\u0432\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <em>_BackgroundColor<\/em>, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0451\u0440\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.<\/p>\n<pre><code>\tProperties { \t\t\u2026 \t\t_BackgroundColor (\"Background Color\", Color) = (0,0,0) \t} \t \t\u2026 \t \t\thalf _Glossiness; \t\tfixed3 _Specular; \t\tfixed4 _Color; \t\thalf3 _BackgroundColor;<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0446\u0432\u0435\u0442, \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a\u0430\u043a emissive light. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435\u043c <code>o.Emission<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043c\u0438\u043d\u0443\u0441 explored.<\/p>\n<pre><code>\t\t\to.Occlusion = explored; \t\t\to.Emission = _BackgroundColor * (1 -  explored);<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043a\u0430\u0439\u0431\u043e\u043a\u0441 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432. \u0412 \u0446\u0435\u043b\u043e\u043c \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0440\u0430\u0441\u043d\u043e\u0432\u0430\u0442\u044b\u0439 \u0441\u0435\u0440\u044b\u0439. \u041f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f <em>Hex Color<\/em> \u043a\u043e\u0434 68615BFF.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/eeb\/307\/7dd\/eeb3077dd097a7649575a371cbb361f6.png\"><\/div>\n<p>  <i>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0441 \u0441\u0435\u0440\u044b\u043c \u0444\u043e\u043d\u043e\u0432\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c.<\/i><\/p>\n<p>  \u0412 \u0446\u0435\u043b\u043e\u043c \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0445\u043e\u0442\u044f \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0442\u044c, \u043a\u0443\u0434\u0430 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u0430\u0431\u044b\u0435 \u0441\u0438\u043b\u0443\u044d\u0442\u044b. \u0427\u0442\u043e\u0431\u044b \u0438\u0445 \u043d\u0435 \u043c\u043e\u0433 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0433\u0440\u043e\u043a, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u043c\u0435\u0440\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043a\u0430\u0439\u0431\u043e\u043a\u0441\u0430 \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 68615BFF.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7b9\/8cc\/ec9\/7b98ccec9228ac333cc23ec19cc6f28b.png\"><\/div>\n<p>  <i>\u041a\u0430\u043c\u0435\u0440\u0430 \u0441\u043e \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u0444\u043e\u043d\u0430.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043a\u0430\u0439\u0431\u043e\u043a\u0441?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f environmental lighting \u043a\u0430\u0440\u0442\u044b. \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u0446\u0432\u0435\u0442, \u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b.<\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0439\u0442\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0444\u043e\u043d\u043e\u043c \u0438 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u0412\u044b\u0441\u043e\u043a\u0438\u0439 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0442\u0435\u043d\u044f\u0442\u044c \u043d\u0438\u0437\u043a\u0438\u0439 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u043f\u0440\u0438 \u043d\u0438\u0437\u043a\u0438\u0445 \u0443\u0433\u043b\u0430\u0445 \u043a\u0430\u043c\u0435\u0440\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442 \u0442\u0435\u043d\u0438 \u043d\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435. \u041d\u043e \u044d\u0442\u0438\u043c\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0447\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f88\/764\/d67\/f88764d67aec0bf90267d273e1a248d5.png\"><\/div>\n<p>  <i>\u041d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0432\u0438\u0434\u043d\u043e.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430?<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0435\u043b\u044c\u0435\u0444 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c, \u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0431\u0443\u0444\u0435\u0440 \u0433\u043b\u0443\u0431\u0438\u043d. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0438 \u0441 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\u044e \u0448\u0435\u0439\u0434\u0435\u0440\u0430. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u044d\u043a\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0432\u0435\u0442\u0430 \u0444\u043e\u043d\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043c\u0438\u0440\u0430, \u0442\u043e \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0433\u043b\u0430 \u043e\u0431\u0437\u043e\u0440\u0430 \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u0438\u0440\u0435.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430<\/h3>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0443 \u043d\u0430\u0441 \u0441\u043a\u0440\u044b\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0448 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041d\u0430 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/282\/c0c\/a0f\/282c0ca0fb55bf26ee0bb1d43cadd42f.png\"><\/div>\n<p>  <i>\u041f\u043e\u043a\u0430 \u0441\u043a\u0440\u044b\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u043b\u044c\u0435\u0444.<\/i><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0448\u0435\u0439\u0434\u0435\u0440 <em>Feature<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u043c \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <em>Terrain<\/em>. \u041f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u0435\u0433\u043e \u0432 specular-\u0448\u0435\u0439\u0434\u0435\u0440 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430. \u041d\u0430\u0447\u043d\u0451\u043c \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432.<\/p>\n<pre><code>\tProperties { \t\t_Color (\"Color\", Color) = (1,1,1,1) \t\t_MainTex (\"Albedo (RGB)\", 2D) = \"white\" {} \t\t_Glossiness (\"Smoothness\", Range(0,1)) = 0.5 \/\/\t\t_Metallic (\"Metallic\", Range(0,1)) = 0.0 \t\t_Specular (\"Specular\", Color) = (0.2, 0.2, 0.2) \t\t_BackgroundColor (\"Background Color\", Color) = (0,0,0) \t\t[NoScaleOffset] _GridCoordinates (\"Grid Coordinates\", 2D) = \"white\" {} \t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 pragma surface \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<pre><code>\t\t#pragma surface surf StandardSpecular fullforwardshadows vertex:vert \t\t\t \t\t\u2026  \t\thalf _Glossiness; \/\/\t\thalf _Metallic; \t\tfixed3 _Specular; \t\tfixed4 _Color; \t\thalf3 _BackgroundColor;<\/code><\/pre>\n<p>  <code>visibility<\/code> \u0442\u043e\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u0422\u0430\u043a \u043a\u0430\u043a <em>Feature<\/em> \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 float. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u0432\u0430.<\/p>\n<pre><code>\t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t\tfloat2 visibility; \t\t};<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>vert<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 <code>data.visibility.x<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c <code>data.visibility.y<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code>\t\tvoid vert (inout appdata_full v, out Input data) { \t\t\t\u2026  \t\t\tfloat4 cellData = GetCellData(cellDataCoordinates); \t\t\tdata.visibility.x = cellData.x; \t\t\tdata.visibility.x = lerp(0.25, 1, data.visibility.x); \t\t\tdata.visibility.y = cellData.y; \t\t}<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>surf<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u0430\u043a \u0438 <em>Terrain<\/em>.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandardSpecular o) { \t\t\tfixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; \t\t\tfloat explored = IN.visibility.y; \t\t\to.Albedo = c.rgb * (IN.visibility.x * explored); \/\/\t\t\to.Metallic = _Metallic; \t\t\to.Specular = _Specular * explored; \t\t\to.Smoothness = _Glossiness; \t\t\to.Occlusion = explored; \t\t\to.Emission = _BackgroundColor * (1 -  explored); \t\t\to.Alpha = c.a; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d13\/863\/dc6\/d13863dc60bbb92750cd5c8f8b69d82b.png\"><\/div>\n<p>  <i>\u0421\u043a\u0440\u044b\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/i><\/p>\n<h3>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432\u043e\u0434\u0443<\/h3>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0438\u0434\u0443\u0442 \u0448\u0435\u0439\u0434\u0435\u0440\u044b <em>Water<\/em> \u0438 <em>Water Shore<\/em>. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0445 \u0432 specular-\u0448\u0435\u0439\u0434\u0435\u0440\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u043c \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0446\u0432\u0435\u0442 \u0444\u043e\u043d\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0435 \u0448\u0435\u0439\u0434\u0435\u0440\u044b.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a <code>visibility<\/code> \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>vert<\/code>. \u041e\u0431\u0430 \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0440\u0451\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code>\t\tstruct Input { \t\t\t\u2026 \t\t\tfloat2 visibility; \t\t};  \t\t\u2026  \t\tvoid vert (inout appdata_full v, out Input data) { \t\t\t\u2026  \t\t\tdata.visibility.x = \t\t\t\tcell0.x * v.color.x + cell1.x * v.color.y + cell2.x * v.color.z; \t\t\tdata.visibility.x = lerp(0.25, 1, data.visibility.x); \t\t\tdata.visibility.y = \t\t\t\tcell0.y * v.color.x + cell1.y * v.color.y + cell2.y * v.color.z; \t\t}<\/code><\/pre>\n<p>  <em>Water<\/em> \u0438 <em>Water Shore<\/em> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442 \u0432 <code>surf<\/code> \u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u043d\u043e \u0437\u0430\u0434\u0430\u044e\u0442 \u0441\u0432\u043e\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b, \u0443\u0447\u0442\u0451\u043c <code>explore<\/code> \u0432 \u0430\u043b\u044c\u0444\u0430-\u043a\u0430\u043d\u0430\u043b\u0435, \u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c emission.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandardSpecular o) { \t\t\t\u2026  \t\t\tfloat explored = IN.visibility.y; \t\t\to.Albedo = c.rgb * IN.visibility.x; \t\t\to.Specular = _Specular * explored; \t\t\to.Smoothness = _Glossiness; \t\t\to.Occlusion = explored; \t\t\to.Alpha = c.a * explored; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/15a\/e39\/390\/15ae39390ccbe91f3d12f068992a7c14.png\"><\/div>\n<p>  <i>\u0421\u043a\u0440\u044b\u0442\u0430\u044f \u0432\u043e\u0434\u0430.<\/i><\/p>\n<h3>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0443\u0441\u0442\u044c\u044f, \u0440\u0435\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438<\/h3>\n<p>  \u0423 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u044b <em>Estuary<\/em>, <em>River<\/em> \u0438 <em>Road<\/em>. \u0412\u0441\u0435 \u0442\u0440\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c\u0438 \u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u0432\u0443\u0445 \u044f\u0447\u0435\u0435\u043a. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0445 \u0432\u0441\u0435 \u043d\u0430 specular, \u0430 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>visibility<\/code> \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code>\t\tstruct Input { \t\t\t\u2026 \t\t\tfloat2 visibility; \t\t};  \t\t\u2026 \t\t \t\tvoid vert (inout appdata_full v, out Input data) { \t\t\t\u2026  \t\t\tdata.visibility.x = cell0.x * v.color.x + cell1.x * v.color.y; \t\t\tdata.visibility.x = lerp(0.25, 1, data.visibility.x); \t\t\tdata.visibility.y = cell0.y * v.color.x + cell1.y * v.color.y; \t\t}<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>surf<\/code> \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 <em>Estuary<\/em> \u0438 <em>River<\/em> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0412 \u043e\u0431\u0430 \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandardSpecular o) { \t\t\t\u2026  \t\t\tfloat explored = IN.visibility.y; \t\t\tfixed4 c = saturate(_Color + water); \t\t\to.Albedo = c.rgb * IN.visibility.x; \t\t\to.Specular = _Specular * explored; \t\t\to.Smoothness = _Glossiness; \t\t\to.Occlusion = explored; \t\t\to.Alpha = c.a * explored; \t\t}<\/code><\/pre>\n<p>  \u0428\u0435\u0439\u0434\u0435\u0440 <em>Road<\/em> \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u044f.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandardSpecular o) { \t\t\tfloat4 noise = tex2D(_MainTex, IN.worldPos.xz * 0.025); \t\t\tfixed4 c = _Color * ((noise.y * 0.75 + 0.25) * IN.visibility.x); \t\t\tfloat blend = IN.uv_MainTex.x; \t\t\tblend *= noise.x + 0.5; \t\t\tblend = smoothstep(0.4, 0.7, blend);  \t\t\tfloat explored = IN.visibility.y; \t\t\to.Albedo = c.rgb; \t\t\to.Specular = _Specular * explored; \t\t\to.Smoothness = _Glossiness; \t\t\to.Occlusion = explored; \t\t\to.Alpha = blend * explored; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1c6\/1d2\/c65\/1c61d2c652b436385b42188c39476c14.png\"><\/div>\n<p>  <i>\u0421\u043a\u0440\u044b\u0442\u043e \u0432\u0441\u0451.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-21\/hiding-unknown-cells\/hiding-unknown-cells.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0418\u0437\u0431\u0435\u0433\u0430\u0435\u043c \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438<\/h2>\n<p>  \u0425\u043e\u0442\u044f \u0432\u0441\u0451 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0441\u043a\u0440\u044b\u0442\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u043a\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043f\u0443\u0442\u0438. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0442\u0440\u044f\u0434\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u0441\u043a\u0432\u043e\u0437\u044c \u043d\u0438\u0445, \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f, \u043a\u0430\u043a\u0438\u043c \u043f\u0443\u0442\u0451\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u0440\u044f\u0434\u044b \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ca9\/eb9\/f22\/ca9eb9f22cd36b917bd5f0c38028bce7.png\"><\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u044f\u0447\u0435\u0439\u043a\u0430\u043c.<\/i><\/p>\n<h3>\u041e\u0442\u0440\u044f\u0434\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0435\u043c \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 <code>HexGrid<\/code> \u0432 <code>HexUnit<\/code>. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043e\u0442\u0440\u044f\u0434\u043e\u0432 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexUnit<\/code> \u043e\u0431\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <code>GetMoveCost<\/code> \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u0415\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u043a\u0438\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u0437\u0430\u0442\u0440\u0430\u0442 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 <code>HexGrid.Search<\/code> \u0432 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0438\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<pre><code class=\"cs\">\tpublic int GetMoveCost ( \t\tHexCell fromCell, HexCell toCell, HexDirection direction) \t{ \t\tHexEdgeType edgeType = fromCell.GetEdgeType(toCell); \t\tif (edgeType == HexEdgeType.Cliff) { \t\t\tcontinue; \t\t} \t\tint moveCost; \t\tif (fromCell.HasRoadThroughEdge(direction)) { \t\t\tmoveCost = 1; \t\t} \t\telse if (fromCell.Walled != toCell.Walled) { \t\t\tcontinue; \t\t} \t\telse { \t\t\tmoveCost = edgeType == HexEdgeType.Flat ? 5 : 10; \t\t\tmoveCost += \t\t\t\ttoCell.UrbanLevel + toCell.FarmLevel + toCell.PlantLevel; \t\t} \t}<\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u0421\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0445\u043e\u0434\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>continue<\/code>, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442. \u0415\u0441\u043b\u0438 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic int GetMoveCost ( \t\tHexCell fromCell, HexCell toCell, HexDirection direction) \t{ \t\tHexEdgeType edgeType = fromCell.GetEdgeType(toCell); \t\tif (edgeType == HexEdgeType.Cliff) { \t\t\treturn -1; \t\t} \t\tint moveCost; \t\tif (fromCell.HasRoadThroughEdge(direction)) { \t\t\tmoveCost = 1; \t\t} \t\telse if (fromCell.Walled != toCell.Walled) { \t\t\treturn -1; \t\t} \t\telse { \t\t\tmoveCost = edgeType == HexEdgeType.Flat ? 5 : 10; \t\t\tmoveCost += \t\t\t\ttoCell.UrbanLevel + toCell.FarmLevel + toCell.PlantLevel; \t\t} \t\treturn moveCost; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043f\u0440\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u043f\u0443\u0442\u0438 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u043d\u043e \u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043e\u0442\u0440\u044f\u0434. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>HexGameUI.DoPathFinding<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid DoPathfinding () { \t\tif (UpdateCurrentCell()) { \t\t\tif (currentCell &amp;&amp; selectedUnit.IsValidDestination(currentCell)) { \t\t\t\tgrid.FindPath(selectedUnit.Location, currentCell, selectedUnit); \t\t\t} \t\t\telse { \t\t\t\tgrid.ClearPath(); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u044f\u0434\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexUnit<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Speed<\/code>. \u041f\u043e\u043a\u0430 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 24.<\/p>\n<pre><code class=\"cs\">\tpublic int Speed { \t\tget { \t\t\treturn 24; \t\t} \t}<\/code><\/pre>\n<p>  \u0412 <code>HexGrid<\/code> \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>FindPath<\/code> \u0438 <code>Search<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u0438 \u043d\u0430\u0448\u0435\u043c \u043d\u043e\u0432\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic void FindPath (HexCell fromCell, HexCell toCell, HexUnit unit) { \t\tClearPath(); \t\tcurrentPathFrom = fromCell; \t\tcurrentPathTo = toCell; \t\tcurrentPathExists = Search(fromCell, toCell, unit); \t\tShowPath(unit.Speed); \t} \t \tbool Search (HexCell fromCell, HexCell toCell, HexUnit unit) { \t\tint speed = unit.Speed; \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443\u0434\u0430\u043b\u0438\u043c \u0438\u0437 <code>Search<\/code> \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u0441\u0435\u0434\u043d\u044e\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0438 \u043a\u0430\u043a\u043e\u0432\u044b \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>HexUnit.IsValidDestination<\/code> \u0438 <code>HexUnit.GetMoveCost<\/code>. \u0411\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443, \u0435\u0441\u043b\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\t\t\tfor (HexDirection d = HexDirection.NE; d &lt;= HexDirection.NW; d++) { \t\t\t\tHexCell neighbor = current.GetNeighbor(d); \t\t\t\tif ( \t\t\t\t\tneighbor == null || \t\t\t\t\tneighbor.SearchPhase &gt; searchFrontierPhase \t\t\t\t) { \t\t\t\t\tcontinue; \t\t\t\t} \/\/\t\t\t\tif (neighbor.IsUnderwater || neighbor.Unit) { \/\/\t\t\t\t\tcontinue; \/\/\t\t\t\t} \/\/\t\t\t\tHexEdgeType edgeType = current.GetEdgeType(neighbor); \/\/\t\t\t\tif (edgeType == HexEdgeType.Cliff) { \/\/\t\t\t\t\tcontinue; \/\/\t\t\t\t} \/\/\t\t\t\tint moveCost; \/\/\t\t\t\tif (current.HasRoadThroughEdge(d)) { \/\/\t\t\t\t\tmoveCost = 1; \/\/\t\t\t\t} \/\/\t\t\t\telse if (current.Walled != neighbor.Walled) { \/\/\t\t\t\t\tcontinue; \/\/\t\t\t\t} \/\/\t\t\t\telse { \/\/\t\t\t\t\tmoveCost = edgeType == HexEdgeType.Flat ? 5 : 10; \/\/\t\t\t\t\tmoveCost += neighbor.UrbanLevel + neighbor.FarmLevel + \/\/\t\t\t\t\t\tneighbor.PlantLevel; \/\/\t\t\t\t} \t\t\t\tif (!unit.IsValidDestination(neighbor)) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\tint moveCost = unit.GetMoveCost(current, neighbor, d); \t\t\t\tif (moveCost &lt; 0) { \t\t\t\t\tcontinue; \t\t\t\t}  \t\t\t\tint distance = current.Distance + moveCost; \t\t\t\tint turn = (distance - 1) \/ speed; \t\t\t\tif (turn &gt; currentTurn) { \t\t\t\t\tdistance = turn * speed + moveCost; \t\t\t\t}  \t\t\t\t\u2026 \t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041e\u0431\u0445\u043e\u0434 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b <code>HexUnit.IsValidDestination<\/code> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b, \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0430 \u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic bool IsValidDestination (HexCell cell) { \t\treturn cell.IsExplored &amp;&amp; !cell.IsUnderwater &amp;&amp; !cell.Unit; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a84\/831\/2c6\/a848312c6231a168a966e4cdafc2df38.png\"><\/div>\n<p>  <i>\u0411\u043e\u043b\u044c\u0448\u0435 \u043e\u0442\u0440\u044f\u0434\u044b \u043d\u0435 \u0441\u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438, \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043e\u0442\u0440\u044f\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u0445 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0440\u043e\u043b\u0438 \u0431\u0430\u0440\u044c\u0435\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0434\u043b\u0438\u043d\u044f\u044e\u0442 \u043f\u0443\u0442\u044c \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0434\u0435\u043b\u0430\u044e\u0442 \u0435\u0433\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c. \u041d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c \u043e\u0442\u0440\u044f\u0434\u044b \u043a \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u0440\u0435\u043b\u044c\u0435\u0444\u0443, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0443\u0442\u044c?<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0443\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u043d\u0435\u0433\u043e \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u043b\u044c\u0437\u044f. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435, \u043d\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u044f\u0434\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c \u0438 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u044b\u043c. \u041b\u0443\u0447\u0448\u0435 \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u0438 \u043d\u0435 \u043c\u0443\u0434\u0440\u0438\u0442\u044c.<\/p>\n<p>  \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0437\u0430 \u043e\u0434\u0438\u043d \u0445\u043e\u0434, \u0442\u043e \u0434\u043b\u044f \u0434\u043e\u043b\u0433\u0438\u0445 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0439 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0443\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0445\u043e\u0434\u0443. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u0440\u044f\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0445\u043e\u0434\u0443 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0443\u0442\u044c, \u0435\u0441\u043b\u0438 \u043e\u043d \u0432\u0434\u0440\u0443\u0433 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f.<\/p><\/div>\n<\/div>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-21\/avoiding-unexplored-cells\/avoiding-unexplored-cells.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 22: \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u041f\u043b\u0430\u0432\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c.<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/li>\n<li>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u044b.<\/li>\n<\/ul>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b, \u043c\u044b \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u0443\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2d2\/c4a\/793\/2d2c4a7939e75fe09298f96ff6125478.jpg\"><\/div>\n<p>  <i>\u0427\u0442\u043e\u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435, \u0432\u0437\u0431\u0438\u0440\u0430\u0439\u0441\u044f \u0432\u044b\u0448\u0435.<\/i><\/p>\n<h2>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/h2>\n<p>  \u042f\u0447\u0435\u0439\u043a\u0430 \u0438\u043b\u0438 \u0432\u0438\u0434\u0438\u043c\u0430, \u0438\u043b\u0438 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u0438\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u044f\u0434\u0430, \u0438\u043b\u0438 \u043d\u0435\u0442. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043e\u0442\u0440\u044f\u0434\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0435\u0433\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043f\u0440\u044b\u0433\u0438\u0432\u0430\u0435\u0442 \u043e\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a \u044f\u0447\u0435\u0439\u043a\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u0445 \u0435\u0433\u043e \u044f\u0447\u0435\u0435\u043a \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0435\u0437\u043a\u043e. \u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u044f\u0434\u0430 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u044b\u043c, \u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u044b.<\/p>\n<p>  \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u043e. \u041f\u043e\u043f\u0430\u0434\u0430\u044f \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0432\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e, \u0430 \u0443\u0445\u043e\u0434\u044f \u0438\u0437 \u043d\u0435\u0451, \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0437\u0430\u0442\u0435\u043c\u043d\u044f\u0442\u044c\u0441\u044f. \u0410 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u0432\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCellShaderData<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043b\u0430\u0432\u043d\u044b\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic bool ImmediateMode { get; set; }<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u0414\u0430\u0436\u0435 \u043f\u0440\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u043b\u0430\u0432\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u043c\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0444\u0444\u0435\u043a\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u044b\u0439. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f <code>HexCellShaderData<\/code>. \u041f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043e\u043a \u044f\u0447\u0435\u0435\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043d \u0431\u044b\u043b \u043f\u0443\u0441\u0442\u044b\u043c.<\/p>\n<pre><code class=\"cs\">using System.Collections.Generic; using UnityEngine;  public class HexCellShaderData : MonoBehaviour {  \tTexture2D cellTexture; \tColor32[] cellTextureData;  \tList&lt;HexCell&gt; transitioningCells = new List&lt;HexCell&gt;();  \tpublic bool ImmediateMode { get; set; }  \tpublic void Initialize (int x, int z) { \t\t\u2026  \t\ttransitioningCells.Clear(); \t\tenabled = true; \t} \t \t\u2026 }<\/code><\/pre>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0432 <code>RefreshVisibility<\/code> \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u042d\u0442\u043e \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tpublic void RefreshVisibility (HexCell cell) { \t\tint index = cell.Index; \t\tif (ImmediateMode) { \t\t\tcellTextureData[index].r = cell.IsVisible ? (byte)255 : (byte)0; \t\t\tcellTextureData[index].g = cell.IsExplored ? (byte)255 : (byte)0; \t\t} \t\telse { \t\t\ttransitioningCells.Add(cell); \t\t} \t\tenabled = true; \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0435, \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c \u0441 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435.<\/p>\n<h3>\u041e\u0431\u0445\u043e\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0432 \u0446\u0438\u043a\u043b\u0435<\/h3>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 255 \u0438\u043b\u0438 0, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\/\u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e. \u041e\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c. \u0425\u043e\u0440\u043e\u0448\u0438\u043c \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c\u0438 \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e\u043c \u0438\u0433\u0440\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u0435\u0451 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tconst float transitionSpeed = 255f;<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 <code>LateUpdate<\/code> \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u0435\u043b\u044c\u0442\u0443, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u043d\u043e\u0436\u0438\u0442\u044c \u0434\u0435\u043b\u044c\u0442\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 integer, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f. \u0420\u0435\u0437\u043a\u043e\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0430\u0434\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0435\u043b\u044c\u0442\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 255.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u043f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d, \u043f\u043e\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0447\u0442\u043e-\u0442\u043e \u0435\u0441\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tvoid LateUpdate () { \t\tint delta = (int)(Time.deltaTime * transitionSpeed);  \t\tcellTexture.SetPixels32(cellTextureData); \t\tcellTexture.Apply(); \t\tenabled = transitioningCells.Count &gt; 0; \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0430\u0434\u0440\u043e\u0432. \u0412 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0438 \u0441 \u043d\u0438\u0437\u043a\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u043d\u0430\u043c \u0434\u0435\u043b\u044c\u0442\u0443, \u0440\u0430\u0432\u043d\u0443\u044e 0. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c, \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0435\u043b\u044c\u0442\u044b \u0440\u0430\u0432\u043d\u044b\u043c 1.<\/p>\n<pre><code class=\"cs\">\t\tint delta = (int)(Time.deltaTime * transitionSpeed); \t\tif (delta == 0) { \t\t\tdelta = 1; \t\t}<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u0434\u0435\u043b\u044c\u0442\u0443, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043e\u0439\u0442\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434 <code>UpdateCellData<\/code>, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0438 \u0434\u0435\u043b\u044c\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\t\tint delta = (int)(Time.deltaTime * transitionSpeed); \t\tif (delta == 0) { \t\t\tdelta = 1; \t\t} \t\tfor (int i = 0; i &lt; transitioningCells.Count; i++) { \t\t\tUpdateCellData(transitioningCells[i], delta); \t\t}<\/code><\/pre>\n<p>  \u0412 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c\u0441\u044f. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u043b\u0438 \u0435\u0449\u0451 \u043f\u0435\u0440\u0435\u0445\u043e\u0434. \u041a\u043e\u0433\u0434\u0430 \u043e\u043d \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0451\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0434\u0435\u043a\u0440\u0435\u043c\u0435\u043d\u0442 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\t\tfor (int i = 0; i &lt; transitioningCells.Count; i++) { \t\t\tif (!UpdateCellData(transitioningCells[i], delta)) { \t\t\t\ttransitioningCells.RemoveAt(i--); \t\t\t} \t\t}<\/code><\/pre>\n<p>  \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0435 \u0432\u0430\u0436\u0435\u043d. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443 \u043f\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0438\u043d\u0434\u0435\u043a\u0441\u0443, \u0447\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u043e \u0431\u044b <code>RemoveAt<\/code> \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0451. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e.<\/p>\n<pre><code class=\"cs\">\t\t\tif (!UpdateCellData(transitioningCells[i], delta)) { \t\t\t\ttransitioningCells[i--] = \t\t\t\t\ttransitioningCells[transitioningCells.Count - 1]; \t\t\t\ttransitioningCells.RemoveAt(transitioningCells.Count - 1); \t\t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>UpdateCellData<\/code>. \u0414\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0435\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u00ab\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u00bb.<\/p>\n<pre><code class=\"cs\">\tbool UpdateCellData (HexCell cell, int delta) { \t\tint index = cell.Index; \t\tColor32 data = cellTextureData[index]; \t\tbool stillUpdating = false;  \t\tcellTextureData[index] = data; \t\treturn stillUpdating; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0430, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0430\u044f\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0438\u043b\u0438 \u0443\u0436\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0432\u0448\u0430\u044f \u0435\u0433\u043e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438. \u0415\u0441\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0430, \u043d\u043e \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 G \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e 255, \u0442\u043e \u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\t\tbool stillUpdating = false;  \t\tif (cell.IsExplored &amp;&amp; data.g &lt; 255) { \t\t\tstillUpdating = true; \t\t}  \t\tcellTextureData[index] = data;<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434, \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e G \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u0435\u043b\u044c\u0442\u0443. \u0410\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043e\u043d\u0438 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u0432 integer. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0443\u043c\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 integer, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 byte.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.IsExplored &amp;&amp; data.g &lt; 255) { \t\t\tstillUpdating = true; \t\t\tint t = data.g + delta; \t\t\tdata.g = (byte)t; \t\t}<\/code><\/pre>\n<p>  \u041d\u043e \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442 255.<\/p>\n<pre><code class=\"cs\">\t\t\tint t = data.g + delta; \t\t\tdata.g = t &gt;= 255 ? (byte)255 : (byte)t;<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 R.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.IsExplored &amp;&amp; data.g &lt; 255) { \t\t\t\u2026 \t\t}  \t\tif (cell.IsVisible &amp;&amp; data.r &lt; 255) { \t\t\tstillUpdating = true; \t\t\tint t = data.r + delta; \t\t\tdata.r = t &gt;= 255 ? (byte)255 : (byte)t; \t\t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u044f\u0447\u0435\u0439\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043d\u043e\u0432\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0439, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043b\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 R. \u042d\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430, \u043d\u043e R \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.IsVisible) { \t\t\tif (data.r &lt; 255) { \t\t\t\tstillUpdating = true; \t\t\t\tint t = data.r + delta; \t\t\t\tdata.r = t &gt;= 255 ? (byte)255 : (byte)t; \t\t\t} \t\t} \t\telse if (data.r &gt; 0) { \t\t\tstillUpdating = true; \t\t\tint t = data.r - delta; \t\t\tdata.r = t &lt; 0 ? (byte)0 : (byte)t; \t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>UpdateCellData<\/code> \u0433\u043e\u0442\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u043e.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 62.5%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/HugeRingedAfricanelephant\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/i><\/p>\n<h3>\u0417\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430<\/h3>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442, \u043d\u043e \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u042d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u0432\u0438\u0434\u0438\u043c\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u044f\u0434\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0437\u0430 \u043a\u0430\u0434\u0440, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430\u043c \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043b\u0438\u0448\u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u044d\u0442\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0438, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 <code>RefreshVisibility<\/code> \u0437\u0430\u0442\u0440\u0430\u0442\u0435\u043d, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0435\u043a. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u0430\u043d\u0430\u043b\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c B. \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0435\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 255, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e 255.<\/p>\n<pre><code class=\"cs\">\tpublic void RefreshVisibility (HexCell cell) { \t\tint index = cell.Index; \t\tif (ImmediateMode) { \t\t\tcellTextureData[index].r = cell.IsVisible ? (byte)255 : (byte)0; \t\t\tcellTextureData[index].g = cell.IsExplored ? (byte)255 : (byte)0; \t\t} \t\telse if (cellTextureData[index].b != 255) { \t\t\tcellTextureData[index].b = 255; \t\t\ttransitioningCells.Add(cell); \t\t} \t\tenabled = true; \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u0443\u043b\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 B \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tbool UpdateCellData (HexCell cell, int delta) { \t\t\u2026  \t\tif (!stillUpdating) { \t\t\tdata.b = 0; \t\t} \t\tcellTextureData[index] = data; \t\treturn stillUpdating; \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 62.5%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/PoorCheerfulApe\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u0431\u0435\u0437 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432.<\/i><\/p>\n<h3>\u041c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c<\/h3>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u044b\u0435, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043a\u0430\u0440\u0442\u044b. \u042d\u0442\u043e \u043d\u0435\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438 \u0443\u0436\u0435 \u0432\u0438\u0434\u0438\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0437\u0434\u0435\u0441\u044c \u043d\u0435\u0443\u043c\u0435\u0441\u0442\u0435\u043d. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0434\u043b\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u044c \u0438\u0433\u0440\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u044f\u0447\u0435\u0435\u043a \u0438 \u043e\u0442\u0440\u044f\u0434\u043e\u0432 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0432 <code>HexGrid.Load<\/code> \u0432 \u0440\u0435\u0436\u0438\u043c \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader, int header) { \t\t\u2026  \t\tcellShaderData.ImmediateMode = true;  \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Load(reader, header); \t\t} \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0440\u0435\u0436\u0438\u043c\u0430 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430, \u043a\u0430\u043a\u043e\u0439 \u0431\u044b \u043e\u043d\u0430 \u043d\u0438 \u0431\u044b\u043b\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043e\u043d\u0430 \u0443\u0436\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u043e\u043f\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader, int header) { \t\t\u2026 \t\t \t\tbool originalImmediateMode = cellShaderData.ImmediateMode; \t\tcellShaderData.ImmediateMode = true;  \t\t\u2026  \t\tcellShaderData.ImmediateMode = originalImmediateMode; \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-22\/visibility-transitions\/visibility-transitions.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0430\u044f \u043e\u0442 \u0432\u044b\u0441\u043e\u0442\u044b<\/h2>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0442\u0440\u044f\u0434\u043e\u0432 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0440\u0430\u0432\u043d\u0443\u044e \u0442\u0440\u0451\u043c, \u043d\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u043d\u0430 \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e \u0434\u0432\u0443\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: \u0438\u043b\u0438 \u043d\u0430\u043c \u043c\u0435\u0448\u0430\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0435, \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b \u0438\u043b\u0438 \u0434\u0430\u043b\u0451\u043a. \u0412 \u043d\u0430\u0448\u0435\u0439 \u0438\u0433\u0440\u0435 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0417\u0435\u043c\u043b\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0437\u043e\u0440 \u043f\u043b\u0430\u043d\u0435\u0442\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043b\u0430\u043d\u0435\u0442\u0443 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0444\u0435\u0440\u043e\u0439, \u0442\u043e \u0447\u0435\u043c \u0432\u044b\u0448\u0435 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u0437\u043e\u0440\u0430, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0442\u043e \u0435\u0441\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u044b\u0441\u043e\u0442\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/071\/788\/208\/0717882082a42e92b14e158876c6e28b.png\"><\/div>\n<p>  <i>\u0413\u043e\u0440\u0438\u0437\u043e\u043d\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u044b\u0441\u043e\u0442\u044b \u0442\u043e\u0447\u043a\u0438 \u043e\u0431\u0437\u043e\u0440\u0430.<\/i><\/p>\n<p>  \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430\u0448\u0438\u0445 \u043e\u0442\u0440\u044f\u0434\u043e\u0432 \u0438\u043c\u0438\u0442\u0438\u0440\u0443\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u0440\u0438\u0432\u0438\u0437\u043d\u043e\u0439 \u0417\u0435\u043c\u043b\u0438. \u0414\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0445 \u043e\u0431\u0437\u043e\u0440\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u043b\u0430\u043d\u0435\u0442\u044b \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u043a\u0430\u0440\u0442\u044b. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0442\u0430\u043a\u043e\u0432\u043e \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435. \u041d\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u043e\u0439 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u0439, \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435 \u0442\u0443\u043c\u0430\u043d\u043e\u043c \u0432\u043e\u0439\u043d\u044b. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u044f \u0444\u0438\u0437\u0438\u043a\u0443, \u043b\u0435\u0436\u0430\u0449\u0443\u044e \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u043b\u0430\u0434\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u0437\u043e\u0440\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0442\u0434\u0430\u043b\u044f\u0435\u0442 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u0437\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0438\u0437\u043a\u0438\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u041d\u043e \u043f\u043e\u043a\u0430 \u043c\u044b \u044d\u0442\u043e \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438.<\/p>\n<h3>\u0412\u044b\u0441\u043e\u0442\u0430 \u0434\u043b\u044f \u043e\u0431\u0437\u043e\u0440\u0430<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443 \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 \u0438\u043b\u0438 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u0443\u0445\u043e\u043f\u0443\u0442\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0438\u043b\u0438 \u0432\u043e\u0434\u043d\u0430\u044f. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 <code>HexCell<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic int ViewElevation { \t\tget { \t\t\treturn elevation &gt;= waterLevel ? elevation : waterLevel; \t\t} \t}<\/code><\/pre>\n<p>  \u041d\u043e \u0435\u0441\u043b\u0438 \u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043b\u0438\u044f\u0435\u0442 \u0432\u044b\u0441\u043e\u0442\u0430, \u0442\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u043e\u0431\u0437\u043e\u0440\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e. \u0422\u0430\u043a \u043a\u0430\u043a \u044f\u0447\u0435\u0439\u043a\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0438\u043b\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043e\u0442\u0440\u044f\u0434\u043e\u0432, \u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c. \u042d\u0442\u0443 \u0437\u0430\u0434\u0430\u0447\u0443 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0438\u0442\u044c \u0441\u0430\u043c\u0430 \u044f\u0447\u0435\u0439\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0443\u0441\u0442\u044c \u043e\u043d\u0430 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 <code>HexCellShaderData<\/code>. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 <code>HexCellShaderData<\/code> \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434 <code>ViewElevationChanged<\/code>. \u0411\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0438 <code>HexCell.Elevation<\/code>, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic int Elevation { \t\tget { \t\t\treturn elevation; \t\t} \t\tset { \t\t\tif (elevation == value) { \t\t\t\treturn; \t\t\t} \t\t\tint originalViewElevation = ViewElevation; \t\t\televation = value; \t\t\tif (ViewElevation != originalViewElevation) { \t\t\t\tShaderData.ViewElevationChanged(); \t\t\t} \t\t\t\u2026 \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a <code>WaterLevel<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic int WaterLevel { \t\tget { \t\t\treturn waterLevel; \t\t} \t\tset { \t\t\tif (waterLevel == value) { \t\t\t\treturn; \t\t\t} \t\t\tint originalViewElevation = ViewElevation; \t\t\twaterLevel = value; \t\t\tif (ViewElevation != originalViewElevation) { \t\t\t\tShaderData.ViewElevationChanged(); \t\t\t} \t\t\tValidateRivers(); \t\t\tRefresh(); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>HexCellShaderData.ViewElevationChanged<\/code>. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u2014 \u044d\u0442\u043e \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u0440\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0447\u0435\u0435\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0438, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0441\u0431\u0440\u043e\u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u0443\u043b\u0435\u0432\u043e \u043f\u043e\u043b\u0435 \u0434\u043b\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u0412\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0435\u043c\u0443 true \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u0412\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u044f\u0447\u0435\u0435\u043a \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u0431\u0440\u043e\u0441\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<pre><code class=\"cs\">\tbool needsVisibilityReset;  \t\u2026  \tpublic void ViewElevationChanged () { \t\tneedsVisibilityReset = true; \t\tenabled = true; \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u043a \u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f, \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443 <code>HexCellShaderData<\/code> \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u0443 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c <code>HexGrid<\/code>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>HexCellShaderData<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u0442\u043a\u0443. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 <code>LateUpdate<\/code>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0441\u0431\u0440\u043e\u0441.<\/p>\n<pre><code class=\"cs\">\tpublic HexGrid Grid { get; set; } \t\t\t\t\t\t \t\u2026  \tvoid LateUpdate () { \t\tif (needsVisibilityReset) { \t\t\tneedsVisibilityReset = false; \t\t\tGrid.ResetVisibility(); \t\t}  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a <code>HexGrid<\/code>: \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0441\u0435\u0442\u043a\u0443 \u0432 <code>HexGrid.Awake<\/code> \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource; \t\tHexMetrics.InitializeHashGrid(seed); \t\tHexUnit.unitPrefab = unitPrefab; \t\tcellShaderData = gameObject.AddComponent&lt;HexCellShaderData&gt;(); \t\tcellShaderData.Grid = this; \t\tCreateMap(cellCountX, cellCountZ); \t}<\/code><\/pre>\n<p>  <code>HexGrid<\/code> \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>ResetVisibility<\/code> \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a. \u041f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u0431\u0440\u043e\u0441\u0430 \u0438\u043c \u0441\u0430\u043c\u0438\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic void ResetVisibility () { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].ResetVisibility(); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>HexCell<\/code> \u043c\u0435\u0442\u043e\u0434 <code>ResetVisibilty<\/code>. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u0443\u043b\u044f\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0443\u043b\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic void ResetVisibility () { \t\tif (visibility &gt; 0) { \t\t\tvisibility = 0; \t\t\tShaderData.RefreshVisibility(this); \t\t} \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u0431\u0440\u043e\u0441\u0430 \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 <code>HexGrid.ResetVisibility<\/code> \u0441\u043d\u043e\u0432\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u043e \u0432\u0441\u0435\u043c \u043e\u0442\u0440\u044f\u0434\u0430\u043c, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0440\u044f\u0434\u0430. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>VisionRange<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void ResetVisibility () { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].ResetVisibility(); \t\t} \t\tfor (int i = 0; i &lt; units.Count; i++) { \t\t\tHexUnit unit = units[i]; \t\t\tIncreaseVisibility(unit.Location, unit.VisionRange); \t\t} \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433-\u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 <code>HexUnit.visionRange<\/code> \u0432 <code>HexUnit.VisionRange<\/code> \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u0435\u0433\u043e \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e. \u041f\u043e\u043a\u0430 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 3, \u043d\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic int VisionRange { \t\tget { \t\t\treturn 3; \t\t} \t}<\/code><\/pre>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442\u044b \u043e\u0431\u0437\u043e\u0440\u0430 \u044f\u0447\u0435\u0435\u043a. \u041d\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u0431\u0440\u043e\u0441 <code>HexGrid.OnEnable<\/code> \u043f\u0440\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid OnEnable () { \t\tif (!HexMetrics.noiseSource) { \t\t\t\u2026 \t\t\tResetVisibility(); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043e\u0441\u0442\u0430\u0432\u0430\u044f\u0441\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play.<\/p>\n<h3>\u0420\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442<\/h3>\n<p>  \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f <code>HexGrid.GetVisibleCells<\/code>. \u0427\u0442\u043e\u0431\u044b \u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043b\u0438\u044f\u043b\u0430 \u0432\u044b\u0441\u043e\u0442\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443 \u043e\u0431\u0437\u043e\u0440\u0430 <code>fromCell<\/code>, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c. \u0422\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e.<\/p>\n<pre><code class=\"cs\">\tList&lt;HexCell&gt; GetVisibleCells (HexCell fromCell, int range) { \t\t\u2026  \t\trange = fromCell.ViewElevation; \t\tfromCell.SearchPhase = searchFrontierPhase; \t\tfromCell.Distance = 0; \t\tsearchFrontier.Enqueue(fromCell); \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/727\/032\/6d3\/7270326d379796f2b4f2f3c3ca65512c.png\"><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u0443 \u043a\u0430\u043a \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/i><\/p>\n<h3>\u041f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/h3>\n<p>  \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u043e\u0431\u0437\u043e\u0440\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u0435. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0442\u0443 \u0436\u0435 \u0432\u044b\u0441\u043e\u0442\u0443, \u0447\u0442\u043e \u0438 \u0442\u043e\u0447\u043a\u0430 \u043e\u0431\u0437\u043e\u0440\u0430, \u0442\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0437\u0430 \u043d\u0438\u043c\u0438 \u043d\u0438\u0437\u043a\u0438\u0445 \u044f\u0447\u0435\u0435\u043a. \u041f\u043e\u043a\u0430 \u043d\u0438\u0447\u0442\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/de8\/7be\/a6f\/de87bea6f4b88cd61765450a63f738f9.png\"><\/div>\n<p>  <i>\u041e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u0435\u0442.<\/i><\/p>\n<p>  \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u0430 \u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0441\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435\u043c \u043b\u0443\u0447\u0435\u0439, \u043d\u043e \u043e\u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u0442\u0430\u043b\u0430 \u0431\u044b \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e\u0439 \u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0433\u043b\u0430 \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0435\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0431\u044b\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438, \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c\u0438 \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u0434\u043b\u044f \u0438\u0433\u0440\u043e\u043a\u043e\u0432.<\/p>\n<p>  \u041d\u0430\u0448\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u2014 \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443 \u043e\u0431\u0437\u043e\u0440\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a \u043f\u043e\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u044d\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438, \u0410 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f, \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0437\u0430 \u043d\u0438\u043c\u0438 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\t\t\t\tint distance = current.Distance + 1; \t\t\t\tif (distance + neighbor.ViewElevation &gt; range) { \t\t\t\t\tcontinue; \t\t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/774\/44c\/efe\/77444cefe82d428ee32e094213e82a1a.png\"><\/div>\n<p>  <i>\u0412\u044b\u0441\u043e\u043a\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u043e\u0431\u0437\u043e\u0440.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043c\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0434\u0430\u043b\u0435\u043a\u0435?<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0433\u043e\u0440\u043d\u043e\u0439 \u0433\u0440\u044f\u0434\u043e\u0439, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0445 \u0441\u043a\u043b\u043e\u043d\u044b, \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0441 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0432\u0438\u0434\u0438\u043c. \u041d\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0433\u043e\u0440\u044b \u0441\u0432\u0435\u0440\u0445\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0438 \u0441\u0430\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0438.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u041d\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u043c \u0437\u0430 \u0443\u0433\u043b\u044b<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442 \u043e\u0431\u0437\u043e\u0440 \u043d\u0430 \u043d\u0438\u0437\u043a\u0438\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u043d\u0438\u043a\u0430\u0435\u0442 \u0441\u043a\u0432\u043e\u0437\u044c \u043d\u0438\u0445, \u0445\u043e\u0442\u044f \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u0443\u0442\u044c \u043a \u044d\u0442\u0438\u043c \u044f\u0447\u0435\u0439\u043a\u0430\u043c, \u043e\u0431\u0445\u043e\u0434\u044f \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u043d\u0430\u0448\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0433\u0438\u0431\u0430\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0435 \u043f\u0443\u0442\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0443\u0442\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u043b\u0438\u043d\u043d\u0435\u0435 \u043d\u0443\u0436\u043d\u043e\u0433\u043e.<\/p>\n<pre><code class=\"cs\">\t\tHexCoordinates fromCoordinates = fromCell.coordinates; \t\twhile (searchFrontier.Count &gt; 0) { \t\t\t\u2026  \t\t\tfor (HexDirection d = HexDirection.NE; d &lt;= HexDirection.NW; d++) { \t\t\t\t\u2026  \t\t\t\tint distance = current.Distance + 1; \t\t\t\tif (distance + neighbor.ViewElevation &gt; range || \t\t\t\t\tdistance &gt; fromCoordinates.DistanceTo(neighbor.coordinates) \t\t\t\t) { \t\t\t\t\tcontinue; \t\t\t\t}  \t\t\t\t\u2026 \t\t\t} \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/30d\/bfa\/1c2\/30dbfa1c2df2fb6119249f00cdc3d8d8.png\"><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0435 \u043f\u0443\u0442\u0438.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432. \u0414\u043b\u044f \u0431\u043b\u0438\u0436\u043d\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a \u043d\u0438\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0435 \u043f\u0443\u0442\u0438. \u0411\u043e\u043b\u0435\u0435 \u0434\u0430\u043b\u0451\u043a\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u0443\u0442\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u0434\u0430\u043b\u044c\u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043e\u0433\u0438\u0431\u0430\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0435\u0441\u043b\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438, \u0430 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0432\u044b\u0441\u043e\u0442 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u0438.<\/p>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043e\u0431\u0437\u043e\u0440\u0430, \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u043a \u043d\u0435\u0439 \u0432\u044b\u0441\u043e\u0442\u0443 \u043e\u0431\u0437\u043e\u0440\u0430. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u044f\u0434\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0435\u0433\u043e \u0440\u043e\u0441\u0442, \u0432\u044b\u0441\u043e\u0442\u0443 \u043f\u043e\u043b\u0451\u0442\u0430 \u0438\u043b\u0438 \u0440\u0430\u0437\u0432\u0435\u0434\u044b\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\t\trange += fromCell.ViewElevation;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3ff\/1ce\/a2b\/3ff1cea2b833bda69990576fa8323aec.png\"><\/div>\n<p>  <i>\u041e\u0431\u0437\u043e\u0440 \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043d\u0430 \u043d\u0438\u0437\u043a\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043e\u0431\u0437\u043e\u0440\u0430.<\/i><\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0437\u0440\u0435\u043d\u0438\u044e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043f\u043e \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u043c\u0443 \u043f\u0443\u0442\u0438 \u0434\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0435\u043a \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u0447\u043a\u0438 \u043e\u0431\u0437\u043e\u0440\u0430. \u041a\u043e\u0433\u0434\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u0435 \u043f\u0443\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0451. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438, \u043e\u0431\u0437\u043e\u0440\u0443 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442, \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0447\u0435\u0441\u043a\u0438 \u0446\u0435\u043d\u043d\u044b\u043c\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432?<\/b><\/p>\n<div class=\"spoiler_text\">\u042f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c, \u043d\u043e \u043c\u043e\u0436\u043d\u043e. \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0433\u0443\u0441\u0442\u044b\u0435 \u043b\u0435\u0441\u0430 \u0438\u043b\u0438 \u0441\u0442\u0435\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0435 \u0432\u044b\u0441\u043e\u0442\u044b. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0433\u0440\u043e\u043a\u0443 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/div>\n<\/div>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-22\/vision-based-on-elevation\/vision-based-on-elevation.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u042f\u0447\u0435\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c<\/h2>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0451\u0432 \u043a\u0430\u0440\u0442\u044b. \u0420\u0435\u043b\u044c\u0435\u0444 \u0440\u0435\u0437\u043a\u043e \u0438 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043a\u043e\u043d\u0447\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u044f\u0447\u0435\u0435\u043a \u043d\u0430 \u043a\u0440\u0430\u044e \u043d\u0435\u0442 \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/587\/217\/fbb\/587217fbb248ae8a13759a33e22e25ff.png\"><\/div>\n<p>  <i>\u0417\u0430\u043c\u0435\u0442\u043d\u044b\u0439 \u043a\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u044b.<\/i><\/p>\n<p>  \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0438 \u043a\u0440\u0430\u0451\u0432 \u043a\u0430\u0440\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0433\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043e\u0441\u043e\u0431\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0440\u0451\u0431\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0438\u0445 \u043d\u0435\u0442 \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430, \u0438 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u043e. \u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u0430\u0440\u0442\u044b \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u043c\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0440\u044f\u0434\u0430. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043c\u0435\u0447\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043f\u0440\u043e\u0449\u0435 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u0435\u0440\u043e\u0432\u043d\u044b\u0445 \u043a\u0440\u0430\u0451\u0432 \u043a\u0430\u0440\u0442\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 \u043a\u0440\u0430\u044f\u0445 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0438 \u0438 \u0440\u0435\u043a\u0438, \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0438\u0437 \u043a\u0430\u0440\u0442\u044b \u0440\u0435\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u0445 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043d\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0422\u0430\u043a\u0436\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0438 \u0443\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441 \u043a\u0430\u0440\u0442\u044b \u043e\u0442\u0440\u044f\u0434\u044b.<\/p>\n<h3>\u041f\u043e\u043c\u0435\u0447\u0430\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u0430\u043a \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCell<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Explorable<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic bool Explorable { get; set; }<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u044f\u0447\u0435\u0439\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>IsVisible<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u044d\u0442\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic bool IsVisible { \t\tget { \t\t\treturn visibility &gt; 0 &amp;&amp; Explorable; \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0438 \u043a <code>IsExplored<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u044f\u0432\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0435\u0433\u043e \u0433\u0435\u0442\u0442\u0435\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic bool IsExplored { \t\tget { \t\t\treturn explored &amp;&amp; Explorable; \t\t} \t\tprivate set { \t\t\texplored = value; \t\t} \t}  \t\u2026  \tbool explored;<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043a\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  \u0421\u043a\u0440\u044b\u0442\u044c \u043a\u0440\u0430\u0439 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>HexGrid.CreateCell<\/code>. \u042f\u0447\u0435\u0439\u043a\u0438, \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043a\u0440\u0430\u044e, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u043c\u0438, \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid CreateCell (int x, int z, int i) { \t\t\u2026  \t\tHexCell cell = cells[i] = Instantiate&lt;HexCell&gt;(cellPrefab); \t\tcell.transform.localPosition = position; \t\tcell.coordinates = HexCoordinates.FromOffsetCoordinates(x, z); \t\tcell.Index = i; \t\tcell.ShaderData = cellShaderData;  \t\tcell.Explorable = \t\t\tx &gt; 0 &amp;&amp; z &gt; 0 &amp;&amp; x &lt; cellCountX - 1 &amp;&amp; z &lt; cellCountZ - 1; \t\t \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u0440\u0442\u044b \u0437\u0430\u0442\u0435\u043c\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u043a\u0440\u0430\u044f\u043c, \u0441\u043a\u0440\u044b\u0432\u0430\u044f \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u043d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043a\u0430\u0440\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0438 \u043d\u0430 \u0434\u0432\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/594\/19f\/353\/59419f35345fa4eac3380c4e16461baf.png\"><\/div>\n<p>  <i>\u041d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0439 \u043a\u0440\u0430\u0439 \u043a\u0430\u0440\u0442\u044b.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c?<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0430, \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 \u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u041d\u0435\u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438<\/h3>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0435\u0441\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043c\u0435\u0448\u0430\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438. \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>HexGrid.GetVisibleCells<\/code>, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c \u044d\u0442\u043e.<\/p>\n<pre><code class=\"cs\">\t\t\t\tif ( \t\t\t\t\tneighbor == null || \t\t\t\t\tneighbor.SearchPhase &gt; searchFrontierPhase || \t\t\t\t\t!neighbor.Explorable \t\t\t\t) { \t\t\t\t\tcontinue; \t\t\t\t} <\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-22\/inexplorable-cells\/inexplorable-cells.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 23: \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u0443\u0448\u0443<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u0430\u043c\u0438.<\/li>\n<li>\u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0441\u0443\u0448\u0438 \u043d\u0430\u0434 \u0432\u043e\u0434\u043e\u0439, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0442\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u043c.<\/li>\n<li>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0441\u0443\u0448\u0438, \u0435\u0451 \u0432\u044b\u0441\u043e\u0442\u043e\u0439 \u0438 \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c\u044e.<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u043f\u0446\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043a\u0430\u0440\u0442.<\/li>\n<li>\u0414\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043d\u043e\u0432\u0430 \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043a\u0430\u0440\u0442\u0443.<\/li>\n<\/ul>\n<p>  \u042d\u0442\u0430 \u0447\u0430\u0441\u0442\u044c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0435\u0440\u0438\u0438 \u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0432 Unity 2017.1.0.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/99e\/798\/7bb\/99e7987bbcb46f1f961b72ba76a78aa0.jpg\"><\/div>\n<p>  <i>\u041e\u0434\u043d\u0430 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442.<\/i><\/p>\n<h2>\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0442<\/h2>\n<p>  \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u043a\u0430\u0440\u0442\u0443, \u043d\u0430 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0411\u044b\u043b\u043e \u0431\u044b \u0443\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0433\u043b\u043e \u043f\u043e\u043c\u043e\u0447\u044c \u0434\u0438\u0437\u0430\u0439\u043d\u0435\u0440\u0443, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044f \u0437\u0430 \u043d\u0435\u0433\u043e \u043a\u0430\u0440\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u043f\u043e\u0442\u043e\u043c \u0441\u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0430 \u0441\u0432\u043e\u0439 \u0432\u043a\u0443\u0441. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0430 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0432 \u0438\u0433\u0440\u0443 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0433\u0440\u0430\u0442\u044c \u0441 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439 \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0433\u0440\u043e\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f. \u0427\u0442\u043e\u0431\u044b \u0432\u0441\u0451 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442.<\/p>\n<p>  \u0422\u0438\u043f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u043a\u0430\u0440\u0442. \u041d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430, \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0438\u0433\u0440\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043a\u0430\u0440\u0442\u0430 \u0431\u044b\u043b\u0430 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0439, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0438\u0433\u0440\u043e\u043a\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439 \u0438 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439. \u042d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u0430\u0440\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u044c \u043d\u0430\u0448\u0435\u0439 \u043f\u043b\u0430\u043d\u0435\u0442\u044b. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0440\u0443\u0433\u0430\u044f \u043f\u043b\u0430\u043d\u0435\u0442\u0430 \u0438\u043b\u0438 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041d\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0435\u043b\u044c\u0435\u0444 \u0417\u0435\u043c\u043b\u0438, \u0442\u043e \u043e\u0431\u044f\u0437\u0430\u043d\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0435\u0451.<\/p>\n<p>  \u0418\u0433\u0440\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u043a\u0430\u0440\u0442\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u0433\u0440\u043e\u0432\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443. \u0418\u043d\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0435 \u0441 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0445\u043e\u0442\u044c \u0433\u043e\u0440\u043d\u044b\u0435 \u0445\u0440\u0435\u0431\u0442\u044b \u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043e\u043d\u0438 \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u0437\u043e\u0440 \u043e\u0442\u0440\u044f\u0434\u043e\u0432. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0433\u043e\u0440, \u0447\u0442\u043e \u0441\u043d\u0438\u0437\u0438\u0442 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442 \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438\u0433\u0440\u044b. \u0418\u043b\u0438 \u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0433\u043e\u0440\u044b, \u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0438\u0445 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043d\u0430 \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u0439, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c\u043e\u0441\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u0443\u044e \u0437\u0435\u043c\u043b\u0435\u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u043f\u043b\u0430\u043d\u0435\u0442\u0443, \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0432 \u0442\u0435\u043a\u0442\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043b\u0438\u0442\u044b, \u044d\u0440\u043e\u0437\u0438\u044e, \u0434\u043e\u0436\u0434\u0438, \u0438\u0437\u0432\u0435\u0440\u0436\u0435\u043d\u0438\u044f \u0432\u0443\u043b\u043a\u0430\u043d\u043e\u0432, \u0432\u043e\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043c\u0435\u0442\u0435\u043e\u0440\u0438\u0442\u043e\u0432 \u0438 \u041b\u0443\u043d\u044b, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u041d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0442\u0430\u043a\u043e\u0439 \u043f\u043b\u0430\u043d\u0435\u0442\u044b \u043c\u043e\u0436\u0435\u0442 \u0443\u0439\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0438 \u0438\u0433\u0440\u043e\u043a\u0430\u043c \u043d\u0435 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0436\u0434\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043d\u043e\u0432\u043e\u0439 \u0438\u0433\u0440\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0438\u043c\u0443\u043b\u044f\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u043c\u043e\u0449\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043d\u043e \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0446\u0435\u043d\u0443.<\/p>\n<p>  \u0412 \u0438\u0433\u0440\u0430\u0445 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0430\u0432\u0434\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u044c\u044e, \u0438\u0433\u0440\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c\u043e\u0441\u0442\u044c\u044e. \u0418\u043d\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441\u044b \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b \u0438 \u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438, \u043d\u0435\u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u044b\u043c\u0438, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044b\u0445 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u042d\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442, \u043d\u043e \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u044c\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0441 \u043e\u0441\u043e\u0431\u044b\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435\u043c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0432\u0430\u043c\u0438 \u0438\u0433\u0440\u044b.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0435\u043c\u043b\u0435\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c, \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439. \u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043c, \u043a\u0430\u0440\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0442\u0438\u043d\u0435\u043d\u0442\u043e\u0432, \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u043e\u043a\u0435\u0430\u043d\u043e\u0432, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0446\u0435\u043b\u0443\u044e \u043f\u043b\u0430\u043d\u0435\u0442\u0443. \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0434 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u0441\u0443\u0448\u0438, \u043a\u043b\u0438\u043c\u0430\u0442\u043e\u043c, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0438 \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0437\u0430\u043b\u043e\u0436\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u0443 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0448\u0438.<\/p>\n<h3>\u041d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u041c\u044b \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u043a\u0430\u0440\u0442\u0435, \u0430 \u043d\u0435 \u043d\u0430 \u0433\u0435\u0439\u043c\u043f\u043b\u0435\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0441\u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u0440\u0442\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>HexMapEditor.Awake<\/code>, \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0432 \u0440\u0435\u0436\u0438\u043c\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0432 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tterrainMaterial.DisableKeyword(\"GRID_ON\"); \t\tShader.EnableKeyword(\"HEX_MAP_EDIT_MODE\"); \t\tSetEditMode(true); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0445 \u043a\u0430\u0440\u0442 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 <code>HexGrid<\/code>. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>HexMapGenerator<\/code>, \u0430 <code>HexGrid<\/code> \u043e \u043d\u0451\u043c \u0437\u043d\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u042d\u0442\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0435\u0442\u043a\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043b\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <code>GenerateMap<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0439\u043c\u0451\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. \u041f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u0430\u0440\u0442\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<pre><code class=\"cs\">using System.Collections.Generic; using UnityEngine;  public class HexMapGenerator : MonoBehaviour {  \tpublic HexGrid grid;  \tpublic void GenerateMap (int x, int z) { \t\tgrid.CreateMap(x, z); \t} }<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u0446\u0435\u043d\u0443 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c <code>HexMapGenerator<\/code> \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0433\u043e \u043a \u0441\u0435\u0442\u043a\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/932\/b6e\/fd2\/932b6efd2dd1809893af27ec7a91c620.png\"><\/div>\n<p>  <i>\u041e\u0431\u044a\u0435\u043a\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442.<\/i><\/p>\n<h3>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044e \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  \u041c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>NewMapMenu<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u043c\u043e\u0433\u043b\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0451 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u0447\u0435\u0440\u0435\u0437 \u0431\u0443\u043b\u0435\u0432\u043e \u043f\u043e\u043b\u0435 <code>generateMaps<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>true<\/code>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f, \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0446\u0438\u0439 <code>HexMapEditor<\/code>. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043c\u0435\u043d\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0435\u0433\u043e \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\tbool generateMaps = true;  \tpublic void ToggleMapGeneration (bool toggle) { \t\tgenerateMaps = toggle; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/fc9\/9c7\/0c9\/fc99c70c99095b3565104ef42254859d.png\"><\/div>\n<p>  <i>\u041c\u0435\u043d\u044e \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u043c.<\/i><\/p>\n<p>  \u0414\u0430\u0434\u0438\u043c \u043c\u0435\u043d\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u0430\u0440\u0442. \u0417\u0430\u0442\u0435\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>GenerateMap<\/code> \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c <code>CreateMap<\/code> \u0441\u0435\u0442\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic HexMapGenerator mapGenerator;  \t\u2026  \tvoid CreateMap (int x, int z) { \t\tif (generateMaps) { \t\t\tmapGenerator.GenerateMap(x, z); \t\t} \t\telse { \t\t\thexGrid.CreateMap(x, z); \t\t} \t\tHexMapCamera.ValidatePosition(); \t\tClose(); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7d1\/e98\/3d9\/7d1e983d927d912b75d9b245219659f1.png\"><\/div>\n<p>  <i>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443.<\/i><\/p>\n<h3>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u044f\u0447\u0435\u0439\u043a\u0430\u043c<\/h3>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044f\u0447\u0435\u0439\u043a\u0430\u043c. \u0423 <code>HexGrid<\/code> \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>GetCell<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0438\u043b\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0438\u043b\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0438 \u0441 \u0442\u0435\u043c\u0438, \u043d\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0432\u0430 \u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430 <code>HexGrid.GetCell<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic HexCell GetCell (int xOffset, int zOffset) { \t\treturn cells[xOffset + zOffset * cellCountX]; \t} \t \tpublic HexCell GetCell (int cellIndex) { \t\treturn cells[cellIndex]; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>HexMapGenerator<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0437\u0430\u0434\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u044f\u0447\u0435\u0435\u043a \u0442\u0440\u0430\u0432\u0443.<\/p>\n<pre><code class=\"cs\">\tpublic void GenerateMap (int x, int z) { \t\tgrid.CreateMap(x, z); \t\tfor (int i = 0; i &lt; z; i++) { \t\t\tgrid.GetCell(x \/ 2, i).TerrainTypeIndex = 1; \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/860\/aee\/119\/860aee119f0e000ef290f6c87e61ad05.jpg\"><\/div>\n<p>  <i>\u0421\u0442\u043e\u043b\u0431\u0435\u0446 \u0438\u0437 \u0442\u0440\u0430\u0432\u044b \u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0435.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-23\/generating-maps\/generating-maps.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0443\u0448\u0438<\/h2>\n<p>  \u041f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u044b \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0431\u0435\u0437 \u0441\u0443\u0448\u0438. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u043c\u0438\u0440 \u0437\u0430\u043b\u0438\u0442 \u043e\u0434\u043d\u0438\u043c \u043e\u0433\u0440\u043e\u043c\u043d\u044b\u043c \u043e\u043a\u0435\u0430\u043d\u043e\u043c. \u0421\u0443\u0448\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0447\u0430\u0441\u0442\u044c \u043e\u043a\u0435\u0430\u043d\u0441\u043a\u043e\u0433\u043e \u0434\u043d\u0430 \u0432\u044b\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0432\u0435\u0440\u0445 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0434 \u0432\u043e\u0434\u043e\u0439. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0443\u0448\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0433\u0434\u0435 \u043e\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0438 \u043a\u0430\u043a\u0443\u044e \u0444\u043e\u0440\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c.<\/p>\n<h3>\u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0440\u0435\u043b\u044c\u0435\u0444<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u043c\u0430\u043b\u043e\u0433\u043e \u2014 \u043f\u043e\u0434\u043d\u0438\u043c\u0435\u043c \u043e\u0434\u0438\u043d \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0441\u0443\u0448\u0438 \u043d\u0430\u0434 \u0432\u043e\u0434\u043e\u0439. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434 <code>RaiseTerrain<\/code> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0430. \u0412\u044b\u0437\u043e\u0432\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432 <code>GenerateMap<\/code>, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u043f\u0440\u043e\u0448\u043b\u044b\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u0437\u0435\u043c\u043b\u0438, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0438\u0437 \u0441\u0435\u043c\u0438 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tpublic void GenerateMap (int x, int z) { \t\tgrid.CreateMap(x, z); \/\/\t\tfor (int i = 0; i &lt; z; i++) { \/\/\t\t\tgrid.GetCell(x \/ 2, i).TerrainTypeIndex = 1; \/\/\t\t} \t\tRaiseTerrain(7); \t}  \tvoid RaiseTerrain (int chunkSize) {}<\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430 \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043d\u044f\u0442\u043e\u0439 \u0441\u0443\u0448\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0438\u043f \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u00ab\u0442\u0440\u0430\u0432\u0430\u00bb, \u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444 \u00ab\u043f\u0435\u0441\u043e\u043a\u00bb \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u043a\u0435\u0430\u043d. \u0417\u0430\u0441\u0442\u0430\u0432\u0438\u043c <code>RaiseTerrain<\/code> \u0431\u0440\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0438\u043f \u0435\u0451 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043d\u0443\u0436\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0443\u0448\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>GetRandomCell<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0438\u0437 \u0441\u0435\u0442\u043a\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443.<\/p>\n<pre><code class=\"cs\">\tvoid RaiseTerrain (int chunkSize) { \t\tfor (int i = 0; i &lt; chunkSize; i++) { \t\t\tGetRandomCell().TerrainTypeIndex = 1; \t\t} \t}  \tHexCell GetRandomCell () { \t\treturn grid.GetCell(Random.Range(0, grid.cellCountX * grid.cellCountZ)); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/396\/fb8\/ce6\/396fb8ce67de74961b31562e275bd81a.jpg\"><\/div>\n<p>  <i>\u0421\u0435\u043c\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0441\u0443\u0448\u0438.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043d\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0438\u043b\u0438 \u043e\u0431\u043e\u0439\u0442\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0447\u0435\u0435\u043a \u0432 \u0441\u0430\u043c\u043e\u043c <code>HexMapGenerator<\/code>.<\/p>\n<pre><code class=\"cs\">\tint cellCount;  \tpublic void GenerateMap (int x, int z) { \t\tcellCount = x * z; \t\t\u2026 \t}  \t\u2026  \tHexCell GetRandomCell () { \t\treturn grid.GetCell(Random.Range(0, cellCount)); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430<\/h3>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0432 \u0441\u0443\u0448\u0443 \u0441\u0435\u043c\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u0438 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u043d\u0438 \u043d\u0435 \u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442 \u0435\u0434\u0438\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0441\u0443\u0448\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0438\u0439 \u043e\u0431\u044a\u0451\u043c \u0441\u0443\u0448\u0438. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u043e\u0431\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0431\u0435\u0437 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u044f\u0434\u043e\u043c \u0441 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u0440\u0430\u043d\u0435\u0435. \u042d\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0443\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c <code>HexMapGenerator<\/code> \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0444\u0430\u0437\u044b \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0438\u0441\u043a\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432 <code>HexGrid<\/code>.<\/p>\n<pre><code class=\"cs\">\tHexCellPriorityQueue searchFrontier;  \tint searchFrontierPhase;<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0447\u0442\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u043d\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic void GenerateMap (int x, int z) { \t\tcellCount = x * z; \t\tgrid.CreateMap(x, z); \t\tif (searchFrontier == null) { \t\t\tsearchFrontier = new HexCellPriorityQueue(); \t\t} \t\tRaiseTerrain(7); \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u0440\u0430\u0432\u043d\u0430 \u043d\u0443\u043b\u044e. \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u044b, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435. \u0415\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e\u0438\u0441\u043a\u0430, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432\u043f\u0435\u0440\u0435\u0434\u0438 \u0444\u0430\u0437\u044b \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0438\u0441\u043a\u0430, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 <code>HexGrid<\/code>. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u0443\u0442\u0438 \u043e\u0442\u0440\u044f\u0434\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u0432 \u043a\u043e\u043d\u0446\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0444\u0430\u0437\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u0434\u043e \u043d\u0443\u043b\u044f.<\/p>\n<pre><code class=\"cs\">\t\tRaiseTerrain(7); \t\tfor (int i = 0; i &lt; cellCount; i++) { \t\t\tgrid.GetCell(i).SearchPhase = 0; \t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>RaiseTerrain<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043a\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u043d\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e. \u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 <code>HexGrid<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0441\u0435\u0449\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0444\u0430\u0437\u0443 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430 1 \u0432\u043c\u0435\u0441\u0442\u043e 2. \u0417\u0430\u0442\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e. \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e, \u043a\u0440\u043e\u043c\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0435\u0451 \u0444\u0430\u0437\u044b \u043f\u043e\u0438\u0441\u043a\u0430, \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0435\u0451 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0435 \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid RaiseTerrain (int chunkSize) { \/\/\t\tfor (int i = 0; i &lt; chunkSize; i++) { \/\/\t\t\tGetRandomCell().TerrainTypeIndex = 1; \/\/\t\t} \t\tsearchFrontierPhase += 1; \t\tHexCell firstCell = GetRandomCell(); \t\tfirstCell.SearchPhase = searchFrontierPhase; \t\tfirstCell.Distance = 0; \t\tfirstCell.SearchHeuristic = 0; \t\tsearchFrontier.Enqueue(firstCell); \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0446\u0438\u043a\u043b \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u043f\u043e\u0438\u0441\u043a, \u043f\u043e\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043e\u043f\u0443\u0441\u0442\u0435\u0435\u0442, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u0442 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u044d\u0442\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443, \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0435\u0451 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0412\u0441\u0435 \u0441\u043e\u0441\u0435\u0434\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u0443, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0449\u0451 \u0442\u0443\u0434\u0430 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b. \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0438\u043b\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<pre><code class=\"cs\">\t\tsearchFrontier.Enqueue(firstCell);  \t\tint size = 0; \t\twhile (size &lt; chunkSize &amp;&amp; searchFrontier.Count &gt; 0) { \t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tcurrent.TerrainTypeIndex = 1; \t\t\tsize += 1;  \t\t\tfor (HexDirection d = HexDirection.NE; d &lt;= HexDirection.NW; d++) { \t\t\t\tHexCell neighbor = current.GetNeighbor(d); \t\t\t\tif (neighbor &amp;&amp; neighbor.SearchPhase &lt; searchFrontierPhase) { \t\t\t\t\tneighbor.SearchPhase = searchFrontierPhase; \t\t\t\t\tneighbor.Distance = 0; \t\t\t\t\tneighbor.SearchHeuristic = 0; \t\t\t\t\tsearchFrontier.Enqueue(neighbor); \t\t\t\t} \t\t\t} \t\t} \t\tsearchFrontier.Clear();<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/97a\/f44\/023\/97af440236cb6909130d6a8bfaab3f5a.jpg\"><\/div>\n<p>  <i>\u041b\u0438\u043d\u0438\u044f \u0438\u0437 \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<p>  \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0435\u0434\u0438\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u041e\u043d \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0447\u0435\u0435\u043a. \u0418\u0437-\u0437\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043b\u0438\u043d\u0438\u0438, \u0438\u0434\u0443\u0449\u0435\u0439 \u043d\u0430 \u0441\u0435\u0432\u0435\u0440\u043e-\u0437\u0430\u043f\u0430\u0434. \u041e\u043d \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u043a\u0440\u0430\u044f \u043a\u0430\u0440\u0442\u044b.<\/p>\n<h3>\u0421\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0438<\/h3>\n<p>  \u0423\u0447\u0430\u0441\u0442\u043a\u0438 \u0441\u0443\u0448\u0438 \u0440\u0435\u0434\u043a\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442 \u043b\u0438\u043d\u0438\u0438, \u0430 \u0435\u0441\u043b\u0438 \u0438 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0442, \u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0444\u043e\u0440\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043a\u0430, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b \u044f\u0447\u0435\u0435\u043a. \u041f\u0435\u0440\u0432\u0443\u044e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0446\u0435\u043d\u0442\u0440\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0430. \u0422\u043e\u0433\u0434\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044d\u0442\u043e\u0439 \u0442\u043e\u0447\u043a\u0435. \u0422\u0430\u043a \u043c\u044b \u0434\u0430\u0434\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0439 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043b\u0438\u0436\u0435 \u043a \u0446\u0435\u043d\u0442\u0440\u0443, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438 \u043d\u0435 \u043a\u0430\u043a \u043b\u0438\u043d\u0438\u044f, \u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0446\u0435\u043d\u0442\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\t\tsearchFrontier.Enqueue(firstCell); \t\tHexCoordinates center = firstCell.coordinates;  \t\tint size = 0; \t\twhile (size &lt; chunkSize &amp;&amp; searchFrontier.Count &gt; 0) { \t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tcurrent.TerrainTypeIndex = 1; \t\t\tsize += 1;  \t\t\tfor (HexDirection d = HexDirection.NE; d &lt;= HexDirection.NW; d++) { \t\t\t\tHexCell neighbor = current.GetNeighbor(d); \t\t\t\tif (neighbor &amp;&amp; neighbor.SearchPhase &lt; searchFrontierPhase) { \t\t\t\t\tneighbor.SearchPhase = searchFrontierPhase; \t\t\t\t\tneighbor.Distance = neighbor.coordinates.DistanceTo(center); \t\t\t\t\tneighbor.SearchHeuristic = 0; \t\t\t\t\tsearchFrontier.Enqueue(neighbor); \t\t\t\t} \t\t\t} \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/841\/117\/149\/84111714960a293415b1d24edf92f56b.jpg\"><\/div>\n<p>  <i>\u0421\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<p>  \u0418 \u0432 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0438 \u0441\u0435\u043c\u044c \u044f\u0447\u0435\u0435\u043a \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0432 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0443\u044e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0435\u0441\u043b\u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0440\u0430\u044e \u043a\u0430\u0440\u0442\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0447\u0430\u0441\u0442\u043a\u0430 30.<\/p>\n<pre><code class=\"cs\">\t\tRaiseTerrain(30);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/893\/c36\/13e\/893c3613edfe02b457cc4ee6d191072c.jpg\"><\/div>\n<p>  <i>\u041c\u0430\u0441\u0441\u0430 \u0441\u0443\u0448\u0438 \u0432 30 \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<p>  \u041c\u044b \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0442\u0443 \u0436\u0435 \u0444\u043e\u0440\u043c\u0443, \u0445\u043e\u0442\u044c \u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u044f\u0447\u0435\u0435\u043a \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e. \u0422\u0430\u043a \u043a\u0430\u043a \u0440\u0430\u0434\u0438\u0443\u0441 \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u043e\u043d \u0441 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u043a\u0440\u0430\u044e \u043a\u0430\u0440\u0442\u044b, \u0447\u0442\u043e \u0432\u044b\u043d\u0443\u0434\u0438\u0442 \u0435\u0433\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0444\u043e\u0440\u043c\u0443.<\/p>\n<h3>\u0420\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u043e\u0440\u043c\u044b \u0441\u0443\u0448\u0438<\/h3>\n<p>  \u041c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b \u044f\u0447\u0435\u0435\u043a. \u041a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0441\u043e\u0441\u0435\u0434\u043d\u044e\u044e \u044f\u0447\u0435\u0439\u043a\u0443, \u0435\u0441\u043b\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0447\u0438\u0441\u043b\u043e <code>Random.value<\/code> \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0440\u043e\u0433\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435 0, \u0430 1. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0440\u043e\u0433\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.5, \u0442\u043e \u0435\u0441\u0442\u044c \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u043d \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\t\t\t\t\tneighbor.Distance = neighbor.coordinates.DistanceTo(center); \t\t\t\t\tneighbor.SearchHeuristic = Random.value &lt; 0.5f ? 1: 0; \t\t\t\t\tsearchFrontier.Enqueue(neighbor);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/43e\/aec\/793\/43eaec79315f68e0618fe71c0f93c3f3.jpg\"><\/div>\n<p>  <i>\u0418\u0441\u043a\u0430\u0436\u0451\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a.<\/i><\/p>\n<p>  \u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u0443\u044e \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0443 \u044f\u0447\u0435\u0439\u043a\u0438, \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043f\u043e\u0441\u0435\u0449\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0437\u0436\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0433\u043e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0440\u0443\u0433\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430, \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0441\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u043d\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c \u0442\u043e\u0436\u0435 \u043d\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0443. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0443 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0430 \u043e\u0434\u043d\u0443 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443, \u0442\u043e \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0440\u043e\u0433 1 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u044f, \u043a\u0430\u043a \u0438 \u043f\u043e\u0440\u043e\u0433 0. \u0410 \u043f\u043e\u0440\u043e\u0433 0.8 \u0431\u0443\u0434\u0435\u0442 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d 0.2. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c 0.5 \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u00ab\u0434\u0440\u043e\u0436\u0430\u0449\u0438\u043c\u00bb.<\/p>\n<p>  \u041f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0451 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043b\u0435 float <code>jitterProbability<\/code> \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c <code>Range<\/code>, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 0\u20130.5. \u0414\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0440\u0430\u0432\u043d\u043e\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u0443 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430, \u0442\u043e \u0435\u0441\u0442\u044c 0.25. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u0432 \u043e\u043a\u043d\u0435 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0430 Unity.<\/p>\n<pre><code class=\"cs\">\t[Range(0f, 0.5f)] \tpublic float jitterProbability = 0.25f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/795\/b50\/381\/795b50381d8c9cda219ff092cf64cee5.png\"><\/div>\n<p>  \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u0439.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0436\u043d\u043e \u0432\u0435\u0434\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0439 \u0438 \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u043c UI?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0438\u0433\u0440 \u0442\u0430\u043a \u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u043e. \u0412 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u044f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432 \u0438\u0433\u0440\u043e\u0432\u043e\u0439 UI, \u043d\u043e \u0432\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u0435\u0448\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0446\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 UI. \u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u0432\u0441\u0435 \u043e\u043f\u0446\u0438\u0438. \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u0430\u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f, \u0434\u0440\u0443\u0433\u0443\u044e \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0438\u0433\u0440\u043e\u043a\u0430\u043c \u043e\u043f\u0446\u0438\u0438.<\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e \u0442\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u0430 1, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\t\t\t\t\tneighbor.SearchHeuristic = \t\t\t\t\t\tRandom.value &lt; jitterProbability ? 1: 0;<\/code><\/pre>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438 0 \u0438 1. \u0425\u043e\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0431\u041e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0445\u0443\u0434\u0448\u0438\u0442 \u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0432 \u0438\u0445 \u0432 \u043a\u0443\u0447\u0443 \u043f\u043e\u043b\u043e\u0441.<\/p>\n<h3>\u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u0441\u0443\u0448\u0438<\/h3>\n<p>  \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0439 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u0441\u0443\u0448\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u0432\u044b\u0437\u043e\u0432 <code>RaiseTerrain<\/code> \u0432\u043d\u0443\u0442\u0440\u044c \u0446\u0438\u043a\u043b, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u044f\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\t\tfor (int i = 0; i &lt; 5; i++) { \t\t\tRaiseTerrain(30); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d42\/83f\/acd\/d4283facd88705107d705290c3d8e78b.jpg\"><\/div>\n<p>  <i>\u041f\u044f\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u0441\u0443\u0448\u0438.<\/i><\/p>\n<p>  \u0425\u043e\u0442\u044c \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u044f\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043f\u043e 30 \u044f\u0447\u0435\u0435\u043a \u043a\u0430\u0436\u0434\u044b\u0439, \u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0440\u043e\u0432\u043d\u043e 150 \u044f\u0447\u0435\u0435\u043a \u0441\u0443\u0448\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043e\u043d\u0438 \u043d\u0435 \u0437\u043d\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u043e \u0434\u0440\u0443\u0433\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u044b, \u0447\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441\u0443\u0448\u0438, \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0430. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0432\u0430 \u043f\u043e\u043b\u044f integer \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432. \u041f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0438\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 20\u2013200. \u042f \u0441\u0434\u0435\u043b\u0430\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0440\u0430\u0432\u043d\u044b\u043c 30, \u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u2014 100.<\/p>\n<pre><code class=\"cs\">\t[Range(20, 200)] \tpublic int chunkSizeMin = 30;  \t[Range(20, 200)] \tpublic int chunkSizeMax = 100;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/9ea\/026\/e43\/9ea026e43e949f571be0358332447de5.png\"><\/div>\n<p>  <i>\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432.<\/i><\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u0438 \u043f\u043e\u043b\u044f \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>RaiseTerrain<\/code>.<\/p>\n<pre><code class=\"cs\">\t\t\tRaiseTerrain(Random.Range(chunkSizeMin, chunkSizeMax + 1));<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0df\/124\/dab\/0df124dab1f706825f75304d2862aea3.jpg\"><\/div>\n<p>  <i>\u041f\u044f\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438 \u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u0435.<\/i><\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0443\u0448\u0438<\/h3>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0441\u043e\u0431\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0441\u0443\u0448\u0438. \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432, \u0441\u0430\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b \u0438 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0443\u0448\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u043f\u0446\u0438\u044e \u0434\u043b\u044f \u043f\u0440\u044f\u043c\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u043c \u0441\u0443\u0448\u0438, \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u0443\u044e \u043a\u0430\u043a integer. \u0422\u0430\u043a \u043a\u0430\u043a 100% \u0441\u0443\u0448\u0438 \u0438\u043b\u0438 \u0432\u043e\u0434\u044b \u2014 \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c \u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c 5\u201395, \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 50 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<pre><code class=\"cs\">\t[Range(5, 95)] \tpublic int landPercentage = 50;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/21e\/281\/912\/21e281912ad5a4a5378c5e55514c639c.png\"><\/div>\n<p>  <i>\u041f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u0443\u0448\u0438.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0441\u0443\u0448\u0438, \u043d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u0430\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0447\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u0443\u0448\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u0446\u0438\u043a\u043b \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <code>CreateLand<\/code>. \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u2014 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0447\u0435\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0442\u0430\u0442\u044c \u0441\u0443\u0448\u0435\u0439. \u042d\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448\u0435\u0439 \u043e\u0431\u0449\u0435\u0439 \u0441\u0443\u043c\u043c\u043e\u0439 \u044f\u0447\u0435\u0435\u043a \u0441\u0443\u0448\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void GenerateMap (int x, int z) { \t\t\u2026 \/\/\t\tfor (int i = 0; i &lt; 5; i++) { \/\/\t\t\tRaiseTerrain(Random.Range(chunkSizeMin, chunkSizeMax + 1)); \/\/\t\t} \t\tCreateLand(); \t\tfor (int i = 0; i &lt; cellCount; i++) { \t\t\tgrid.GetCell(i).SearchPhase = 0; \t\t} \t}  \tvoid CreateLand () { \t\tint landBudget = Mathf.RoundToInt(cellCount * landPercentage * 0.01f); \t}<\/code><\/pre>\n<p>  <code>CreateLand<\/code> \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c <code>RaiseTerrain<\/code>, \u043f\u043e\u043a\u0430 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u0432\u0441\u044f \u0441\u0443\u043c\u043c\u0430 \u044f\u0447\u0435\u0435\u043a. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442\u044c \u0441\u0443\u043c\u043c\u0443, \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>RaiseTerrain<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u0441\u0443\u043c\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0440\u0430\u0431\u043e\u0442\u0443, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0443\u044e\u0441\u044f \u0441\u0443\u043c\u043c\u0443.<\/p>\n<pre><code class=\"cs\">\/\/\tvoid RaiseTerrain (int chunkSize) { \tint RaiseTerrain (int chunkSize, int budget) { \t\t\u2026 \t\treturn budget; \t}<\/code><\/pre>\n<p>  \u0421\u0443\u043c\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0443\u0448\u0443. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u0439 \u0432\u0441\u044f \u0441\u0443\u043c\u043c\u0430, \u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442 \u043f\u043e\u0438\u0441\u043a \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043e\u043a. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u043e\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0443\u0448\u0435\u0439.<\/p>\n<pre><code class=\"cs\">\t\twhile (size &lt; chunkSize &amp;&amp; searchFrontier.Count &gt; 0) { \t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tif (current.TerrainTypeIndex == 0) { \t\t\t\tcurrent.TerrainTypeIndex = 1; \t\t\t\tif (--budget == 0) { \t\t\t\t\tbreak; \t\t\t\t} \t\t\t} \t\t\tsize += 1; \t\t\t \t\t\t\u2026 \t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>CreateLand<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0443\u0448\u0443, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442 \u0432\u0441\u044e \u0441\u0443\u043c\u043c\u0443 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tvoid CreateLand () { \t\tint landBudget = Mathf.RoundToInt(cellCount * landPercentage * 0.01f); \t\twhile (landBudget &gt; 0) { \t\t\tlandBudget = RaiseTerrain( \t\t\t\tRandom.Range(chunkSizeMin, chunkSizeMax + 1), landBudget \t\t\t); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d15\/34e\/7f4\/d1534e7f47ba4cf87f3dbeed60aa7d00.jpg\"><\/div>\n<p>  <i>\u0420\u043e\u0432\u043d\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043a\u0430\u0440\u0442\u044b \u0441\u0442\u0430\u043b\u0430 \u0441\u0443\u0448\u0435\u0439.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-23\/creating-land\/creating-land.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u0443<\/h2>\n<p>  \u0421\u0443\u0448\u0430 \u2014 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043b\u043e\u0441\u043a\u0430\u044f \u043f\u043b\u0438\u0442\u0430, \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u0431\u0435\u0440\u0435\u0433\u043e\u0432\u043e\u0439 \u043b\u0438\u043d\u0438\u0435\u0439. \u0423 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u043c\u0435\u043d\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u0432\u044b\u0441\u043e\u0442\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0445\u043e\u043b\u043c\u044b, \u0433\u043e\u0440\u044b, \u0434\u043e\u043b\u0438\u043d\u044b, \u043e\u0437\u0451\u0440\u0430, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435. \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0435\u0440\u0435\u043f\u0430\u0434\u044b \u0432\u044b\u0441\u043e\u0442\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u0437-\u0437\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0434\u0432\u0438\u0436\u0443\u0449\u0438\u0445\u0441\u044f \u0442\u0435\u043a\u0442\u043e\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043b\u0438\u0442. \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0435\u0433\u043e \u0441\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u0448\u0438 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0441\u0443\u0448\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0432 \u0447\u0451\u043c-\u0442\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043f\u043b\u0438\u0442\u044b. \u0423\u0447\u0430\u0441\u0442\u043a\u0438 \u043d\u0435 \u0434\u0432\u0438\u0436\u0443\u0442\u0441\u044f, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f. \u0418 \u044d\u0442\u0438\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h3>\u0412\u044b\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c \u0441\u0443\u0448\u0443 \u043d\u0430\u0432\u0435\u0440\u0445<\/h3>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u044c \u0441\u0443\u0448\u0438, \u0432\u044b\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u043e\u0439 \u0441\u043e \u0434\u043d\u0430 \u043e\u043a\u0435\u0430\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 <code>RaiseTerrain<\/code> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">\t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tcurrent.Elevation += 1; \t\t\tif (current.TerrainTypeIndex == 0) { \t\t\t\t\u2026 \t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b3c\/f6e\/d3e\/b3cf6ed3e71eb737ea7246c92bdd5624.jpg\"><\/div>\n<p>  <i>\u0421\u0443\u0448\u0430 \u0441 \u0432\u044b\u0441\u043e\u0442\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0432\u044b\u0441\u043e\u0442\u044b, \u043d\u043e \u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u0440\u0430\u0437\u0431\u043e\u0440\u0447\u0438\u0432\u0435\u0435, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0442\u0438\u043f \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u044b\u0441\u043e\u0442\u044b, \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043d\u0430\u0441\u043b\u043e\u0435\u043d\u0438\u044f. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0441\u043e\u0442\u044b \u0431\u044b\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u043d\u0435\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u0442\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u0432\u044b\u0441\u043e\u0442\u0430 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430?<\/b><\/p>\n<div class=\"spoiler_text\">\u0428\u0435\u0439\u0434\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043d\u0435\u0433, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043b\u0438\u043d\u0438\u044e \u0441\u043d\u0435\u0433\u0430.<\/div>\n<\/div>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>SetTerrainType<\/code>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437.<\/p>\n<pre><code class=\"cs\">\tvoid SetTerrainType () { \t\tfor (int i = 0; i &lt; cellCount; i++) { \t\t\tHexCell cell = grid.GetCell(i); \t\t\tcell.TerrainTypeIndex = cell.Elevation; \t\t} \t}<\/code><\/pre>\n<p>  \u0411\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0448\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void GenerateMap (int x, int z) { \t\t\u2026 \t\tCreateLand(); \t\tSetTerrainType(); \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>RaiseTerrain<\/code> \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0442\u0438\u043f\u043e\u043c \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u0438 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u0430\u0445. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043b\u043e\u0433\u0438\u043a\u0443. \u0415\u0441\u043b\u0438 \u043d\u043e\u0432\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0440\u0430\u0432\u043d\u0430 1, \u0442\u043e \u043e\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0441\u0442\u0430\u043b\u0430 \u0441\u0443\u0448\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0443\u043c\u043c\u0430 \u044f\u0447\u0435\u0435\u043a \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0430\u0441\u044c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u0440\u043e\u0441\u0442\u0430 \u0443\u0447\u0430\u0441\u0442\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tcurrent.Elevation += 1; \t\t\tif (current.Elevation == 1 &amp;&amp; --budget == 0) { \t\t\t\tbreak; \t\t\t} \t\t\t \/\/\t\t\tif (current.TerrainTypeIndex == 0) { \/\/\t\t\t\tcurrent.TerrainTypeIndex = 1; \/\/\t\t\t\tif (--budget == 0) { \/\/\t\t\t\t\tbreak; \/\/\t\t\t\t} \/\/\t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ee0\/eec\/b9e\/ee0eecb9e59f527bd27f0275e230de0a.jpg\"><\/div>\n<p>  <i>\u041d\u0430\u0441\u043b\u043e\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0441\u0442\u043e\u0432.<\/i><\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432\u043e\u0434\u0443<\/h3>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e\u0434\u043e\u0439 \u0438\u043b\u0438 \u0441\u0443\u0448\u0435\u0439, \u0437\u0430\u0434\u0430\u0432 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u0440\u0430\u0432\u043d\u044b\u043c 1. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 <code>GenerateMap<\/code> \u043f\u0435\u0440\u0435\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0441\u0443\u0448\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void GenerateMap (int x, int z) { \t\tcellCount = x * z; \t\tgrid.CreateMap(x, z); \t\tif (searchFrontier == null) { \t\t\tsearchFrontier = new HexCellPriorityQueue(); \t\t} \t\tfor (int i = 0; i &lt; cellCount; i++) { \t\t\tgrid.GetCell(i).WaterLevel = 1; \t\t} \t\tCreateLand(); \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0451\u0432 \u0441\u0443\u0448\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0412\u0441\u0435 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u043f\u0435\u0441\u043a\u043e\u043c, \u043a\u0430\u043a \u0438 \u0441\u0430\u043c\u044b\u0435 \u043d\u0438\u0437\u043a\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u0443\u0448\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u044b\u0447\u0442\u044f \u0438\u0437 \u0432\u044b\u0441\u043e\u0442\u044b \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid SetTerrainType () { \t\tfor (int i = 0; i &lt; cellCount; i++) { \t\t\tHexCell cell = grid.GetCell(i); \t\t\tif (!cell.IsUnderwater) { \t\t\t\tcell.TerrainTypeIndex = cell.Elevation - cell.WaterLevel; \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1b5\/449\/bc3\/1b5449bc37b1c677d908484c7bcd0286.jpg\"><\/div>\n<p>  <i>\u0421\u0443\u0448\u0430 \u0438 \u0432\u043e\u0434\u0430.<\/i><\/p>\n<h3>\u041f\u043e\u0432\u044b\u0448\u0430\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b<\/h3>\n<p>  \u041c\u044b \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043e\u0434\u043d\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0432\u043e\u0434\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044f \u0441 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u043c 1\u20135 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 3 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\t[Range(1, 5)] \tpublic int waterLevel = 3; \t \t\u2026 \t \tpublic void GenerateMap (int x, int z) { \t\t\u2026 \t\tfor (int i = 0; i &lt; cellCount; i++) { \t\t\tgrid.GetCell(i).WaterLevel = waterLevel; \t\t} \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c32\/9cf\/82f\/c329cf82f9a847ac01f2754cc3252500.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/850\/c9d\/fe4\/850c9dfe4694834486bf4be64ac1783a.jpg\"><\/div>\n<p>  <i>\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b 3.<\/i><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b \u0440\u0430\u0432\u0435\u043d 3, \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0443\u0448\u0438, \u0447\u0435\u043c \u043c\u044b \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e <code>RaiseTerrain<\/code> \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b \u0440\u0430\u0432\u0435\u043d 1. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c.<\/p>\n<pre><code class=\"cs\">\t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tcurrent.Elevation += 1; \t\t\tif (current.Elevation == waterLevel &amp;&amp; --budget == 0) { \t\t\t\tbreak; \t\t\t}<\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u043e\u0434\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443. \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u0443\u0448\u0435\u0439 \u043d\u0435 \u0441\u0440\u0430\u0437\u0443. \u041a\u043e\u0433\u0434\u0430 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b \u0440\u0430\u0432\u0435\u043d 2, \u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 \u0432\u043e\u0434\u043e\u0439. \u0414\u043d\u043e \u043e\u043a\u0435\u0430\u043d\u0430 \u043f\u043e\u0434\u043d\u044f\u043b\u043e\u0441\u044c, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u0434 \u0432\u043e\u0434\u043e\u0439. \u0421\u0443\u0448\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0438 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u0434\u0432\u0443\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432. \u0427\u0435\u043c \u0432\u044b\u0448\u0435 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0443\u0448\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u043e\u0434\u044b \u0441\u0443\u0448\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u043e\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432, \u0442\u043e \u0432\u044b\u0448\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0441\u0443\u0448\u0435, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0433\u043e\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0442\u044c\u0441\u044f \u0447\u0430\u0449\u0435, \u0430 \u043f\u043b\u043e\u0441\u043a\u0430\u044f \u0441\u0443\u0448\u0430 \u2014 \u0440\u0435\u0436\u0435, \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c39\/f02\/abf\/c39f02abf2bfa93f01395208da92ae9a.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5a9\/01f\/4e2\/5a901f4e2785456e0784f33508be4ede.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/863\/816\/cc1\/863816cc19c0fd7cbf172905962970d9.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/fd0\/412\/190\/fd041219043df072443b00d6799f3946.jpg\"><\/div>\n<p>  <i>\u0423\u0440\u043e\u0432\u043d\u0438 \u0432\u043e\u0434\u044b 2\u20135, \u0441\u0443\u0448\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 50%.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-23\/sculpting-with-elevation\/sculpting-with-elevation.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u043b\u0438 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0432\u0432\u0435\u0440\u0445 \u043d\u0430 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u0442\u044b \u0437\u0430 \u0440\u0430\u0437, \u043d\u043e \u043c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u044d\u0442\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h3>\u041f\u043e\u0434\u043d\u044f\u0442\u044b\u0435 \u0432\u044b\u0441\u043e\u043a\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0438<\/h3>\n<p>  \u0425\u043e\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0441\u043e\u0442\u0443 \u0441\u0432\u043e\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0430 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c, \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0442\u044c \u043e\u0431\u0440\u044b\u0432\u044b. \u0422\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u0441\u0430\u044e\u0442\u0441\u044f \u043a\u0440\u0430\u044f \u0434\u0432\u0443\u0445 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u0440\u044b\u0432\u044b, \u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u043e\u0431\u0440\u044b\u0432\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0440\u0435\u0434\u043a\u0438\u043c\u0438. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0438\u0445 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0443 \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433. \u041d\u043e \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0434\u043e\u043b\u0438 \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0443\u0442\u0441\u044f \u0432\u044b\u0441\u043e\u043a\u043e, \u0442\u043e \u043f\u043e \u0440\u0435\u043b\u044c\u0435\u0444\u0443 \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u043b\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c 0.25 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<pre><code class=\"cs\">\t[Range(0f, 1f)] \tpublic float highRiseProbability = 0.25f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/cb6\/485\/8d7\/cb64858d7531bb31842aebdd49b68304.png\"><\/div>\n<p>  <i>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<p>  \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0445 \u0432\u044b\u0441\u043e\u043a\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432 \u043b\u044e\u0431\u043e\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b, \u044d\u0442\u043e \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u043f\u043e\u0434 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f. \u0420\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0441\u043e\u0442 2 \u0443\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043e\u0431\u0440\u044b\u0432\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443, \u0440\u0430\u0432\u043d\u0443\u044e \u0443\u0440\u043e\u0432\u043d\u044e \u0432\u043e\u0434\u044b, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0430\u0441\u044c \u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430 \u0432 \u0441\u0443\u0448\u0443. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043d\u0438\u0436\u0435 \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u043e\u0434\u044b, \u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u043b\u0438 \u0432\u044b\u0448\u0435, \u0442\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u043e\u0432\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0441\u0443\u0448\u0438.<\/p>\n<pre><code class=\"cs\">\t\tint rise = Random.value &lt; highRiseProbability ? 2 : 1; \t\tint size = 0; \t\twhile (size &lt; chunkSize &amp;&amp; searchFrontier.Count &gt; 0) { \t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tint originalElevation = current.Elevation; \t\t\tcurrent.Elevation = originalElevation + rise; \t\t\tif ( \t\t\t\toriginalElevation &lt; waterLevel &amp;&amp; \t\t\t\tcurrent.Elevation &gt;= waterLevel &amp;&amp; --budget == 0 \t\t\t) { \t\t\t\tbreak; \t\t\t} \t\t\tsize += 1; \t\t\t \t\t\t\u2026 \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b31\/8c1\/ea5\/b318c1ea557ced17d2cb0d9a951bcfc3.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4ba\/353\/78b\/4ba35378bc60e74b624e136b90a4a7eb.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ea3\/8ac\/b0a\/ea38acb0a5cf12835c2ba177e41d6178.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/018\/0df\/bd9\/0180dfbd9869a0d0e0d5a1712af34fb3.jpg\"><\/div>\n<p>  <i>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442\u044b 0.25, 0.50, 0.75 \u0438 1.<\/i><\/p>\n<h3>\u041e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0443\u0448\u0443<\/h3>\n<p>  \u0421\u0443\u0448\u0430 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u0432\u0435\u0440\u0445, \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0438 \u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f. \u041a\u043e\u0433\u0434\u0430 \u0441\u0443\u0448\u0430 \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0438\u0437\u043a\u043e, \u0435\u0451 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0434\u0430 \u0438 \u043e\u043d\u0430 \u0442\u0435\u0440\u044f\u0435\u0442\u0441\u044f. \u041f\u043e\u043a\u0430 \u043c\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0432\u0432\u0435\u0440\u0445, \u0441\u0443\u0448\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0443\u0433\u043b\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439. \u0415\u0441\u043b\u0438 \u043c\u044b \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u0432\u043d\u0438\u0437, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0444\u043e\u0440\u043c\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/9e4\/95e\/d81\/9e495ed818dfffc39e5a238f273c8c5b.jpg\"><\/div>\n<p>  <i>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0431\u0435\u0437 \u0437\u0430\u0442\u043e\u043d\u0443\u0432\u0448\u0435\u0439 \u0441\u0443\u0448\u0438.<\/i><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u0441\u0443\u0448\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0442\u044c \u0441\u0443\u0448\u0443, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0438\u0436\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u044f. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430 \u0441\u0443\u0448\u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f 0.4 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 0.2.<\/p>\n<pre><code class=\"cs\">\t[Range(0f, 0.4f)] \tpublic float sinkProbability = 0.2f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a11\/997\/e82\/a11997e824700a045e9faaedaafeb121.png\"><\/div>\n<p>  <i>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f.<\/i><\/p>\n<p>  \u041e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0430 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043f\u043e\u0434\u043d\u044f\u0442\u0438\u0435, \u0437\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u043c\u0435\u0442\u043e\u0434 <code>RaiseTerrain<\/code> \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 <code>SinkTerrain<\/code>. \u0412\u043c\u0435\u0441\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b \u043f\u043e\u0434\u044a\u0451\u043c\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0443 \u0436\u0435 \u043b\u043e\u0433\u0438\u043a\u0443. \u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043f\u0440\u043e\u0448\u043b\u0438 \u043b\u0438 \u043c\u044b \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0434\u044b, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u0440\u0438 \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043c\u044b \u043d\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u0441\u0443\u043c\u043c\u043e\u0439 \u044f\u0447\u0435\u0435\u043a. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0443\u0442\u0435\u0440\u044f\u043d\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u0443\u0448\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u0443\u044e \u043d\u0430 \u043d\u0435\u0451 \u0441\u0443\u043c\u043c\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0435\u0451 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<pre><code class=\"cs\">\tint SinkTerrain (int chunkSize, int budget) { \t\t\u2026  \t\tint sink = Random.value &lt; highRiseProbability ? 2 : 1; \t\tint size = 0; \t\twhile (size &lt; chunkSize &amp;&amp; searchFrontier.Count &gt; 0) { \t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tint originalElevation = current.Elevation; \t\t\tcurrent.Elevation = originalElevation - sink; \t\t\tif ( \t\t\t\toriginalElevation &gt;= waterLevel &amp;&amp; \t\t\t\tcurrent.Elevation &lt; waterLevel \/\/\t\t\t\t&amp;&amp; --budget == 0 \t\t\t) { \/\/\t\t\t\tbreak; \t\t\t\tbudget += 1; \t\t\t} \t\t\tsize += 1;  \t\t\t\u2026 \t\t} \t\tsearchFrontier.Clear(); \t\treturn budget; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 <code>CreateLand<\/code> \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043b\u0438 \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u0438\u043b\u0438 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u0443\u0448\u0443 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid CreateLand () { \t\tint landBudget = Mathf.RoundToInt(cellCount * landPercentage * 0.01f); \t\twhile (landBudget &gt; 0) { \t\t\tint chunkSize = Random.Range(chunkSizeMin, chunkSizeMax - 1); \t\t\tif (Random.value &lt; sinkProbability) { \t\t\t\tlandBudget = SinkTerrain(chunkSize, landBudget); \t\t\t} \t\t\telse { \t\t\t\tlandBudget = RaiseTerrain(chunkSize, landBudget); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/d6b\/c5e\/762\/d6bc5e76274e4aa9c8a692f90fde3646.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c2f\/8ae\/3e3\/c2f8ae3e3a4b814b6ae954d40225149e.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1e3\/f5d\/461\/1e3f5d461421feddbb145d4e1d56c000.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/33b\/39d\/462\/33b39d462682688fc2a8094556e4fc91.jpg\"><\/div>\n<p>  <i>\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f 0.1, 0.2, 0.3 \u0438 0.4.<\/i><\/p>\n<h3>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u0443<\/h3>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u043e\u0432, \u0438\u043d\u043e\u0433\u0434\u0430 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432\u044b\u0441\u043e\u0442\u044b, \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u0438\u0435, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0432\u044b\u0441\u043e\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u0443\u0448\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f3f\/c2e\/359\/f3fc2e359db04b4411f2bcd06b81888b.jpg\"><\/div>\n<p>  <i>\u041e\u0433\u0440\u043e\u043c\u043d\u044b\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u043f\u0440\u0438 90% \u0441\u0443\u0448\u0438.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c. \u0420\u0430\u0437\u0443\u043c\u043d\u044b\u0439 \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0431\u0443\u0434\u0435\u0442 \u0433\u0434\u0435-\u0442\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0442 \u22124 \u0434\u043e 0, \u0430 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 6\u201310. \u041f\u0443\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b \u22122 \u0438 8. \u041f\u0440\u0438 \u0440\u0443\u0447\u043d\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u044b \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a UI \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430, \u0438\u043b\u0438 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\t[Range(-4, 0)] \tpublic int elevationMinimum = -2;  \t[Range(6, 10)] \tpublic int elevationMaximum = 8;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/bcb\/20b\/efc\/bcb20befc496cd2c5bffbc94b0a9d267.png\"><\/div>\n<p>  <i>\u041c\u0438\u043d\u0438\u043c\u0443\u043c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0432\u044b\u0441\u043e\u0442\u044b.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 <code>RaiseTerrain<\/code> \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0441\u043e\u0442\u0430 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u043b\u0430 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0430. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f, \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0441\u043e\u043a\u043e. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438\u0445, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0432\u044b\u0441\u043e\u0442\u0443 \u0438 \u043d\u0435 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f \u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0441\u0443\u0448\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439, \u0434\u043e\u0441\u0442\u0438\u0433\u0448\u0438\u0445 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0430 \u0432\u044b\u0441\u043e\u0442\u044b, \u0438 \u0440\u0430\u0441\u0442\u0438 \u0432\u043e\u043a\u0440\u0443\u0433 \u043d\u0438\u0445.<\/p>\n<pre><code class=\"cs\">\t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tint originalElevation = current.Elevation; \t\t\tint newElevation = originalElevation + rise; \t\t\tif (newElevation &gt; elevationMaximum) { \t\t\t\tcontinue; \t\t\t} \t\t\tcurrent.Elevation = newElevation; \t\t\tif ( \t\t\t\toriginalElevation &lt; waterLevel &amp;&amp; \t\t\t\tnewElevation &gt;= waterLevel &amp;&amp; --budget == 0 \t\t\t) { \t\t\t\tbreak; \t\t\t} \t\t\tsize += 1;<\/code><\/pre>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432 <code>SinkTerrain<\/code>, \u043d\u043e \u0434\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\t\t\tHexCell current = searchFrontier.Dequeue(); \t\t\tint originalElevation = current.Elevation; \t\t\tint newElevation = current.Elevation - sink; \t\t\tif (newElevation &lt; elevationMinimum) { \t\t\t\tcontinue; \t\t\t} \t\t\tcurrent.Elevation = newElevation; \t\t\tif ( \t\t\t\toriginalElevation &gt;= waterLevel &amp;&amp; \t\t\t\tnewElevation &lt; waterLevel \t\t\t) { \t\t\t\tbudget += 1; \t\t\t} \t\t\tsize += 1;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4af\/cbe\/339\/4afcbe339d0d697779ff0649f6c2c125.jpg\"><\/div>\n<p>  <i>\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 \u0441 90% \u0441\u0443\u0448\u0438.<\/i><\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b<\/h3>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043a\u043e\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0441\u043e\u0442\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u044b\u0441\u043e\u0442\u0443 \u043a\u0430\u043a byte. \u041e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u043c\u0435\u0441\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u043a\u0438\u0435.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u0435\u0451 \u043a\u0430\u043a integer, \u0430 \u043d\u0435 byte. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u044b\u0441\u043e\u0442\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u0435\u0449\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u044f 127. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u044b \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u2212127\u2013128 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430. \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>HexCell.Save<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic void Save (BinaryWriter writer) { \t\twriter.Write((byte)terrainTypeIndex); \t\twriter.Write((byte)(elevation + 127)); \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c <code>SaveLoadMenu.mapFileVersion<\/code> \u0434\u043e 4.<\/p>\n<pre><code class=\"cs\">\tconst int mapFileVersion = 4;<\/code><\/pre>\n<p>  \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>HexCell.Load<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u0447\u0438\u0442\u0430\u043b 127 \u0438\u0437 \u0432\u044b\u0441\u043e\u0442, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u0435\u0440\u0441\u0438\u0438 4.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader, int header) { \t\tterrainTypeIndex = reader.ReadByte(); \t\tShaderData.RefreshTerrain(this); \t\televation = reader.ReadByte(); \t\tif (header &gt;= 4) { \t\t\televation -= 127; \t\t} \t\t\u2026 \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-23\/vertical-movement\/vertical-movement.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0412\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0442\u043e\u0439 \u0436\u0435 \u043a\u0430\u0440\u0442\u044b<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b. \u041f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0446\u0438\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0430\u043c\u0438 \u043a\u0430\u0440\u0442\u044b, \u043d\u043e \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439. \u041d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u043a\u0430\u0440\u0442\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439, \u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u043e\u0441\u043b\u0435 \u0435\u0451 \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0438\u0433\u0440\u044b, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0430\u043a\u0443\u044e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Seed<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u044b \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u043c, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>Random.Range<\/code> \u0438 <code>Random.value<\/code>. \u0427\u0442\u043e\u0431\u044b \u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0443 \u0436\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0441\u0435\u043b, \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 seed. \u041c\u044b \u0443\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u043d\u044c\u0448\u0435, \u0432 <code>HexMetrics.InitializeHashGrid<\/code>. \u041e\u043d \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0447\u0438\u0441\u0435\u043b, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c seed, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0441\u0432\u043e\u0451 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0422\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f <code>HexMapGenerator.GenerateMap<\/code>. \u041c\u044b \u0441\u043d\u043e\u0432\u0430 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u0442\u044c \u043d\u0438\u0447\u0435\u043c\u0443 \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u043c\u0443 <code>Random<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void GenerateMap (int x, int z) { \t\tRandom.State originalRandomState = Random.state; \t\t\u2026 \t\tRandom.state = originalRandomState; \t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c seed, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u044b. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0431\u0449\u0435\u0433\u043e \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic int seed;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/41d\/3b5\/538\/41d3b553898698698636b6bada081aa6.png\"><\/div>\n<p>  <i>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 seed.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 seed \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <code>Random<\/code>. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043a\u0430\u0440\u0442 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 seed. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f seed <code>Random.Range<\/code>. \u0427\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u043b\u043e \u043d\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic void GenerateMap (int x, int z) { \t\tRandom.State originalRandomState = Random.state; \t\tseed = Random.Range(0, int.MaxValue); \t\tRandom.InitState(seed); \t\t \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043c\u044b \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0442\u043e \u0435\u0441\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u0430\u0440\u0442\u0443, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 seed. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u0431\u044b\u043b\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u044c \u043e\u043d\u043e \u0438 \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435.<\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u0448\u0438\u0440\u043e\u043a\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u043e\u0439 \u0436\u0435 \u043a\u0430\u0440\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u043d\u0438\u0437\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0438\u0436\u043d\u0438\u0435 32 \u0431\u0438\u0442\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u0446\u0438\u043a\u043b\u0430\u0445, \u043f\u043b\u044e\u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0421\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0418\u041b\u0418, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u044b\u043b \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043c.<\/p>\n<pre><code class=\"cs\">\t\tseed = Random.Range(0, int.MaxValue); \t\tseed ^= (int)System.DateTime.Now.Ticks; \t\tseed ^= (int)Time.unscaledTime; \t\tRandom.InitState(seed);<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f seed \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0435 \u043c\u0430\u0441\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c integer, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u043d\u0443\u043b\u0438\u0442 \u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0431\u0438\u0442.<\/p>\n<pre><code class=\"cs\">\t\tseed ^= (int)Time.unscaledTime; \t\tseed &amp;= int.MaxValue; \t\tRandom.InitState(seed);<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Seed<\/h3>\n<p>  \u041c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 seed \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445. \u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0443 \u0436\u0435 \u043a\u0430\u0440\u0442\u0443 \u0437\u0430\u043d\u043e\u0432\u043e, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0443 \u0441\u043d\u043e\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 seed, \u0430 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0443\u043b\u0435\u0432\u0430 \u043f\u043e\u043b\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c.<\/p>\n<pre><code class=\"cs\">\tpublic bool useFixedSeed;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/200\/4c6\/eed\/2004c6eed8c2244bdfe660bf477d2fa3.png\"><\/div>\n<p>  <i>\u041e\u043f\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e seed.<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0439 seed, \u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043d\u043e\u0432\u043e\u0433\u043e seed \u0432 <code>GenerateMap<\/code>. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u043e\u043b\u0435 seed \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u043d\u043e\u0432\u0430 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u0430 \u0436\u0435 \u043a\u0430\u0440\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\t\tRandom.State originalRandomState = Random.state; \t\tif (!useFixedSeed) { \t\t\tseed = Random.Range(0, int.MaxValue); \t\t\tseed ^= (int)System.DateTime.Now.Ticks; \t\t\tseed ^= (int)Time.time; \t\t\tseed &amp;= int.MaxValue; \t\t} \t\tRandom.InitState(seed);<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 seed \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u043a\u0430\u0440\u0442\u044b \u0438 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043d\u043e\u0432\u0430. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0442\u0443 \u0436\u0435 \u043a\u0430\u0440\u0442\u0443, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u0435 \u0436\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0442\u043e\u0442 \u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u0414\u0430\u0436\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u0438\u0445 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044f\u0445 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u0430\u0440\u0442\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0440\u043e\u043c\u0435 seed \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7ff\/cd2\/279\/7ffcd2279b4dd882db924d8e1fc61d0e.jpg\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/486\/6db\/156\/4866db15628d75936b7e19fa4841f2f5.jpg\"><\/div>\n<p>  <i>\u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 seed 0 \u0438 929396788, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-23\/recreating-the-same-map\/recreating-the-same-map.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/div>\n<p>        <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <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\/post\/427003\/\"> https:\/\/habr.com\/post\/427003\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\"><a href=\"https:\/\/habr.com\/post\/424257\/\">\u0427\u0430\u0441\u0442\u0438 1-3: \u0441\u0435\u0442\u043a\u0430, \u0446\u0432\u0435\u0442\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0435\u043a<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/424491\/\">\u0427\u0430\u0441\u0442\u0438 4-7: \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/425463\/\">\u0427\u0430\u0441\u0442\u0438 8-11: \u0432\u043e\u0434\u0430, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0438 \u043a\u0440\u0435\u043f\u043e\u0441\u0442\u043d\u044b\u0435 \u0441\u0442\u0435\u043d\u044b<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/425919\/\">\u0427\u0430\u0441\u0442\u0438 12-15: \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/426481\/\">\u0427\u0430\u0441\u0442\u0438 16-19: \u043f\u043e\u0438\u0441\u043a \u043f\u0443\u0442\u0438, \u043e\u0442\u0440\u044f\u0434\u044b \u0438\u0433\u0440\u043e\u043a\u0430, \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 20: \u0442\u0443\u043c\u0430\u043d \u0432\u043e\u0439\u043d\u044b<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435.<\/li>\n<li>\u0418\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0431\u0435\u0437 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438.<\/li>\n<li>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c.<\/li>\n<li>\u0417\u0430\u0442\u0435\u043c\u043d\u044f\u0435\u043c \u0432\u0441\u0451 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0435.<\/li>\n<\/ul>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u044d\u0444\u0444\u0435\u043a\u0442 \u0442\u0443\u043c\u0430\u043d\u0430 \u0432\u043e\u0439\u043d\u044b.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0435\u0440\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 Unity 2017.1.0.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/716\/b6b\/8a9\/716b6b8a9d024dc87b2d645b5d4bdbb6.jpg\"><\/div>\n<p>  <i>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c.<\/i>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-291410","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/291410","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=291410"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/291410\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=291410"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=291410"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=291410"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}