{"id":290373,"date":"2018-10-05T13:15:13","date_gmt":"2018-10-05T09:15:13","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=290373"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=290373","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: \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-20\/tutorial-image.jpg\" alt=\"image\"\/><\/div>\n<p>  \u041d\u0430\u0447\u0430\u043b\u043e: <a href=\"https:\/\/habr.com\/post\/424257\/\">\u0447\u0430\u0441\u0442\u0438 1-3<\/a>.<\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 4: \u041d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438<\/h1>\n<p>  <\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0421\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0448\u0443\u043c\u0430.<\/li>\n<li>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u044b.<\/li>\n<li>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u044f\u0447\u0435\u0435\u043a.<\/li>\n<li>\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u0440\u0451\u0431\u0440\u0430 \u044f\u0447\u0435\u0435\u043a.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043a\u0430 \u043d\u0430\u0448\u0430 \u0441\u0435\u0442\u043a\u0430 \u044f\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0441\u0442\u0440\u043e\u0433\u0438\u043c \u0443\u0437\u043e\u0440\u043e\u043c \u0438\u0437 \u0441\u043e\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0440\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0435\u0435.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/tutorial-image.png\"\/><\/div>\n<p>  <i>\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0440\u043e\u0432\u043d\u044b\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432.<\/i><\/p>\n<h2>\u0428\u0443\u043c<\/h2>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u043d\u043e \u043d\u0435 \u0438\u0441\u0442\u0438\u043d\u043d\u0430\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u044c. \u041c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u044b \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u0430\u043a\u0430\u0442\u044c. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043d\u0435\u043a\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430.<\/p>\n<p>  \u0425\u043e\u0440\u043e\u0448\u0438\u043c \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0448\u0443\u043c \u041f\u0435\u0440\u043b\u0438\u043d\u0430. \u041e\u043d \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u0432 \u043b\u044e\u0431\u043e\u0439 \u0442\u043e\u0447\u043a\u0435. \u041f\u0440\u0438 \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u043e\u0442 \u043e\u043d \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0448\u0443\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445, \u043d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043d\u0430 \u043c\u0430\u043b\u044b\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043b\u0430\u0432\u043d\u044b\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f. \u041d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0440\u044f\u0434\u043e\u043c \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0442\u043e\u0447\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u044f\u0434\u043e\u043c, \u0430 \u043d\u0435 \u0440\u0430\u0437\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0443\u043c \u041f\u0435\u0440\u043b\u0438\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e. \u0412 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/noise\/\">Noise<\/a> \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e, \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u041d\u043e \u0442\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0448\u0443\u043c\u0430. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043c\u043d\u043e\u0433\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430 \u041f\u0435\u0440\u043b\u0438\u043d\u0430. \u0415\u0451 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0448\u0443\u043c\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u0431\u0440\u043e\u0441\u0430\u043b\u0438\u0441\u044c \u0432 \u0433\u043b\u0430\u0437\u0430.<\/p>\n<h3>\u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0448\u0443\u043c\u0430<\/h3>\n<p>  \u041c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/noise\/\">Noise<\/a> \u0432\u0430\u043c \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430. \u0412\u043e\u0442 \u043e\u043d\u0430:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/noise\/tiling-perlin-noise.png\"\/><\/div>\n<p>  <i>\u0411\u0435\u0441\u0448\u043e\u0432\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0448\u0443\u043c\u0430 \u041f\u0435\u0440\u043b\u0438\u043d\u0430.<\/i><\/p>\n<p>  \u041f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u0430\u044f \u0432\u044b\u0448\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c\u044b\u0439 \u043c\u043d\u043e\u0433\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u044b\u0439 \u0448\u0443\u043c \u041f\u0435\u0440\u043b\u0438\u043d\u0430. \u042d\u0442\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u043e\u0442\u0442\u0435\u043d\u043a\u0430\u0445 \u0441\u0435\u0440\u043e\u0433\u043e. \u0415\u0433\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e 0.5, \u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0435\u043c\u044f\u0442\u0441\u044f \u043a 0 \u0438 1.<\/p>\n<p>  \u041d\u043e \u043f\u043e\u0441\u0442\u043e\u0439\u0442\u0435, \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0441\u044d\u043c\u043f\u043b\u0430! \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0435\u0449\u0451 \u0434\u0432\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0448\u0443\u043c\u043e\u043c.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0445 \u0438\u043b\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0448\u0443\u043c\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0448\u0443\u043c\u0430 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435. \u0412\u043e\u0442 \u044d\u0442\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/noise\/noise.png\"\/><\/div>\n<p>  <i>\u0427\u0435\u0442\u044b\u0440\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443?<\/b><\/p>\n<div class=\"spoiler_text\">\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <a href=\"https:\/\/catlikecoding.com\/numberflow\/\">NumberFlow<\/a>. \u042d\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043d\u043e\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0434\u043b\u044f Unity.<\/div>\n<\/div>\n<p>  \u0421\u043a\u0430\u0447\u0430\u0439\u0442\u0435 \u044d\u0442\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0435\u0451 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 Unity. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0434, \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0439. \u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0435 <em>Texture Type<\/em> \u043d\u0430 <em>Advanced<\/em> \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 <em>Read\/Write Enabled<\/em>. \u042d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438 \u043a \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0438\u0437 \u043a\u043e\u0434\u0430 \u043d\u0430 C#. \u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u0434\u043b\u044f <em>Format<\/em> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>Automatic Truecolor<\/em>, \u0438\u043d\u0430\u0447\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u0436\u0430\u0442\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0438\u043b\u043e \u043d\u0430\u0448 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0448\u0443\u043c\u0430.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c <em>Generate Mip Maps<\/em>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f. \u0422\u0430\u043a\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 <em>Bypass sRGB Sampling<\/em>. \u042d\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f, \u043d\u043e \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e. \u042d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u0430 \u0432 \u0433\u0430\u043c\u043c\u0430-\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/noise\/inspector.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/noise\/preview.png\"\/><\/div>\n<p>  \u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0448\u0443\u043c\u0430.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0433\u0434\u0430 \u0432\u0430\u0436\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 sRGB sampling?<\/b><\/p>\n<div class=\"spoiler_text\">\u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435, \u0442\u043e \u044d\u0442\u043e \u0438\u043c\u0435\u043b\u043e \u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0440\u0435\u0436\u0438\u043c\u0435 Linear rendering \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0433\u0430\u043c\u043c\u044b \u0432 \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. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0448\u0435\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0448\u0443\u043c\u0430 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0443 \u043c\u0435\u043d\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0438\u043d\u0430\u0447\u0435?<\/b><\/p>\n<div class=\"spoiler_text\">\u0418\u0445 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u044d\u0442\u043e\u0442 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b. \u041d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 2D-\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, <em>sRGB (Color Texture)<\/em> \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e, \u0430 \u0434\u043b\u044f <em>Compression<\/em> \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>None<\/em>.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0421\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0443\u043c\u0430<\/h3>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0443\u043c\u0430 \u0432 <code>HexMetrics<\/code>, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e <code>HexMetrics<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0448\u0443\u043c\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic static Texture2D noiseSource;<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0435\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>HexGrid<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a <code>HexGrid<\/code> \u0431\u0443\u0434\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u043c, \u0431\u0443\u0434\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 <code>Awake<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic Texture2D noiseSource;  \tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource;  \t\t&hellip; \t}<\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435 \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0451\u0442 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play. \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043d\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0438\u0436\u043a\u043e\u043c Unity. \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0438 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f <code>OnEnable<\/code>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid OnEnable () { \t\tHexMetrics.noiseSource = noiseSource; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/noise\/noise-assigned.png\"\/><\/div>\n<p>  <i>\u041d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0448\u0443\u043c\u0430.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 <code>HexMetrics<\/code> \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u043d\u0435\u043c\u0443 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0443\u043c\u0430. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u043c\u0438\u0440\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 4D-\u0432\u0435\u043a\u0442\u043e\u0440, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u044d\u043c\u043f\u043b\u0430 \u0448\u0443\u043c\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic static Vector4 SampleNoise (Vector3 position) { \t}<\/code><\/pre>\n<p>  \u0421\u044d\u043c\u043f\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0438\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043c\u0438\u0440\u0430 X \u0438 Z. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u0448 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0448\u0443\u043c\u0430 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u044b\u0439, \u043c\u044b \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0442\u0440\u0435\u0442\u044c\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u043c\u0438\u0440\u0430. \u0415\u0441\u043b\u0438 \u0431\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0448\u0443\u043c\u0430 \u0431\u044b\u043b \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u044b\u043c, \u043c\u044b \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 Y.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0446\u0432\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 4D-\u0432\u0435\u043a\u0442\u043e\u0440. \u0422\u0430\u043a\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u044b\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0446\u0432\u0435\u0442, \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c <code>(Vector4)<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic static Vector4 SampleNoise (Vector3 position) { \t\treturn noiseSource.GetPixelBilinear(position.x, position.z); \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0438\u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f?<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0441\u043c. \u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/rendering\/part-2\/\">Rendering 2, Shader Fundamentals<\/a>.<\/div>\n<\/div>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/noise\/noise.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d<\/h2>\n<p>  \u041c\u044b \u0438\u0441\u043a\u0430\u0437\u0438\u043c \u043d\u0430\u0448\u0443 \u0440\u043e\u0432\u043d\u0443\u044e \u0441\u0435\u0442\u043a\u0443 \u0438\u0437 \u0441\u043e\u0442, \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0432 \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u0432\u0435\u0440\u0448\u0438\u043d. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a <code>HexMesh<\/code> \u043c\u0435\u0442\u043e\u0434 <code>Perturb<\/code>. \u041e\u043d \u0431\u0435\u0440\u0451\u0442 \u043d\u0435\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0451\u043d\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0451\u043d\u043d\u0443\u044e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0451\u043d\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043f\u0440\u0438 \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0443\u043c\u0430.<\/p>\n<pre><code class=\"cs\">\tVector3 Perturb (Vector3 position) { \t\tVector4 sample = HexMetrics.SampleNoise(position); \t}<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u043e\u0436\u0438\u043c \u0441\u044d\u043c\u043f\u043b\u044b \u0448\u0443\u043c\u0430 X, Y \u0438 Z \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0442\u043e\u0447\u043a\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<pre><code class=\"cs\">\tVector3 Perturb (Vector3 position) { \t\tVector4 sample = HexMetrics.SampleNoise(position); \t\tposition.x += sample.x; \t\tposition.y += sample.y; \t\tposition.z += sample.z; \t\treturn position; \t}<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043d\u0430\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <code>HexMesh<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b? \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0435\u0440\u0448\u0438\u043d \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 <code>AddTriangle<\/code> \u0438 <code>AddQuad<\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c.<\/p>\n<pre><code class=\"cs\">\tvoid AddTriangle (Vector3 v1, Vector3 v2, Vector3 v3) { \t\tint vertexIndex = vertices.Count; \t\tvertices.Add(Perturb(v1)); \t\tvertices.Add(Perturb(v2)); \t\tvertices.Add(Perturb(v3)); \t\t&hellip; \t}  \tvoid AddQuad (Vector3 v1, Vector3 v2, Vector3 v3, Vector3 v4) { \t\tint vertexIndex = vertices.Count; \t\tvertices.Add(Perturb(v1)); \t\tvertices.Add(Perturb(v2)); \t\tvertices.Add(Perturb(v3)); \t\tvertices.Add(Perturb(v4)); \t\t&hellip; \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u043b\u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u043f\u043b\u043e\u0441\u043a\u0438\u043c\u0438 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0438\u0445 \u0432\u0435\u0440\u0448\u0438\u043d?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435\u0442. \u041e\u043d\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u0439 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u0432\u0435 \u043e\u0431\u0449\u0438\u0445 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u043d\u043e\u0440\u043c\u0430\u043b\u0438 \u044d\u0442\u0438\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u0431\u0443\u0434\u0443\u0442 \u0441\u0433\u043b\u0430\u0436\u0435\u043d\u044b. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0437\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438. \u0415\u0441\u043b\u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u043e, \u0442\u043e \u043c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u043f\u043b\u043e\u0441\u043a\u0438\u043c\u0438.<\/div>\n<\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/perturbing-vertices\/perturbed-vertices.png\"\/><\/div>\n<p>  <i>\u0412\u0435\u0440\u0448\u0438\u043d\u044b \u0442\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u044b, \u0442\u043e \u043b\u0438 \u043d\u0435\u0442.<\/i><\/p>\n<p>  \u041f\u043e\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u044b, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u043f\u0430\u043b\u0438 \u043c\u0435\u0442\u043a\u0438 \u044f\u0447\u0435\u0435\u043a. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043a \u0442\u043e\u0447\u043a\u0430\u043c \u0441\u044d\u043c\u043f\u043b\u044b \u0448\u0443\u043c\u0430, \u0430 \u043e\u043d\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0441\u0435 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u043f\u043e\u0434\u043d\u044f\u043b\u0438\u0441\u044c \u043d\u0430\u0434 \u0441\u0432\u043e\u0438\u043c\u0438 \u043c\u0435\u0442\u043a\u0430\u043c\u0438, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044f \u0438\u0445. \u041c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u0446\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0438 \u0432 \u043e\u0431\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445. \u0421\u043c\u0435\u043d\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0441\u044d\u043c\u043f\u043b\u0430 \u0448\u0443\u043c\u0430 \u0441 0&ndash;1 \u043d\u0430 \u22121&ndash;1.<\/p>\n<pre><code class=\"cs\">\tVector3 Perturb (Vector3 position) { \t\tVector4 sample = HexMetrics.SampleNoise(position); \t\tposition.x += sample.x * 2f - 1f; \t\tposition.y += sample.y * 2f - 1f; \t\tposition.z += sample.z * 2f - 1f; \t\treturn position; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/perturbing-vertices\/perturbed-centered.png\"\/><\/div>\n<p>  <i>\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/i><\/p>\n<h3>\u0412\u0435\u043b\u0438\u0447\u0438\u043d\u0430 (\u0441\u0438\u043b\u0430) \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u0438\u0441\u043a\u0430\u0437\u0438\u043b\u0438 \u0441\u0435\u0442\u043a\u0443, \u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442 \u0435\u0434\u0432\u0430 \u0437\u0430\u043c\u0435\u0442\u0435\u043d. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0438 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 1 \u0435\u0434\u0438\u043d\u0438\u0446\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0432\u0435\u043d \u221a3 \u2248 1.73 \u0435\u0434\u0438\u043d\u0438\u0446, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0440\u0435\u0434\u043a\u043e, \u0435\u0441\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442. \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u044f\u0447\u0435\u0435\u043a \u0440\u0430\u0432\u0435\u043d 10 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c, \u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043c\u0430\u043b\u044b.<\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a <code>HexMetrics<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0441\u0438\u043b\u044b, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043b\u0443 5. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d \u221a75 \u2248 8.66 \u0435\u0434\u0438\u043d\u0438\u0446, \u0447\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u0435\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic const float cellPerturbStrength = 5f;<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0441\u0438\u043b\u0443, \u0443\u043c\u043d\u043e\u0436\u0438\u0432 \u0435\u0451 \u043d\u0430 \u0441\u044d\u043c\u043f\u043b\u044b \u0432 <code>HexMesh.Perturb<\/code>.<\/p>\n<pre><code class=\"cs\">\tVector3 Perturb (Vector3 position) { \t\tVector4 sample = HexMetrics.SampleNoise(position); \t\tposition.x += (sample.x * 2f - 1f) * HexMetrics.cellPerturbStrength; \t\tposition.y += (sample.y * 2f - 1f) * HexMetrics.cellPerturbStrength; \t\tposition.z += (sample.z * 2f - 1f) * HexMetrics.cellPerturbStrength; \t\treturn position; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/perturbing-vertices\/perturbed-strength.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/perturbing-vertices\/perturbed-incoherent.png\"\/><\/div>\n<p>  <i>\u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u0430\u044f \u0441\u0438\u043b\u0430.<\/i><\/p>\n<h3>\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0448\u0443\u043c\u0430<\/h3>\n<p>  \u0425\u043e\u0442\u044f \u0434\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u0432\u0441\u0451 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0439\u0442\u0438 \u043d\u0435 \u0442\u0430\u043a \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0443\u043f\u043e\u0432. \u0418\u0445 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043a\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u0445\u0430\u043e\u0441. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0448\u0443\u043c\u0430 \u041f\u0435\u0440\u043b\u0438\u043d\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e.<\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0443\u043c\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043c\u0438\u0440\u0430. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0442\u0430\u0439\u043b\u0438\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u0443\u044e \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u0442\u043e\u0439 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b. \u041f\u043e \u0441\u0443\u0442\u0438, \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0445 \u0442\u043e\u0447\u043a\u0430\u0445, \u0440\u0430\u0437\u0440\u0443\u0448\u0430\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0443 \u043d\u0435\u0451 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/perturbing-vertices\/grid.png\"\/><\/div>\n<p>  <i>\u0421\u0442\u0440\u043e\u043a\u0438 \u0441\u0435\u0442\u043a\u0438 10 \u043d\u0430 10 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0442\u044b.<\/i><\/p>\n<p>  \u041d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0443\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u043b\u0430 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u041e\u043b\u044c\u0448\u0443\u044e \u043f\u043b\u043e\u0449\u0430\u0434\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0432 <code>HexMetrics<\/code> \u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0435\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.003, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442.<\/p>\n<pre><code class=\"cs\">\tpublic const float noiseScale = 0.003f;  \tpublic static Vector4 SampleNoise (Vector3 position) { \t\treturn noiseSource.GetPixelBilinear( \t\t\tposition.x * noiseScale, \t\t\tposition.z * noiseScale \t\t); \t}<\/code><\/pre>\n<p>  \u0412\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 333 &frac13; \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0435\u0434\u0438\u043d\u0438\u0446, \u0438 \u0435\u0451 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/perturbing-vertices\/perturbed-scaled.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/perturbing-vertices\/perturbed-coherent.png\"\/><\/div>\n<p>  <i>\u041e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0448\u0443\u043c.<\/i><\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u043e\u0432\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u044b\u043a\u0430\u043c\u0438 \u0448\u0443\u043c\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0434\u0438\u0430\u043c\u0435\u0442\u0440 10\u221a3 \u0435\u0434\u0438\u043d\u0438\u0446, \u043e\u043d \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u0439\u043b\u0438\u0442\u044c\u0441\u044f \u0432 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0438 X. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0437-\u0437\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0448\u0443\u043c\u0430, \u043f\u0440\u0438 \u0431\u041e\u043b\u044c\u0448\u0435\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 20 \u044f\u0447\u0435\u0435\u043a, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0434\u0435\u0442\u0430\u043b\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c. \u041d\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u0431\u0435\u0437 \u043f\u0440\u043e\u0447\u0438\u0445 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/perturbing-vertices\/perturbing-vertices.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0412\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u044f\u0447\u0435\u0435\u043a<\/h2>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u043f\u0440\u0438\u0434\u0430\u0451\u0442 \u043a\u0430\u0440\u0442\u0435 \u0431\u043e\u043b\u0435\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432\u0438\u0434, \u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0422\u0430\u043a \u043a\u0430\u043a \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u0440\u043e\u0432\u043d\u044b\u0435, \u0438\u0445 \u043c\u0435\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u0441 \u043c\u0435\u0448\u0435\u043c. \u0410 \u0432 \u043c\u0435\u0441\u0442\u0430\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0443\u0441\u0442\u0443\u043f\u043e\u0432 \u0441 \u043e\u0431\u0440\u044b\u0432\u0430\u043c\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0442\u0440\u0435\u0449\u0438\u043d\u044b. \u0422\u0440\u0435\u0449\u0438\u043d\u044b \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0430 \u043f\u043e\u0442\u043e\u043c, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u043e\u0441\u0440\u0435\u0434\u043e\u0442\u043e\u0447\u0438\u043c\u0441\u044f \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044f\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/leveling-cell-centers\/unleveled.png\"\/><\/div>\n<p>  <i>\u041a\u0430\u0440\u0442\u0430 \u0441\u0442\u0430\u043b\u0430 \u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u043e\u0439, \u043d\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/i><\/p>\n<p>  \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0439 \u2014 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u044b \u044f\u0447\u0435\u0435\u043a \u043f\u043b\u043e\u0441\u043a\u0438\u043c\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 Y \u0432 <code>HexMesh.Perturb<\/code>.<\/p>\n<pre><code class=\"cs\">\tVector3 Perturb (Vector3 position) { \t\tVector4 sample = HexMetrics.SampleNoise(position); \t\tposition.x += (sample.x * 2f - 1f) * HexMetrics.cellPerturbStrength; \/\/\t\tposition.y += (sample.y * 2f - 1f) * HexMetrics.cellPerturbStrength; \t\tposition.z += (sample.z * 2f - 1f) * HexMetrics.cellPerturbStrength; \t\treturn position; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/leveling-cell-centers\/leveled.png\"\/><\/div>\n<p>  <i>\u0412\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438.<\/i><\/p>\n<p>  \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0432\u0441\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438, \u0438 \u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u044f\u0447\u0435\u0435\u043a, \u0438 \u0443 \u0441\u0442\u0443\u043f\u0435\u043d\u0435\u043a \u0443\u0441\u0442\u0443\u043f\u043e\u0432. \u0421\u0442\u043e\u0438\u0442 \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u043e \u221a50 \u2248 7.07 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u0438 XZ.<\/p>\n<p>  \u042d\u0442\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0438 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0443\u043f\u0430\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0445\u0430\u043e\u0442\u0438\u0447\u043d\u044b\u043c\u0438. \u041d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438<\/h3>\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 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043a \u044f\u0447\u0435\u0439\u043a\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043f\u043b\u043e\u0441\u043a\u043e\u0439, \u043d\u043e \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u041b\u043e\u0433\u0438\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442\u044b \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0432 <code>HexMetrics<\/code>. \u0421\u0438\u043b\u0430 \u0432 1.5 \u0435\u0434\u0438\u043d\u0438\u0446 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0440\u0430\u0432\u043d\u0443\u044e \u0432\u044b\u0441\u043e\u0442\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0443\u043f\u0435\u043d\u0438 \u0443\u0441\u0442\u0443\u043f\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic const float elevationPerturbStrength = 1.5f;<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>HexCell.Elevation<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u043e \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic int Elevation { \t\tget { \t\t\treturn elevation; \t\t} \t\tset { \t\t\televation = value; \t\t\tVector3 position = transform.localPosition; \t\t\tposition.y = value * HexMetrics.elevationStep; \t\t\tposition.y += \t\t\t\t(HexMetrics.SampleNoise(position).y * 2f - 1f) * \t\t\t\tHexMetrics.elevationPerturbStrength; \t\t\ttransform.localPosition = position;  \t\t\tVector3 uiPosition = uiRect.localPosition; \t\t\tuiPosition.z = -position.y; \t\t\tuiRect.localPosition = uiPosition; \t\t} \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 <code>HexGrid.CreateCell<\/code>. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0435\u0442\u043a\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043b\u043e\u0441\u043a\u043e\u0439. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0432 \u043a\u043e\u043d\u0446\u0435, \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f UI.<\/p>\n<pre><code class=\"cs\">\tvoid CreateCell (int x, int z, int i) { \t\t&hellip;  \t\tcell.Elevation = 0; \t}<\/code><\/pre>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/leveling-cell-centers\/perturbed.png\"\/><\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u0441 \u0442\u0440\u0435\u0449\u0438\u043d\u0430\u043c\u0438.<\/i><\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0432\u044b\u0441\u043e\u0442<\/h3>\n<p>  \u0412 \u043c\u0435\u0448\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0442\u0440\u0435\u0449\u0438\u043d, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u043c\u0435\u0448\u0430 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0435\u043a. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCell<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0435\u0451 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic Vector3 Position { \t\tget { \t\t\treturn transform.localPosition; \t\t} \t}<\/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\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432 <code>HexMesh.Triangulate<\/code> \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0446\u0435\u043d\u0442\u0440\u0430 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid Triangulate (HexDirection direction, HexCell cell) { \t\tVector3 center = cell.Position; \t\t&hellip; \t}<\/code><\/pre>\n<p>  \u0418 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 <code>TriangulateConnection<\/code> \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateConnection ( \t\tHexDirection direction, HexCell cell, Vector3 v1, Vector3 v2 \t) { \t\t&hellip;  \t\tVector3 bridge = HexMetrics.GetBridge(direction); \t\tVector3 v3 = v1 + bridge; \t\tVector3 v4 = v2 + bridge; \t\tv3.y = v4.y = neighbor.Position.y;  \t\t&hellip;  \t\tHexCell nextNeighbor = cell.GetNeighbor(direction.Next()); \t\tif (direction &lt;= HexDirection.E &amp;&amp; nextNeighbor != null) { \t\t\tVector3 v5 = v2 + HexMetrics.GetBridge(direction.Next()); \t\t\tv5.y = nextNeighbor.Position.y;  \t\t\t&hellip; \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/leveling-cell-centers\/consistent-heights.png\"\/><\/div>\n<p>  <i>\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/leveling-cell-centers\/leveling-cell-centers.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0451\u0431\u0435\u0440 \u044f\u0447\u0435\u0435\u043a<\/h2>\n<p>  \u0425\u043e\u0442\u044f \u0443 \u044f\u0447\u0435\u0435\u043a \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c, \u043e\u043d\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438. \u0421\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c \u0438\u0445 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/subdividing-cell-edges\/hexagons.png\"\/><\/div>\n<p>  <i>\u0427\u0451\u0442\u043a\u043e \u0432\u0438\u0434\u0438\u043c\u044b\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438.<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0435\u0440\u0448\u0438\u043d, \u0442\u043e \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0431\u044b \u0431\u041e\u043b\u044c\u0448\u0430\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u043e\u0431\u044c\u0451\u043c \u043a\u0430\u0436\u0434\u043e\u0435 \u0440\u0435\u0431\u0440\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0440\u0435\u0431\u0440\u0430 \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u043e\u0439 \u0443\u0433\u043b\u043e\u0432. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e <code>HexMesh.Triangulate<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0435 \u043e\u0434\u0438\u043d, \u0430 \u0434\u0432\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid Triangulate (HexDirection direction, HexCell cell) { \t\tVector3 center = cell.Position; \t\tVector3 v1 = center + HexMetrics.GetFirstSolidCorner(direction); \t\tVector3 v2 = center + HexMetrics.GetSecondSolidCorner(direction);  \t\tVector3 e1 = Vector3.Lerp(v1, v2, 0.5f);  \t\tAddTriangle(center, v1, e1); \t\tAddTriangleColor(cell.color); \t\tAddTriangle(center, e1, v2); \t\tAddTriangleColor(cell.color);  \t\tif (direction &lt;= HexDirection.SE) { \t\t\tTriangulateConnection(direction, cell, v1, v2); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/subdividing-cell-edges\/12-sides.png\"\/><\/div>\n<p>  <i>\u0414\u0432\u0435\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d \u0432\u043c\u0435\u0441\u0442\u043e \u0448\u0435\u0441\u0442\u0438.<\/i><\/p>\n<p>  \u0423\u0434\u0432\u043e\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d \u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0451\u0431\u0440\u0430\u043c \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u041e\u043b\u044c\u0448\u0443\u044e \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0445 \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u0440\u043e\u0432\u043d\u044b\u043c\u0438, \u0443\u0442\u0440\u043e\u0438\u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0435\u0440\u0448\u0438\u043d.<\/p>\n<pre><code class=\"cs\">\t\tVector3 e1 = Vector3.Lerp(v1, v2, 1f \/ 3f); \t\tVector3 e2 = Vector3.Lerp(v1, v2, 2f \/ 3f);  \t\tAddTriangle(center, v1, e1); \t\tAddTriangleColor(cell.color); \t\tAddTriangle(center, e1, e2); \t\tAddTriangleColor(cell.color); \t\tAddTriangle(center, e2, v2); \t\tAddTriangleColor(cell.color);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/subdividing-cell-edges\/18-sides.png\"\/><\/div>\n<p>  <i>18 \u0441\u0442\u043e\u0440\u043e\u043d.<\/i><\/p>\n<h3>\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0440\u0451\u0431\u0435\u0440<\/h3>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0440\u0451\u0431\u0435\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0451\u0431\u0435\u0440 \u0432 <code>TriangulateConnection<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tif (direction &lt;= HexDirection.SE) { \t\t\tTriangulateConnection(direction, cell, v1, e1, e2, v2); \t\t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432 <code>TriangulateConnection<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateConnection ( \t\tHexDirection direction, HexCell cell, \t\tVector3 v1, Vector3 e1, Vector3 e2, Vector3 v2 \t) { \t&hellip; }<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0451\u0431\u0435\u0440 \u0434\u043b\u044f \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0435\u043a. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0441\u0442\u043e\u043c \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043e\u0439.<\/p>\n<pre><code class=\"cs\">\t\tVector3 bridge = HexMetrics.GetBridge(direction); \t\tVector3 v3 = v1 + bridge; \t\tVector3 v4 = v2 + bridge; \t\tv3.y = v4.y = neighbor.Position.y;  \t\tVector3 e3 = Vector3.Lerp(v3, v4, 1f \/ 3f); \t\tVector3 e4 = Vector3.Lerp(v3, v4, 2f \/ 3f);<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044e \u0440\u0435\u0431\u0440\u0430. \u041f\u043e\u043a\u0430 \u043c\u044b \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043a\u043b\u043e\u043d\u044b \u0441 \u0443\u0441\u0442\u0443\u043f\u0430\u043c\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e quad \u0442\u0440\u0438.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.GetEdgeType(direction) == HexEdgeType.Slope) { \t\t\tTriangulateEdgeTerraces(v1, v2, cell, v3, v4, neighbor); \t\t} \t\telse { \t\t\tAddQuad(v1, e1, v3, e3); \t\t\tAddQuadColor(cell.color, neighbor.color); \t\t\tAddQuad(e1, e2, e3, e4); \t\t\tAddQuadColor(cell.color, neighbor.color); \t\t\tAddQuad(e2, v2, e4, v4); \t\t\tAddQuadColor(cell.color, neighbor.color); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/subdividing-cell-edges\/subdivided-connections.png\"\/><\/div>\n<p>  <i>\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f.<\/i><\/p>\n<h3>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d \u0440\u0451\u0431\u0435\u0440<\/h3>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0440\u0435\u0431\u0440\u0430 \u043d\u0430\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u0445 \u0432 \u043d\u0430\u0431\u043e\u0440. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <code>EdgeVertices<\/code>. \u041e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u0438\u0434\u0443\u0449\u0438\u0435 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u043f\u043e \u0440\u0435\u0431\u0440\u0443 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">using UnityEngine;  public struct EdgeVertices {  \tpublic Vector3 v1, v2, v3, v4; }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 \u043e\u043d\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u043c\u0438?<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438. \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0451\u0431\u0435\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u0438\u0445 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e.<\/div>\n<\/div>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0439 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0439\u043c\u0451\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u0440\u0435\u0431\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic EdgeVertices (Vector3 corner1, Vector3 corner2) { \t\tv1 = corner1; \t\tv2 = Vector3.Lerp(corner1, corner2, 1f \/ 3f); \t\tv3 = Vector3.Lerp(corner1, corner2, 2f \/ 3f); \t\tv4 = corner2; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>HexMesh<\/code> \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u0435\u0435\u0440\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0435\u0451 \u0440\u0451\u0431\u0435\u0440.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeFan (Vector3 center, EdgeVertices edge, Color color) { \t\tAddTriangle(center, edge.v1, edge.v2); \t\tAddTriangleColor(color); \t\tAddTriangle(center, edge.v2, edge.v3); \t\tAddTriangleColor(color); \t\tAddTriangle(center, edge.v3, edge.v4); \t\tAddTriangleColor(color); \t}<\/code><\/pre>\n<p>  \u0418 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u043b\u043e\u0441\u044b \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0440\u0451\u0431\u0440\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeStrip ( \t\tEdgeVertices e1, Color c1, \t\tEdgeVertices e2, Color c2 \t) { \t\tAddQuad(e1.v1, e1.v2, e2.v1, e2.v2); \t\tAddQuadColor(c1, c2); \t\tAddQuad(e1.v2, e1.v3, e2.v2, e2.v3); \t\tAddQuadColor(c1, c2); \t\tAddQuad(e1.v3, e1.v4, e2.v3, e2.v4); \t\tAddQuadColor(c1, c2); \t}<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>Triangulate<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid Triangulate (HexDirection direction, HexCell cell) { \t\tVector3 center = cell.Position; \t\tEdgeVertices e = new EdgeVertices( \t\t\tcenter + HexMetrics.GetFirstSolidCorner(direction), \t\t\tcenter + HexMetrics.GetSecondSolidCorner(direction) \t\t);  \t\tTriangulateEdgeFan(center, e, cell.color);  \t\tif (direction &lt;= HexDirection.SE) { \t\t\tTriangulateConnection(direction, cell, e); \t\t} \t}<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a <code>TriangulateConnection<\/code>. \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 <code>TriangulateEdgeStrip<\/code>, \u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u043c\u0435\u043d\u044b. \u0422\u0430\u043c, \u0433\u0434\u0435 \u043c\u044b \u0440\u0430\u043d\u044c\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <code>v1<\/code>, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>e1.v1<\/code>. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, <code>v2<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>e1.v4<\/code>, <code>v3<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>e2.v1<\/code>, \u0430 <code>v4<\/code> \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f <code>e2.v4<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateConnection ( \t\tHexDirection direction, HexCell cell, EdgeVertices e1 \t) { \t\tHexCell neighbor = cell.GetNeighbor(direction); \t\tif (neighbor == null) { \t\t\treturn; \t\t}  \t\tVector3 bridge = HexMetrics.GetBridge(direction); \t\tbridge.y = neighbor.Position.y - cell.Position.y; \t\tEdgeVertices e2 = new EdgeVertices( \t\t\te1.v1 + bridge, \t\t\te1.v4 + bridge \t\t); \t\t \t\tif (cell.GetEdgeType(direction) == HexEdgeType.Slope) { \t\t\tTriangulateEdgeTerraces(e1.v1, e1.v4, cell, e2.v1, e2.v4, neighbor); \t\t} \t\telse { \t\t\tTriangulateEdgeStrip(e1, cell.color, e2, neighbor.color); \t\t} \t\t \t\tHexCell nextNeighbor = cell.GetNeighbor(direction.Next()); \t\tif (direction &lt;= HexDirection.E &amp;&amp; nextNeighbor != null) { \t\t\tVector3 v5 = e1.v4 + HexMetrics.GetBridge(direction.Next()); \t\t\tv5.y = nextNeighbor.Position.y;  \t\t\tif (cell.Elevation &lt;= neighbor.Elevation) { \t\t\t\tif (cell.Elevation &lt;= nextNeighbor.Elevation) { \t\t\t\t\tTriangulateCorner( \t\t\t\t\t\te1.v4, cell, e2.v4, neighbor, v5, nextNeighbor \t\t\t\t\t); \t\t\t\t} \t\t\t\telse { \t\t\t\t\tTriangulateCorner( \t\t\t\t\t\tv5, nextNeighbor, e1.v4, cell, e2.v4, neighbor \t\t\t\t\t); \t\t\t\t} \t\t\t} \t\t\telse if (neighbor.Elevation &lt;= nextNeighbor.Elevation) { \t\t\t\tTriangulateCorner( \t\t\t\t\te2.v4, neighbor, v5, nextNeighbor, e1.v4, cell \t\t\t\t); \t\t\t} \t\t\telse { \t\t\t\tTriangulateCorner( \t\t\t\t\tv5, nextNeighbor, e1.v4, cell, e2.v4, neighbor \t\t\t\t); \t\t\t} \t\t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0443\u043f\u043e\u0432<\/h3>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0443\u0441\u0442\u0443\u043f\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0440\u0451\u0431\u0440\u0430 <code>TriangulateEdgeTerraces<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.GetEdgeType(direction) == HexEdgeType.Slope) { \t\t\tTriangulateEdgeTerraces(e1, cell, e2, neighbor); \t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <code>TriangulateEdgeTerraces<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u043c\u0435\u0436\u0434\u0443 \u0440\u0451\u0431\u0440\u0430\u043c\u0438, \u0430 \u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0430\u0440\u0430\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 <code>EdgeVertices<\/code> \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c <code>TriangulateEdgeTerraces<\/code>, \u0430 \u043d\u0435 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeTerraces ( \t\tEdgeVertices begin, HexCell beginCell, \t\tEdgeVertices end, HexCell endCell \t) { \t\tEdgeVertices e2 = EdgeVertices.TerraceLerp(begin, end, 1); \t\tColor c2 = HexMetrics.TerraceLerp(beginCell.color, endCell.color, 1);  \t\tTriangulateEdgeStrip(begin, beginCell.color, e2, c2);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tEdgeVertices e1 = e2; \t\t\tColor c1 = c2; \t\t\te2 = EdgeVertices.TerraceLerp(begin, end, i); \t\t\tc2 = HexMetrics.TerraceLerp(beginCell.color, endCell.color, i); \t\t\tTriangulateEdgeStrip(e1, c1, e2, c2); \t\t}  \t\tTriangulateEdgeStrip(e2, c2, end, endCell.color); \t}<\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>EdgeVertices.TerraceLerp<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u0443\u0441\u0442\u0443\u043f\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0432\u0441\u0435\u043c\u0438 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043f\u0430\u0440\u0430\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u0432\u0443\u0445 \u0440\u0451\u0431\u0435\u0440.<\/p>\n<pre><code class=\"cs\">\tpublic static EdgeVertices TerraceLerp ( \t\tEdgeVertices a, EdgeVertices b, int step) \t{ \t\tEdgeVertices result; \t\tresult.v1 = HexMetrics.TerraceLerp(a.v1, b.v1, step); \t\tresult.v2 = HexMetrics.TerraceLerp(a.v2, b.v2, step); \t\tresult.v3 = HexMetrics.TerraceLerp(a.v3, b.v3, step); \t\tresult.v4 = HexMetrics.TerraceLerp(a.v4, b.v4, step); \t\treturn result; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/subdividing-cell-edges\/subdivided-terraces.png\"\/><\/div>\n<p>  <i>\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0443\u0441\u0442\u0443\u043f\u044b.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/subdividing-cell-edges\/subdividing-cell-edges.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0417\u0430\u043d\u043e\u0432\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u043e\u0431\u0440\u044b\u0432\u044b \u0438 \u0443\u0441\u0442\u0443\u043f\u044b<\/h2>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0440\u0435\u0449\u0438\u043d\u044b \u0432 \u043c\u0435\u0441\u0442\u0430\u0445 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u043e\u0431\u0440\u044b\u0432\u043e\u0432 \u0438 \u0443\u0441\u0442\u0443\u043f\u043e\u0432. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0438 \u00ab\u043e\u0431\u0440\u044b\u0432-\u0441\u043a\u043b\u043e\u043d-\u0441\u043a\u043b\u043e\u043d\u00bb (\u041e\u0421\u0421) \u0438 \u00ab\u0441\u043a\u043b\u043e\u043d-\u043e\u0431\u0440\u044b\u0432-\u0441\u043a\u043b\u043e\u043d\u00bb (\u0421\u041e\u0421).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/reconnecting-cliffs-and-terraces\/holes.png\"\/><\/div>\n<p>  <i>\u0414\u044b\u0440\u044b \u0432 \u043c\u0435\u0448\u0435.<\/i><\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0433\u0440\u0430\u043d\u0438\u0446 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0438\u0441\u044c. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0438 \u043d\u0435 \u043b\u0435\u0436\u0430\u0442 \u0440\u043e\u0432\u043d\u043e \u043d\u0430 \u0431\u043e\u043a\u0443 \u043e\u0431\u0440\u044b\u0432\u0430, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u0440\u0435\u0449\u0438\u043d\u0435. \u0418\u043d\u043e\u0433\u0434\u0430 \u044d\u0442\u0438 \u0434\u044b\u0440\u044b \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u0440\u043e\u0441\u0430\u044e\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430.<\/p>\n<p>  \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u043c, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0430 \u0442\u043e\u0447\u043a\u0430. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0443 <code>AddTriangle<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u0435\u0440\u0448\u0438\u043d\u044b.<\/p>\n<pre><code class=\"cs\">\tvoid AddTriangleUnperturbed (Vector3 v1, Vector3 v2, Vector3 v3) { \t\tint vertexIndex = vertices.Count; \t\tvertices.Add(v1); \t\tvertices.Add(v2); \t\tvertices.Add(v3); \t\ttriangles.Add(vertexIndex); \t\ttriangles.Add(vertexIndex + 1); \t\ttriangles.Add(vertexIndex + 2); \t}<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>TriangulateBoundaryTriangle<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0445.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateBoundaryTriangle ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 boundary, Color boundaryColor \t) { \t\tVector3 v2 = HexMetrics.TerraceLerp(begin, left, 1); \t\tColor c2 = HexMetrics.TerraceLerp(beginCell.color, leftCell.color, 1);  \t\tAddTriangleUnperturbed(Perturb(begin), Perturb(v2), boundary); \t\tAddTriangleColor(beginCell.color, c2, boundaryColor);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tVector3 v1 = v2; \t\t\tColor c1 = c2; \t\t\tv2 = HexMetrics.TerraceLerp(begin, left, i); \t\t\tc2 = HexMetrics.TerraceLerp(beginCell.color, leftCell.color, i); \t\t\tAddTriangleUnperturbed(Perturb(v1), Perturb(v2), boundary); \t\t\tAddTriangleColor(c1, c2, boundaryColor); \t\t}  \t\tAddTriangleUnperturbed(Perturb(v2), Perturb(left), boundary); \t\tAddTriangleColor(c2, leftCell.color, boundaryColor); \t}<\/code><\/pre>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>v2<\/code> \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u043e\u0447\u043a\u0438, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0435\u0451 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043e\u043d\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043e\u0431\u044a\u0451\u043c \u043a\u043e\u0434\u0430, \u0442\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043d\u0435\u0441\u0451\u043c \u0435\u0451.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateBoundaryTriangle ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 boundary, Color boundaryColor \t) { \t\tVector3 v2 = Perturb(HexMetrics.TerraceLerp(begin, left, 1)); \t\tColor c2 = HexMetrics.TerraceLerp(beginCell.color, leftCell.color, 1);  \t\tAddTriangleUnperturbed(Perturb(begin), v2, boundary); \t\tAddTriangleColor(beginCell.color, c2, boundaryColor);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tVector3 v1 = v2; \t\t\tColor c1 = c2; \t\t\tv2 = Perturb(HexMetrics.TerraceLerp(begin, left, i)); \t\t\tc2 = HexMetrics.TerraceLerp(beginCell.color, leftCell.color, i); \t\t\tAddTriangleUnperturbed(v1, v2, boundary); \t\t\tAddTriangleColor(c1, c2, boundaryColor); \t\t}  \t\tAddTriangleUnperturbed(v2, Perturb(left), boundary); \t\tAddTriangleColor(c2, leftCell.color, boundaryColor); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/reconnecting-cliffs-and-terraces\/unperturbed.png\"\/><\/div>\n<p>  <i>\u041d\u0435\u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u043c\u044b \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438. \u0412\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 <code>TriangulateCornerTerracesCliff<\/code> \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0430\u043c\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u0438 \u0442\u043e\u0447\u043a\u0438 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u044b. \u0427\u0442\u043e\u0431\u044b \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0449\u0435\u043c\u0443\u0441\u044f \u043e\u0431\u0440\u044b\u0432\u0443, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\t\tVector3 boundary = Vector3.Lerp(Perturb(begin), Perturb(right), b);<\/code><\/pre>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430 <code>TriangulateCornerCliffTerraces<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tVector3 boundary = Vector3.Lerp(Perturb(begin), Perturb(left), b);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/reconnecting-cliffs-and-terraces\/closed.png\"\/><\/div>\n<p>  <i>\u0414\u044b\u0440\u044b \u043f\u0440\u043e\u043f\u0430\u043b\u0438.<\/i><\/p>\n<h3>\u0414\u0432\u043e\u0439\u043d\u044b\u0435 \u043e\u0431\u0440\u044b\u0432\u044b \u0438 \u0441\u043a\u043b\u043e\u043d<\/h3>\n<p>  \u0412\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0434\u0432\u0430 \u043e\u0431\u0440\u044b\u0432\u0430 \u0438 \u043e\u0434\u0438\u043d \u0441\u043a\u043b\u043e\u043d.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/reconnecting-cliffs-and-terraces\/double-cliff-slope.png\"\/><\/div>\n<p>  <i>\u0411\u043e\u043b\u044c\u0448\u0430\u044f \u0434\u044b\u0440\u0430 \u0438\u0437-\u0437\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/i><\/p>\n<p>  \u042d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0443\u0447\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u0431\u043b\u043e\u043a\u0435 <code>else<\/code> \u0432 \u043a\u043e\u043d\u0446\u0435 <code>TriangulateCornerTerracesCliff<\/code>.<\/p>\n<pre><code class=\"cs\">\t\telse { \t\t\tAddTriangleUnperturbed(Perturb(left), Perturb(right), boundary); \t\t\tAddTriangleColor(leftCell.color, rightCell.color, boundaryColor); \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>TriangulateCornerCliffTerraces<\/code>.<\/p>\n<pre><code class=\"cs\">\t\telse { \t\t\tAddTriangleUnperturbed(Perturb(left), Perturb(right), boundary); \t\t\tAddTriangleColor(leftCell.color, rightCell.color, boundaryColor); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/reconnecting-cliffs-and-terraces\/double-cliff-closed.png\"\/><\/div>\n<p>  <i>\u0418\u0437\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u043e\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0442\u0440\u0435\u0449\u0438\u043d.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/reconnecting-cliffs-and-terraces\/reconnecting-cliffs-and-terraces.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0414\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u0438\u0441\u043a\u0430\u0436\u0451\u043d\u043d\u044b\u0439 \u043c\u0435\u0448. \u0415\u0433\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0448\u0443\u043c\u0430, \u0435\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 \u0438 \u0441\u0438\u043b \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u044b\u043c. \u0425\u043e\u0442\u044f \u0442\u0430\u043a\u0430\u044f \u043d\u0435\u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043e\u0442\u043a\u043b\u043e\u043d\u044f\u043b\u0438\u0441\u044c \u043e\u0442 \u0440\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0438. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u043c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443. \u0418 \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u044f\u0447\u0435\u0435\u043a \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0442\u043e \u043d\u0430\u043c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043d\u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/tweaking\/unperturbed.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/tweaking\/perturbed.png\"\/><\/div>\n<p>  <i>\u041d\u0435\u0438\u0441\u043a\u0430\u0436\u0451\u043d\u043d\u0430\u044f \u0438 \u0438\u0441\u043a\u0430\u0436\u0451\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0438.<\/i><\/p>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0441\u0438\u043b\u0430 5 \u0434\u043b\u044f \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u0430.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 54.4366%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/HarmlessEnormousDeer\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0418\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a \u043e\u0442 0 \u0434\u043e 5.<\/i><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0435\u0451 \u0434\u043e 4, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e \u0441\u0435\u0442\u043a\u0438, \u043d\u0435 \u0434\u0435\u043b\u0430\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0451 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439. \u042d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043d\u0430\u043c, \u0447\u0442\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e XZ \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u221a32 \u2248 5.66 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic const float cellPerturbStrength = 4f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/tweaking\/perturbation-4.png\"\/><\/div>\n<p>  <i>\u0421\u0438\u043b\u0430 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a 4.<\/i><br \/>  \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u2014 \u044d\u0442\u043e \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0446\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0435\u0433\u043e, \u0442\u043e \u043f\u043b\u043e\u0441\u043a\u0438\u0435 \u0446\u0435\u043d\u0442\u0440\u044b \u044f\u0447\u0435\u0435\u043a \u0441\u0442\u0430\u043d\u0443\u0442 \u0431\u043e\u043b\u044c\u0448\u0435, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u0443\u0442 \u0431\u043e\u043b\u0435\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u043c\u0438.<\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 54.9028%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/BackFewAplomadofalcon\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0446\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043e\u0442 0.75 \u0434\u043e 0.95.<\/i><\/p>\n<p>  \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0446\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u043e 0.8 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u043d\u0430\u0448\u0443 \u0436\u0438\u0437\u043d\u044c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic const float solidFactor = 0.8f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/tweaking\/solid-factor.png\"\/><\/div>\n<p>  <i>\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0446\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 0.8.<\/i><\/p>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0432\u044b\u0441\u043e\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0440\u0435\u0437\u043a\u0438\u0435. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u0448\u0430, \u043d\u043e \u043c\u044b \u0441 \u044d\u0442\u0438\u043c \u0443\u0436\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0435\u0451 \u0434\u043e 1 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043d\u0430 \u0441\u0442\u0443\u043f\u0435\u043d\u044c \u0443\u0441\u0442\u0443\u043f\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e 3.<\/p>\n<pre><code class=\"cs\">\tpublic const float elevationStep = 3f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/tweaking\/elevation-step-3.png\"\/><\/div>\n<p>  <i>\u0428\u0430\u0433 \u0432\u044b\u0441\u043e\u0442\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d \u0434\u043e 3.<\/i><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0438\u043b\u0443 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442\u044b. \u041d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1.5, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0448\u0430\u0433\u0430 \u0432\u044b\u0441\u043e\u0442\u044b, \u0447\u0442\u043e \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u043e\u0438\u0442.<\/p>\n<p>  \u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0448\u0430\u0433\u0438 \u0432\u044b\u0441\u043e\u0442 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0441\u0435\u043c\u044c \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u044b\u0441\u043e\u0442\u044b. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/tweaking\/more-elevation-levels.png\"\/><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0435\u043c\u044c \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u0432\u044b\u0441\u043e\u0442.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-4\/tweaking\/tweaking.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 5: \u043a\u0430\u0440\u0442\u044b \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u0441\u0435\u0442\u043a\u0443 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b.<\/li>\n<li>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u0430\u043c\u0435\u0440\u043e\u0439.<\/li>\n<li>\u0420\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0446\u0432\u0435\u0442\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u0443\u044e \u043a\u0438\u0441\u0442\u044c \u044f\u0447\u0435\u0435\u043a.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u043e\u0439. \u041d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0435\u0451 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/tutorial-image.jpg\"\/><\/div>\n<p>  <i>\u041f\u0440\u0438\u0448\u043b\u0430 \u043f\u043e\u0440\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431.<\/i><\/p>\n<h2>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0441\u0435\u0442\u043a\u0438<\/h2>\n<p>  \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0435\u0442\u043a\u0443 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443\u043f\u0440\u0451\u043c\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u043e\u0434\u0438\u043d \u043c\u0435\u0448. \u041a\u0430\u043a \u0436\u0435 \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443? \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0448\u0435\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u0448\u0443 \u0441\u0435\u0442\u043a\u0443 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/chunks.png\"\/><\/div>\n<p>  <i>\u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u043a\u0438 \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b 3 \u043d\u0430 3.<\/i><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u043b\u043e\u043a\u0438 5 \u043d\u0430 5, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e 25 \u044f\u0447\u0435\u0435\u043a \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0438\u0445 \u0432 <code>HexMetrics<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic const int chunkSizeX = 5, chunkSizeZ = 5;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u043b\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0435\u0448\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u043d\u043e \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438. \u041d\u043e \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435 \u043e\u043d\u0438 \u043e\u0442\u0441\u0435\u043a\u0430\u044e\u0442\u0441\u044f \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u043e\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (frustum culling), \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c.<\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0435\u0442\u043a\u0438 \u043b\u044e\u0431\u043e\u0439 \u0440\u0430\u0437\u043c\u0435\u0440, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043c <code>HexGrid<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0437\u0430\u0434\u0430\u0432\u0430\u043b \u0435\u0451 \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044f\u0447\u0435\u0439\u043a\u0430\u0445, \u0430 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0445. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0437\u043c\u0435\u0440 4 \u043d\u0430 3 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e 12 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 300 \u044f\u0447\u0435\u0435\u043a. \u0422\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443.<\/p>\n<pre><code class=\"cs\">\tpublic int chunkCountX = 4, chunkCountZ = 3;<\/code><\/pre>\n<p>  \u041c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <code>width<\/code> \u0438 <code>height<\/code>, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0442\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043d\u044b\u043c\u0438. \u0418 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0438\u0445 \u0432 <code>cellCountX<\/code> \u0438 <code>cellCountZ<\/code>. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0437\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437. \u0422\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u043b\u0438 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic int width = 6; \/\/\tpublic int height = 6; \t \tint cellCountX, cellCountZ;<\/code><\/pre>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/chunk-count.png\"\/><\/div>\n<p>  <i>\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0445.<\/i><\/p>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>Awake<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u043b\u043e\u0441\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0447\u0435\u0435\u043a. \u0412\u044b\u0434\u0435\u043b\u0438\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0441\u043e\u0440\u044f\u0442\u044c <code>Awake<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource;  \t\tgridCanvas = GetComponentInChildren&lt;Canvas&gt;(); \t\thexMesh = GetComponentInChildren&lt;HexMesh&gt;();  \t\tcellCountX = chunkCountX * HexMetrics.chunkSizeX; \t\tcellCountZ = chunkCountZ * HexMetrics.chunkSizeZ;  \t\tCreateCells(); \t}  \tvoid CreateCells () { \t\tcells = new HexCell[cellCountZ * cellCountX];  \t\tfor (int z = 0, i = 0; z &lt; cellCountZ; z++) { \t\t\tfor (int x = 0; x &lt; cellCountX; x++) { \t\t\t\tCreateCell(x, z, i++); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u0440\u0435\u0444\u0430\u0431 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430<\/h3>\n<p>  \u0414\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0435\u0442\u043a\u0438 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<pre><code class=\"cs\">using UnityEngine; using UnityEngine.UI;  public class HexGridChunk : MonoBehaviour { }<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u0435\u0444\u0430\u0431 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e, \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0432 \u043e\u0431\u044a\u0435\u043a\u0442 <em>Hex Grid<\/em> \u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u0432 <em>Hex Grid Chunk<\/em>. \u0423\u0434\u0430\u043b\u0438\u043c \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>HexGrid<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>HexGridChunk<\/code>. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u0435\u0433\u043e \u0432 \u043f\u0440\u0435\u0444\u0430\u0431 \u0438 \u0443\u0434\u0430\u043b\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0437 \u0441\u0446\u0435\u043d\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/chunk-prefab-project.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/chunk-prefab-inspector.png\"\/><\/div>\n<p>  <i>\u041f\u0440\u0435\u0444\u0430\u0431 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0441 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c canvas \u0438 \u043c\u0435\u0448\u0435\u043c.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u044d\u0442\u0438\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c <code>HexGrid<\/code>, \u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u0440\u0435\u0444\u0430\u0431 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic HexGridChunk chunkPrefab;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/grid-with-chunk-prefab.png\"\/><\/div>\n<p>  <i>\u0422\u0435\u043f\u0435\u0440\u044c \u0441 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u043e \u043c\u043d\u043e\u0433\u043e\u043c \u043f\u043e\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u044f\u0447\u0435\u0435\u043a. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0430 \u0434\u043b\u044f \u0435\u0433\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0434\u0432\u043e\u0439\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\tHexGridChunk[] chunks;  \tvoid Awake () { \t\t&hellip;  \t\tCreateChunks(); \t\tCreateCells(); \t}  \tvoid CreateChunks () { \t\tchunks = new HexGridChunk[chunkCountX * chunkCountZ];  \t\tfor (int z = 0, i = 0; z &lt; chunkCountZ; z++) { \t\t\tfor (int x = 0; x &lt; chunkCountX; x++) { \t\t\t\tHexGridChunk chunk = chunks[i++] = Instantiate(chunkPrefab); \t\t\t\tchunk.transform.SetParent(transform); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0442\u043e, \u043a\u0430\u043a \u043c\u044b \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0441\u0435\u0442\u043a\u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041e\u043d\u0430 \u0437\u0430\u0434\u0430\u0451\u0442 \u0432\u0441\u0451 \u0432 <code>Awake<\/code> \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044e \u0432 <code>Start<\/code>. \u0414\u043b\u044f \u043d\u0435\u0451 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0435\u0451 canvas \u0438 \u043c\u0435\u0448, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a. \u041e\u0434\u043d\u0430\u043a\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u0438\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u0435\u0442\u043a\u0430.<\/p>\n<pre><code class=\"cs\">public class HexGridChunk : MonoBehaviour {  \tHexCell[] cells;  \tHexMesh hexMesh; \tCanvas gridCanvas;  \tvoid Awake () { \t\tgridCanvas = GetComponentInChildren&lt;Canvas&gt;(); \t\thexMesh = GetComponentInChildren&lt;HexMesh&gt;();  \t\tcells = new HexCell[HexMetrics.chunkSizeX * HexMetrics.chunkSizeZ]; \t} \t \tvoid Start () { \t\thexMesh.Triangulate(cells); \t} }<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c<\/h3>\n<p>  <code>HexGrid<\/code> \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u043a \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u043c\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443, \u0430 \u043d\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0448\u0430 \u0438 canvas.<\/p>\n<pre><code class=\"cs\">\tvoid CreateCell (int x, int z, int i) { \t\t&hellip;  \t\tHexCell cell = cells[i] = Instantiate&lt;HexCell&gt;(cellPrefab); \/\/\t\tcell.transform.SetParent(transform, false); \t\tcell.transform.localPosition = position; \t\tcell.coordinates = HexCoordinates.FromOffsetCoordinates(x, z); \t\tcell.color = defaultColor;  \t\t&hellip;  \t\tText label = Instantiate&lt;Text&gt;(cellLabelPrefab); \/\/\t\tlabel.rectTransform.SetParent(gridCanvas.transform, false); \t\tlabel.rectTransform.anchoredPosition = \t\t\tnew Vector2(position.x, position.z); \t\tlabel.text = cell.coordinates.ToStringOnSeparateLines(); \t\tcell.uiRect = label.rectTransform;  \t\tcell.Elevation = 0;  \t\tAddCellToChunk(x, z, cell); \t} \t \tvoid AddCellToChunk (int x, int z, HexCell cell) { \t}<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043b\u0435\u043d\u0438\u044f <code>x<\/code> \u0438 <code>z<\/code> \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid AddCellToChunk (int x, int z, HexCell cell) { \t\tint chunkX = x \/ HexMetrics.chunkSizeX; \t\tint chunkZ = z \/ HexMetrics.chunkSizeZ; \t\tHexGridChunk chunk = chunks[chunkX + chunkZ * chunkCountX]; \t}<\/code><\/pre>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u044d\u0442\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443 \u043a \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443.<\/p>\n<pre><code class=\"cs\">\tvoid AddCellToChunk (int x, int z, HexCell cell) { \t\tint chunkX = x \/ HexMetrics.chunkSizeX; \t\tint chunkZ = z \/ HexMetrics.chunkSizeZ; \t\tHexGridChunk chunk = chunks[chunkX + chunkZ * chunkCountX];  \t\tint localX = x - chunkX * HexMetrics.chunkSizeX; \t\tint localZ = z - chunkZ * HexMetrics.chunkSizeZ; \t\tchunk.AddCell(localX + localZ * HexMetrics.chunkSizeX, cell); \t}<\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c <code>HexGridChunk.AddCell<\/code> \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0443 \u0432 \u0435\u0451 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u0430 \u043f\u043e\u0442\u043e\u043c \u043e\u043d \u0437\u0430\u0434\u0430\u0451\u0442 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u0435\u0451 UI.<\/p>\n<pre><code class=\"cs\">\tpublic void AddCell (int index, HexCell cell) { \t\tcells[index] = cell; \t\tcell.transform.SetParent(transform, false); \t\tcell.uiRect.SetParent(gridCanvas.transform, false); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u043e\u0434\u0447\u0438\u0441\u0442\u043a\u0430<\/h3>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 <code>HexGrid<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0441\u0432\u043e\u0438\u0445 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 canvas \u0438 \u043c\u0435\u0448\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0442 \u043a\u043e\u0434\u0430.<\/p>\n<pre><code class=\"cs\">\/\/\tCanvas gridCanvas; \/\/\tHexMesh hexMesh;  \tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource;  \/\/\t\tgridCanvas = GetComponentInChildren&lt;Canvas&gt;(); \/\/\t\thexMesh = GetComponentInChildren&lt;HexMesh&gt;();  \t\t&hellip; \t}  \/\/\tvoid Start () { \/\/\t\thexMesh.Triangulate(cells); \/\/\t}  \/\/\tpublic void Refresh () { \/\/\t\thexMesh.Triangulate(cells); \/\/\t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u043e\u0442 <code>Refresh<\/code>, \u0442\u043e <code>HexMapEditor<\/code> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tvoid EditCell (HexCell cell) { \t\tcell.color = activeColor; \t\tcell.Elevation = activeElevation; \/\/\t\thexGrid.Refresh(); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/clean-hex-grid.png\"\/><\/div>\n<p>  <i>\u041e\u0447\u0438\u0449\u0435\u043d\u043d\u0430\u044f \u0441\u0435\u0442\u043a\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432.<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 Play \u043a\u0430\u0440\u0442\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435. \u041d\u043e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u0440\u0443\u0433\u043e\u0439. <em>Hex Grid<\/em> \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u043c\u0435\u0448 \u0438 canvas.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/chunk-child-objects.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play.<\/i><\/p>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043c\u0435\u0442\u043a\u0430\u043c\u0438 \u044f\u0447\u0435\u0435\u043a. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043c\u044b \u0437\u0430\u0434\u0430\u043b\u0438 \u0448\u0438\u0440\u0438\u043d\u0443 \u043c\u0435\u0442\u043a\u0438 5. \u042d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0435. \u041d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043a\u0430\u043a \u221210, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0440\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430. \u041e\u043d\u0438 \u043d\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u044f\u0442\u0441\u044f \u0438 \u0431\u0443\u0434\u0443\u0442 \u0443\u0440\u0435\u0437\u0430\u043d\u044b. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0448\u0438\u0440\u0438\u043d\u0443 \u043c\u0435\u0442\u043a\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e 10, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/cell-label-width.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/4x3-chunks.png\"\/><\/div>\n<p>  <i>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438 \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b! \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u044e \u0441\u0435\u0442\u043a\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0442\u043e \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u0430\u0440\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<h3>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0441\u0435\u0442\u043a\u0443. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>Refresh<\/code> \u0432 <code>HexGridChunk<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void Refresh () { \t\thexMesh.Triangulate(cells); \t}<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434? \u041c\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0432\u0441\u044e \u0441\u0435\u0442\u043a\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043c\u0435\u0448. \u041d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u0438\u0445, \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0435\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u0430\u0440\u0442 \u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>  \u041d\u043e \u043a\u0430\u043a \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043d\u0430\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c? \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0437\u043d\u0430\u043b\u0430, \u043a\u0430\u043a\u043e\u043c\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443 \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442. \u0422\u043e\u0433\u0434\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u0430\u0434\u0438\u043c <code>HexCell<\/code> \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0435\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442.<\/p>\n<pre><code class=\"cs\">\tpublic HexGridChunk chunk;<\/code><\/pre>\n<p>  <code>HexGridChunk<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0435\u0431\u044f \u043a \u044f\u0447\u0435\u0439\u043a\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic void AddCell (int index, HexCell cell) { \t\tcells[index] = cell; \t\tcell.chunk = this; \t\tcell.transform.SetParent(transform, false); \t\tcell.uiRect.SetParent(gridCanvas.transform, false); \t}<\/code><\/pre>\n<p>  \u0421\u043e\u0435\u0434\u0438\u043d\u0438\u0432 \u0438\u0445, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a <code>HexCell<\/code> \u0438 \u043c\u0435\u0442\u043e\u0434 <code>Refresh<\/code>. \u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442.<\/p>\n<pre><code class=\"cs\">\tvoid Refresh () { \t\tchunk.Refresh(); \t}<\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c <code>HexCell.Refresh<\/code> \u043e\u0431\u0449\u0438\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0430\u043c\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u043b\u0443\u0447\u0448\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0431\u044b\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0431\u044b\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0435\u0451 \u0432\u044b\u0441\u043e\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic int Elevation { \t\tget { \t\t\treturn elevation; \t\t} \t\tset { \t\t\t&hellip; \t\t\tRefresh(); \t\t} \t}<\/code><\/pre>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0435\u0451 \u0432\u044b\u0441\u043e\u0442\u0430 \u0441\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0415\u0439 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043c \u0435\u0439 \u0442\u0443 \u0436\u0435 \u0432\u044b\u0441\u043e\u0442\u0443, \u0447\u0442\u043e \u0438 \u0440\u0430\u043d\u044c\u0448\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0435\u0442\u0442\u0435\u0440\u0430.<\/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\t&hellip; \t\t} \t}<\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0441\u043e\u0442\u0435 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b \u0441\u0435\u0442\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0431\u044b\u043b\u043e \u0442\u0430\u043a\u043e\u0435, \u043a\u0430\u043a\u043e\u0435 \u043c\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.<\/p>\n<pre><code class=\"cs\">\tint elevation = int.MinValue;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 int.MinValue?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c integer. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 C# integer \u2014 <br \/>  \u044d\u0442\u043e 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 2<sup>32<\/sup> \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 integer, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043d\u0430 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043d\u043e\u043b\u044c. \u0414\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0447\u0438\u0441\u043b\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0431\u0438\u0442.<\/p>\n<p>  \u041c\u0438\u043d\u0438\u043c\u0443\u043c \u2014 \u044d\u0442\u043e \u22122<sup>31<\/sup> = \u22122 147 483 648. \u041c\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u0442\u044b!<\/p>\n<p>  \u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0440\u0430\u0432\u0435\u043d 2<sup>31<\/sup> \u2212 1 = 2 147 483 647. \u042d\u0442\u043e \u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0443 \u043c\u0435\u043d\u044c\u0448\u0435 2<sup>31<\/sup> \u0438\u0437-\u0437\u0430 \u043d\u0443\u043b\u044f.<\/div>\n<\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u044f\u0447\u0435\u0439\u043a\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u0436\u0435 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0435\u0433\u043e \u0432 <code>Color<\/code> \u0441 \u043f\u0440\u043e\u043f\u0438\u0441\u043d\u043e\u0439 \u0431\u0443\u043a\u0432\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0441 \u0447\u0430\u0441\u0442\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>color<\/code>. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0446\u0432\u0435\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0447\u0451\u0440\u043d\u044b\u0439, \u0447\u0442\u043e \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442.<\/p>\n<pre><code class=\"cs\">\tpublic Color Color { \t\tget { \t\t\treturn color; \t\t} \t\tset { \t\t\tif (color == value) { \t\t\t\treturn; \t\t\t} \t\t\tcolor = value; \t\t\tRefresh(); \t\t} \t}  \tColor color;<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 Play \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c null-reference exceptions. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043b\u0438 \u0446\u0432\u0435\u0442\u0443 \u0438 \u0432\u044b\u0441\u043e\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0451 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0447\u0442\u043e \u043c\u044b \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0439 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043c\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d.<\/p>\n<pre><code class=\"cs\">\tvoid Refresh () { \t\tif (chunk) { \t\t\tchunk.Refresh(); \t\t} \t}<\/code><\/pre>\n<p>  \u041c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0441\u043d\u043e\u0432\u0430 \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438! \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041f\u0440\u0438 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0434\u043e\u043b\u044c \u0433\u0440\u0430\u043d\u0438\u0446 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0448\u0432\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/incorrect-editing.png\"\/><\/div>\n<p>  <i>\u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/i><\/p>\n<p>  \u042d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u0441\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0435\u0451 \u0441\u043e\u0441\u0435\u0434\u044f\u043c\u0438 \u0442\u043e\u0436\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f. \u0410 \u044d\u0442\u0438 \u0441\u043e\u0441\u0435\u0434\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u0445. \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0435\u043a, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid Refresh () { \t\tif (chunk) { \t\t\tchunk.Refresh(); \t\t\tfor (int i = 0; i &lt; neighbors.Length; i++) { \t\t\t\tHexCell neighbor = neighbors[i]; \t\t\t\tif (neighbor != null &amp;&amp; neighbor.chunk != chunk) { \t\t\t\t\tneighbor.chunk.Refresh(); \t\t\t\t} \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044c \u044d\u0442\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043e\u0434\u0438\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u0410 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f\u0447\u0435\u0435\u043a \u0437\u0430 \u0440\u0430\u0437, \u0432\u0441\u0451 \u0441\u0442\u0430\u043d\u0435\u0442 \u0435\u0449\u0451 \u0445\u0443\u0436\u0435.<\/p>\n<p>  \u041d\u043e \u043c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0448\u0435\u043c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435, \u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a <code>HexGridChunk<\/code> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041f\u0440\u0438 \u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0435\u0433\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442. \u041f\u043e\u0437\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430. \u041c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044e \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0438 \u0441\u043d\u043e\u0432\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442.<\/p>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>LateUpdate<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>Update<\/code>, \u0447\u0442\u043e\u0431\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic void Refresh () { \/\/\t\thexMesh.Triangulate(cells); \t\tenabled = true; \t}  \tvoid LateUpdate () { \t\thexMesh.Triangulate(cells); \t\tenabled = false; \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412 \u0447\u0451\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 Update \u0438 LateUpdate?<\/b><\/p>\n<div class=\"spoiler_text\">\u0412 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0430\u0434\u0440\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>Update<\/code> \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u044d\u0442\u0430\u043f\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041f\u043e\u0441\u043b\u0435 \u0438\u0445 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 <code>LateUpdate<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f, \u0440\u0430\u043d\u043d\u0438\u0439 \u0438 \u043f\u043e\u0437\u0434\u043d\u0438\u0439.<\/div>\n<\/div>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430\u0448 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u043a\u043b\u044e\u0447\u0451\u043d, \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044e \u0432 <code>Start<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\/\/\tvoid Start () { \/\/\t\thexMesh.Triangulate(cells); \/\/\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/20x20-chunks.png\"\/><\/div>\n<p>  <i>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b 20 \u043d\u0430 20, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 10 000 \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<h3>\u041e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438<\/h3>\n<p>  \u0425\u043e\u0442\u044f \u043c\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0441\u0435\u0442\u043a\u0438, <code>HexMesh<\/code> \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u0435\u043c \u0436\u0435. \u0412\u0441\u0451, \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u044f\u0447\u0435\u0435\u043a. \u0415\u043c\u0443 \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043e\u0434\u0438\u043d \u043b\u0438 \u043c\u0435\u0448 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0438\u043b\u0438 \u0438\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e. \u041d\u043e \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0448\u0435\u0439. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u0442\u044c?<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 <code>HexMesh<\/code> \u0441\u043f\u0438\u0441\u043a\u0438 \u043f\u043e \u0441\u0443\u0442\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438. \u041e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438. \u0410 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0437\u0430 \u0440\u0430\u0437. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043d\u0430\u0431\u043e\u0440 \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u0430 \u043d\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430\u0431\u043e\u0440\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u0435\u0448\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u042d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0441\u0434\u0435\u043b\u0430\u0432 \u0441\u043f\u0438\u0441\u043a\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tstatic List&lt;Vector3&gt; vertices = new List&lt;Vector3&gt;(); \tstatic List&lt;Color&gt; colors = new List&lt;Color&gt;(); \tstatic List&lt;int&gt; triangles = new List&lt;int&gt;();  \tvoid Awake () { \t\tGetComponent&lt;MeshFilter&gt;().mesh = hexMesh = new Mesh(); \t\tmeshCollider = gameObject.AddComponent&lt;MeshCollider&gt;(); \t\thexMesh.name = &quot;Hex Mesh&quot;; \/\/\t\tvertices = new List&lt;Vector3&gt;(); \/\/\t\tcolors = new List&lt;Color&gt;(); \/\/\t\ttriangles = new List&lt;int&gt;(); \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u0430\u0436\u043d\u044b?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0441\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043e\u043d\u043e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u043e\u0438\u0442 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0430\u0441 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u042d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u0430\u0440\u0442\u044b 20 \u043d\u0430 20 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u044d\u0442\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 100\u041c\u0411.<\/p><\/div>\n<\/div>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/grid-chunks\/grid-chunks.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u043c\u0435\u0440\u043e\u0439<\/h2>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u0430\u043c\u0435\u0440\u0430 \u2014 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u043e \u043e\u043d\u0430 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0435\u0451 \u0443\u0432\u0438\u0434\u0435\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u044e \u043a\u0430\u0440\u0442\u0443, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u043c\u0435\u0440\u0443, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0443\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u044d\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442-\u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0443 \u0438 \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e <em>Hex Map Camera<\/em>. \u0421\u0431\u0440\u043e\u0441\u0438\u043c \u0435\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 transform, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0441\u044f \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u043d\u0435 \u043c\u0435\u043d\u044f\u044f \u0435\u0433\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <em>Swivel<\/em>, \u0430 \u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <em>Stick<\/em>. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043a\u0430\u043c\u0435\u0440\u0443 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c Stick, \u0438 \u0441\u0431\u0440\u043e\u0441\u0438\u043c \u0435\u0451 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 transform.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/hierarchy.png\"\/><\/div>\n<p>  <i>\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u043a\u0430\u043c\u0435\u0440\u044b.<\/i><\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u0448\u0430\u0440\u043d\u0438\u0440\u0430 \u043a\u0430\u043c\u0435\u0440\u044b (Swivel) \u2014 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0433\u043b\u043e\u043c, \u043f\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043a\u0430\u043c\u0435\u0440\u0430 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 (45, 0, 0). \u0420\u0443\u0447\u043a\u0430 (Stick) \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0430\u043c\u0435\u0440. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u044e (0, 0, -45).<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439. \u041d\u0430\u0437\u043d\u0430\u0447\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a\u043e\u0440\u043d\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b. \u0414\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0448\u0430\u0440\u043d\u0438\u0440 \u0438 \u0440\u0443\u0447\u043a\u0443, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0438\u0445 \u0432 <code>Awake<\/code>.<\/p>\n<pre><code class=\"cs\">using UnityEngine;  public class HexMapCamera : MonoBehaviour {  \tTransform swivel, stick;  \tvoid Awake () { \t\tswivel = transform.GetChild(0); \t\tstick = swivel.GetChild(0); \t} }<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/inspector.png\"\/><\/div>\n<p>  <i>\u041a\u0430\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432.<\/i><\/p>\n<h3>\u0417\u0443\u043c<\/h3>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u2014 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 (\u0437\u0443\u043c). \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u043c \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0437\u0443\u043c\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 float. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442\u0434\u0430\u043b\u0438\u043b\u0438\u0441\u044c, \u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1 \u2014 \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u043b\u0438\u0441\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0443\u043c\u0430.<\/p>\n<pre><code class=\"cs\">\tfloat zoom = 1f;<\/code><\/pre>\n<p>  \u0417\u0443\u043c \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u043a\u043e\u043b\u0435\u0441\u043e\u043c \u043c\u044b\u0448\u0438 \u0438\u043b\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0441\u0438 \u0432\u0432\u043e\u0434\u0430 <em>Mouse ScrollWheel<\/em> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>Update<\/code>, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0435\u043b\u044c\u0442\u044b \u0432\u0432\u043e\u0434\u0430, \u0438 \u043f\u0440\u0438 \u0435\u0451 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u0443\u043c\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid Update () { \t\tfloat zoomDelta = Input.GetAxis(&quot;Mouse ScrollWheel&quot;); \t\tif (zoomDelta != 0f) { \t\t\tAdjustZoom(zoomDelta); \t\t} \t} \t \tvoid AdjustZoom (float delta) { \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0440\u043e\u0432\u043d\u044f \u0437\u0443\u043c\u0430 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0434\u0435\u043b\u044c\u0442\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (clamp), \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 0&ndash;1.<\/p>\n<pre><code class=\"cs\">\tvoid AdjustZoom (float delta) { \t\tzoom = Mathf.Clamp01(zoom + delta); \t}<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043e\u0442\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0438 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u0437\u0443\u043c\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u043a\u0430\u043c\u0435\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043c\u0435\u043d\u044f\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0440\u0443\u0447\u043a\u0438 \u043f\u043e Z. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u0432\u0435 \u043e\u0431\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 float \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0440\u0443\u0447\u043a\u0438 \u043f\u0440\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0437\u0443\u043c\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043a\u0430\u0440\u0442\u0443, \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f -250 \u0438 -45.<\/p>\n<pre><code class=\"cs\">\tpublic float stickMinZoom, stickMaxZoom;<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u0443\u043c\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0443\u043c\u0430. \u0417\u0430\u0442\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0440\u0443\u0447\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid AdjustZoom (float delta) { \t\tzoom = Mathf.Clamp01(zoom + delta);  \t\tfloat distance = Mathf.Lerp(stickMinZoom, stickMaxZoom, zoom); \t\tstick.localPosition = new Vector3(0f, 0f, distance); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/stick-min-max.png\"\/><\/div>\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\/SpiritedMasculineHerald\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Stick.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0443\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u043e \u043f\u043e\u043a\u0430 \u043e\u043d \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u0435\u043d. \u041e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u0438 \u043e\u0442\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u0437\u0443\u043c\u0430 \u043a\u0430\u043c\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u0432 \u0432\u0438\u0434 \u0441\u0432\u0435\u0440\u0445\u0443. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u043c \u0448\u0430\u0440\u043d\u0438\u0440\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 min \u0438 max \u0438 \u0434\u043b\u044f \u0448\u0430\u0440\u043d\u0438\u0440\u0430. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 90 \u0438 45.<\/p>\n<pre><code class=\"cs\">\tpublic float swivelMinZoom, swivelMaxZoom;<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439 \u0440\u0443\u0447\u043a\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0443\u0433\u043b\u0430 \u0437\u0443\u043c\u0430. \u0417\u0430\u0442\u0435\u043c \u0437\u0430\u0434\u0430\u0451\u043c \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0448\u0430\u0440\u043d\u0438\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid AdjustZoom (float delta) { \t\tzoom = Mathf.Clamp01(zoom + delta);  \t\tfloat distance = Mathf.Lerp(stickMinZoom, stickMaxZoom, zoom); \t\tstick.localPosition = new Vector3(0f, 0f, distance);  \t\tfloat angle = Mathf.Lerp(swivelMinZoom, swivelMaxZoom, zoom); \t\tswivel.localRotation = Quaternion.Euler(angle, 0f, 0f); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/swivel-min-max.png\"\/><\/div>\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\/UnsightlyUniqueAddax\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Swivel.<\/i><\/p>\n<p>  \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u0443\u043c\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u0432\u043e\u0434\u0430 \u043a\u043e\u043b\u0435\u0441\u0430 \u043c\u044b\u0448\u0438. \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432 <em>Edit \/ Project Settings \/ Input<\/em>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0438\u0445 \u0441 0.1 \u043d\u0430 0.025, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435 \u0438 \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0437\u0443\u043c\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/scroll-wheel-input.png\"\/><\/div>\n<p>  <i>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u0430 \u043a\u043e\u043b\u0435\u0441\u0430 \u043c\u044b\u0448\u0438.<\/i><\/p>\n<h3>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u043a\u0430\u043c\u0435\u0440\u044b. \u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 X \u0438 Z \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 <code>Update<\/code>, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0437\u0443\u043c\u043e\u043c. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0438 \u0432\u0432\u043e\u0434\u0430 <em>Horizontal<\/em> \u0438 <em>Vertical<\/em>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438 \u0438 \u043a\u043b\u0430\u0432\u0438\u0448\u0430\u043c\u0438 WASD.<\/p>\n<pre><code class=\"cs\">\tvoid Update () { \t\tfloat zoomDelta = Input.GetAxis(&quot;Mouse ScrollWheel&quot;); \t\tif (zoomDelta != 0f) { \t\t\tAdjustZoom(zoomDelta); \t\t}  \t\tfloat xDelta = Input.GetAxis(&quot;Horizontal&quot;); \t\tfloat zDelta = Input.GetAxis(&quot;Vertical&quot;); \t\tif (xDelta != 0f || zDelta != 0f) { \t\t\tAdjustPosition(xDelta, zDelta); \t\t} \t}  \tvoid AdjustPosition (float xDelta, float zDelta) { \t}<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u0430\u043c\u0435\u0440\u044b, \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a \u043d\u0435\u0439 \u0434\u0435\u043b\u044c\u0442 X \u0438 Z \u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<pre><code class=\"cs\">\tvoid AdjustPosition (float xDelta, float zDelta) { \t\tVector3 position = transform.localPosition; \t\tposition += new Vector3(xDelta, 0f, zDelta); \t\ttransform.localPosition = position; \t}<\/code><\/pre>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043a\u0430\u043c\u0435\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0440\u0435\u043b\u043e\u043a \u0438\u043b\u0438 WASD, \u043d\u043e \u043d\u0435 \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043a\u0430\u0434\u0440\u043e\u0432. \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0435\u043b\u044c\u0442\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u0449\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>moveSpeed<\/code> \u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 100, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u043d\u043e\u0436\u0438\u043c \u0435\u0451 \u043d\u0430 \u0434\u0435\u043b\u044c\u0442\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0435\u043b\u044c\u0442\u0443 \u043f\u043e\u0437\u0438\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic float moveSpeed; \t\t\t\t\t\t \tvoid AdjustPosition (float xDelta, float zDelta) { \t\tfloat distance = moveSpeed * Time.deltaTime; \t\t \t\tVector3 position = transform.localPosition; \t\tposition += new Vector3(xDelta, 0f, zDelta) * distance; \t\ttransform.localPosition = position; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/move-speed.png\"\/><\/div>\n<p>  <i>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0432\u0434\u043e\u043b\u044c \u043e\u0441\u0435\u0439 X \u0438\u043b\u0438 Z. \u041d\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u0432\u0434\u043e\u043b\u044c \u043e\u0431\u0435\u0438\u0445 \u043e\u0441\u0435\u0439 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e (\u043f\u043e \u0434\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u0438) \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u0435\u043b\u044c\u0442\u044b. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid AdjustPosition (float xDelta, float zDelta) { \t\tVector3 direction = new Vector3(xDelta, 0f, zDelta).normalized; \t\tfloat distance = moveSpeed * Time.deltaTime;  \t\tVector3 position = transform.localPosition; \t\tposition += direction * distance; \t\ttransform.localPosition = position; \t}<\/code><\/pre>\n<p>  \u0414\u0438\u0430\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432\u0435\u0440\u043d\u043e, \u043d\u043e \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043a\u0430\u043c\u0435\u0440\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043a\u043b\u0430\u0432\u0438\u0448. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0441\u0438 \u0432\u0432\u043e\u0434\u0430 \u043d\u0435 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u043a\u0430\u043a\u0438\u0432\u0430\u044e\u0442 \u043a \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448. \u0418\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0434\u043b\u044f \u043e\u0442\u043f\u0443\u0441\u043a\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448. \u041d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043a \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043e\u0441\u0435\u0439 \u0443\u0445\u043e\u0434\u0438\u0442 \u0432\u0440\u0435\u043c\u044f. \u041e\u0434\u043d\u0430\u043a\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0432\u043e\u0434\u0430, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u0435\u043a, \u043d\u043e \u043e\u043d\u0438 \u0434\u0430\u044e\u0442 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0432\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0435\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043e\u0441\u0435\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\t\tVector3 direction = new Vector3(xDelta, 0f, zDelta).normalized; \t\tfloat damping = Mathf.Max(Mathf.Abs(xDelta), Mathf.Abs(zDelta)); \t\tfloat distance = moveSpeed * damping * Time.deltaTime; <\/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\/QuarrelsomeFrankHornbill\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0414\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0441 \u0437\u0430\u0442\u0443\u0445\u0430\u043d\u0438\u0435\u043c.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0437\u0443\u043c\u0430. \u041d\u043e \u043f\u0440\u0438 \u043e\u0442\u0434\u0430\u043b\u0435\u043d\u0438\u0438 \u043e\u043d\u043e \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c. \u041f\u0440\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043d\u043e\u043c \u0437\u0443\u043c\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c\u0441\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>moveSpeed<\/code> \u043d\u0430 \u0434\u0432\u0435 \u0434\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0443\u043c\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e. \u041f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 400 \u0438 100.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic float moveSpeed; \tpublic float moveSpeedMinZoom, moveSpeedMaxZoom;  \tvoid AdjustPosition (float xDelta, float zDelta) { \t\tVector3 direction = new Vector3(xDelta, 0f, zDelta).normalized; \t\tfloat damping = Mathf.Max(Mathf.Abs(xDelta), Mathf.Abs(zDelta)); \t\tfloat distance = \t\t\tMathf.Lerp(moveSpeedMinZoom, moveSpeedMaxZoom, zoom) * \t\t\tdamping * Time.deltaTime;  \t\tVector3 position = transform.localPosition; \t\tposition += direction * distance; \t\ttransform.localPosition = position; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/move-speed-zoomed.png\"\/><\/div>\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\/CelebratedSpiffyHerald\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0443\u0440\u043e\u0432\u043d\u044f \u0437\u0443\u043c\u0430.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u0430\u0440\u0442\u0435! \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u0435\u043a\u043e \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043a\u0430\u0440\u0442\u044b, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041a\u0430\u043c\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0440\u0442\u044b. \u0427\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u044d\u0442\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u0430\u0440\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0435\u0442\u043a\u0443. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0451.<\/p>\n<pre><code class=\"cs\">\tpublic HexGrid grid;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/grid.png\"\/><\/div>\n<p>  <i>\u041d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u0442\u043a\u0438.<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c \u0435\u0451 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid AdjustPosition (float xDelta, float zDelta) { \t\t&hellip; \t\ttransform.localPosition = ClampPosition(position); \t} \t \tVector3 ClampPosition (Vector3 position) { \t\treturn position; \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0437\u0438\u0446\u0438\u044f X \u0438\u043c\u0435\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0, \u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043a\u0430\u0440\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tVector3 ClampPosition (Vector3 position) { \t\tfloat xMax = \t\t\tgrid.chunkCountX * HexMetrics.chunkSizeX * \t\t\t(2f * HexMetrics.innerRadius); \t\tposition.x = Mathf.Clamp(position.x, 0f, xMax);  \t\treturn position; \t}<\/code><\/pre>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0438 Z.<\/p>\n<pre><code class=\"cs\">\tVector3 ClampPosition (Vector3 position) { \t\tfloat xMax = \t\t\tgrid.chunkCountX * HexMetrics.chunkSizeX * \t\t\t(2f * HexMetrics.innerRadius); \t\tposition.x = Mathf.Clamp(position.x, 0f, xMax);  \t\tfloat zMax = \t\t\tgrid.chunkCountZ * HexMetrics.chunkSizeZ * \t\t\t(1.5f * HexMetrics.outerRadius); \t\tposition.z = Mathf.Clamp(position.z, 0f, zMax);  \t\treturn position; \t}<\/code><\/pre>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435\u0442\u043e\u0447\u043d\u043e. \u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u043d\u0435 \u0441\u043b\u0435\u0432\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043c\u0435\u0440\u0430 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u0438 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u0430\u0432\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0447\u0442\u0435\u043c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u0437 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0430 X.<\/p>\n<pre><code class=\"cs\">\t\tfloat xMax = \t\t\t(grid.chunkCountX * HexMetrics.chunkSizeX - 0.5f) * \t\t\t(2f * HexMetrics.innerRadius); \t\tposition.x = Mathf.Clamp(position.x, 0f, xMax);<\/code><\/pre>\n<p>  \u041f\u043e \u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c Z. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0447\u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443.<\/p>\n<pre><code class=\"cs\">\t\tfloat zMax = \t\t\t(grid.chunkCountZ * HexMetrics.chunkSizeZ - 1) * \t\t\t(1.5f * HexMetrics.outerRadius); \t\tposition.z = Mathf.Clamp(position.z, 0f, zMax);<\/code><\/pre>\n<p>  \u0421 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u043c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438, \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0434\u0435\u0442\u0430\u043b\u044c. \u0418\u043d\u043e\u0433\u0434\u0430 UI \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438, \u0438 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043a\u043e\u0433\u0434\u0430 UI \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0441\u0435\u0431\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b \u043d\u0430\u0436\u0430\u043b\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u0438 \u043a\u0443\u0440\u0441\u043e\u0440 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u043d\u0430\u0434 \u043d\u0438\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c UI \u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0432\u0432\u043e\u0434 \u0441 \u043a\u043b\u0430\u0432\u0438\u0430\u0442\u0443\u0440\u044b. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 <em>EventSystem<\/em> \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c <em>Send Navigation Events<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/no-navigation-events.png\"\/><\/div>\n<p>  <i>\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438.<\/i><\/p>\n<h3>\u041f\u043e\u0432\u043e\u0440\u043e\u0442<\/h3>\n<p>  \u0425\u043e\u0442\u0438\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430 \u043e\u0431\u0440\u044b\u0432\u043e\u043c? \u0411\u044b\u043b\u043e \u0431\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e.<\/p>\n<p>  \u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0437\u0443\u043c\u0430 \u043d\u0435 \u0432\u0430\u0436\u0435\u043d \u0434\u043b\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u0449\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>rotationSpeed<\/code> \u0438 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 180 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0434\u0435\u043b\u044c\u0442\u0443 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0432 <code>Update<\/code>, \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u044f \u043e\u0441\u044c <em>Rotation<\/em> \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u043f\u043e\u0432\u043e\u0440\u043e\u0442.<\/p>\n<pre><code class=\"cs\">\tpublic float rotationSpeed;  \tvoid Update () { \t\tfloat zoomDelta = Input.GetAxis(&quot;Mouse ScrollWheel&quot;); \t\tif (zoomDelta != 0f) { \t\t\tAdjustZoom(zoomDelta); \t\t}  \t\tfloat rotationDelta = Input.GetAxis(&quot;Rotation&quot;); \t\tif (rotationDelta != 0f) { \t\t\tAdjustRotation(rotationDelta); \t\t}  \t\tfloat xDelta = Input.GetAxis(&quot;Horizontal&quot;); \t\tfloat zDelta = Input.GetAxis(&quot;Vertical&quot;); \t\tif (xDelta != 0f || zDelta != 0f) { \t\t\tAdjustPosition(xDelta, zDelta); \t\t} \t}  \tvoid AdjustRotation (float delta) { \t}<\/code><\/pre>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/rotation-speed.png\"\/><\/div>\n<p>  <i>\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430.<\/i><\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0441\u0438 <em>Rotation<\/em> \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0435\u0442. \u041d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0451 \u0441\u0430\u043c\u0438\u043c. \u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u0430 \u0438 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u0441\u0430\u043c\u0443\u044e \u0432\u0435\u0440\u0445\u043d\u044e\u044e \u0437\u0430\u043f\u0438\u0441\u044c <em>Vertical<\/em>. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u0430 \u043d\u0430 <em>Rotation<\/em> \u0438 \u0441\u043c\u0435\u043d\u0438\u043c \u043a\u043b\u0430\u0432\u0438\u0448\u0438 \u043d\u0430 QE \u0438 \u0437\u0430\u043f\u044f\u0442\u0443\u044e (,) \u0441 \u0442\u043e\u0447\u043a\u043e\u0439 (.).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/rotation-input.png\"\/><\/div>\n<p>  <i>\u041e\u0441\u044c \u0432\u0432\u043e\u0434\u0430 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u042f \u0441\u043a\u0430\u0447\u0430\u043b unitypackage, \u043f\u043e\u0447\u0435\u043c\u0443 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0432\u0432\u043e\u0434\u0430?<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0432\u043e\u0434\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0432 \u043f\u0430\u043a\u0435\u0442\u044b Unity. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0438\u0445 \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u043e \u0432\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0449\u0435\u0435 \u043e\u0431 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043e\u0441\u0438 \u0432\u0432\u043e\u0434\u0430.<\/div>\n<\/div>\n<p>  \u0423\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0432 <code>AdjustRotation<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<pre><code class=\"cs\">\tfloat rotationAngle; \t \tvoid AdjustRotation (float delta) { \t\trotationAngle += delta * rotationSpeed * Time.deltaTime; \t\ttransform.localRotation = Quaternion.Euler(0f, rotationAngle, 0f); \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u0440\u0443\u0433 \u0440\u0430\u0432\u0435\u043d 360 \u0433\u0440\u0430\u0434\u0443\u0441\u0430\u043c, \u0441\u0432\u0435\u0440\u043d\u0451\u043c \u0443\u0433\u043e\u043b \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u043e\u0442 0 \u0434\u043e 360.<\/p>\n<pre><code class=\"cs\">\tvoid AdjustRotation (float delta) { \t\trotationAngle += delta * rotationSpeed * Time.deltaTime; \t\tif (rotationAngle &lt; 0f) { \t\t\trotationAngle += 360f; \t\t} \t\telse if (rotationAngle &gt;= 360f) { \t\t\trotationAngle -= 360f; \t\t} \t\ttransform.localRotation = Quaternion.Euler(0f, rotationAngle, 0f); \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\/OccasionalWiltedAurochs\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041f\u043e\u0432\u043e\u0440\u043e\u0442 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0433\u043e, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043d\u0430 180 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u043c\u0443. \u0414\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0431\u044b\u043b\u043e \u0431\u044b \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435, \u0447\u0442\u043e\u0431\u044b \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0433\u043b\u0443 \u043e\u0431\u0437\u043e\u0440\u0430 \u043a\u0430\u043c\u0435\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 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043d\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid AdjustPosition (float xDelta, float zDelta) { \t\tVector3 direction = \t\t\ttransform.localRotation * \t\t\tnew Vector3(xDelta, 0f, zDelta).normalized; \t\t&hellip; \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\/DefenselessSharpDunnart\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/camera-controls\/camera-controls.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u0430 \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b. \u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u0437\u0430 \u0440\u0430\u0437 \u2014 \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043e\u043b\u0433\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0438\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0422\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b, \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0432\u0441\u0451 \u043f\u0440\u043e\u0447\u0435\u0435 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c.<\/p>\n<h3>\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0446\u0432\u0435\u0442 \u0438 \u0432\u044b\u0441\u043e\u0442\u0430<\/h3>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 toggle group \u043f\u0443\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432\u044b\u0431\u043e\u0440\u0430. \u0414\u0443\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u0446\u0432\u0435\u0442\u0430 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u043c\u0435\u0442\u043a\u0443 \u043d\u0430 <em>&#8212;<\/em> \u0438\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0446\u0432\u0435\u0442. \u0417\u0430\u0442\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0435\u0433\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u044f <em>On Value Changed<\/em> \u043d\u0430 \u22121.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/not-a-color-index.png\"\/><\/div>\n<p>  <i>\u041d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0446\u0432\u0435\u0442\u0430.<\/i><\/p>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0446\u0432\u0435\u0442\u043e\u0432. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a \u044f\u0447\u0435\u0439\u043a\u0430\u043c \u0446\u0432\u0435\u0442.<\/p>\n<pre><code class=\"cs\">\tbool applyColor;  \tpublic void SelectColor (int index) { \t\tapplyColor = index &gt;= 0; \t\tif (applyColor) { \t\t\tactiveColor = colors[index]; \t\t} \t} \t \tvoid EditCell (HexCell cell) { \t\tif (applyColor) { \t\t\tcell.Color = activeColor; \t\t} \t\tcell.Elevation = activeElevation; \t}<\/code><\/pre>\n<p>  \u0412\u044b\u0441\u043e\u0442\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c, \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c.<\/p>\n<pre><code class=\"cs\">\tbool applyElevation = true; \t \tvoid EditCell (HexCell cell) { \t\tif (applyColor) { \t\t\tcell.Color = activeColor; \t\t} \t\tif (applyElevation) { \t\t\tcell.Elevation = activeElevation; \t\t} \t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UI \u043d\u043e\u0432\u044b\u0439 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u0441\u043e\u0442\u044b. \u0422\u0430\u043a\u0436\u0435 \u044f \u043f\u043e\u043c\u0435\u0449\u0443 \u0432\u0441\u0451 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u043f\u0430\u043d\u0435\u043b\u044c, \u0430 \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a \u0432\u044b\u0441\u043e\u0442\u044b \u0441\u0434\u0435\u043b\u0430\u044e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c, \u0447\u0442\u043e\u0431\u044b UI \u0431\u044b\u043b \u043a\u0440\u0430\u0441\u0438\u0432\u0435\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/optional-color-elevation.png\"\/><\/div>\n<p>  <i>\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0446\u0432\u0435\u0442 \u0438 \u0432\u044b\u0441\u043e\u0442\u0430.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443, \u043d\u0443\u0436\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0441 UI.<\/p>\n<pre><code class=\"cs\">\tpublic void SetApplyElevation (bool toggle) { \t\tapplyElevation = toggle; \t}<\/code><\/pre>\n<p>  \u0421\u043e\u0435\u0434\u0438\u043d\u0438\u0432 \u0435\u0433\u043e \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u044b, \u0443\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 bool. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442 \u0432 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435 \u0444\u043b\u0430\u0436\u043e\u043a.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/set-apply-elevation.png\"\/><\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0432\u044b\u0441\u043e\u0442\u044b.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430\u043c\u0438 \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0441\u043e\u0442\u0443. \u0418\u043b\u0438 \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0430\u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0438 \u0442\u043e, \u043d\u0438 \u0434\u0440\u0443\u0433\u043e\u0435, \u043d\u043e \u043f\u043e\u043a\u0430 \u0434\u043b\u044f \u043d\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043f\u043e\u043b\u0435\u0437\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\/CooperativeWastefulIchthyostega\" 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\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0432\u0435\u0442\u043e\u043c \u0438 \u0432\u044b\u0441\u043e\u0442\u043e\u0439.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043f\u0440\u0438 \u0432\u044b\u0431\u043e\u0440\u0435 \u0446\u0432\u0435\u0442\u0430 \u0432\u044b\u0441\u043e\u0442\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f?<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0430\u043a\u043e\u0435 \u0431\u044b\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u043a \u043e\u0434\u043d\u043e\u0439 toggle group. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u044b \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u044b\u0431\u043e\u0440\u0430 \u0446\u0432\u0435\u0442\u0430 \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0435 \u0435\u0433\u043e, \u043d\u043e \u043d\u0435 \u0443\u0431\u0440\u0430\u043b\u0438 \u0435\u0433\u043e toggle group.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0438\u0441\u0442\u0438<\/h3>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0438\u0441\u0442\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>brushSize<\/code> \u0438 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0435\u0451 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 UI. \u041c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043d\u043e\u0432\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 float \u0432 int.<\/p>\n<pre><code class=\"cs\">\tint brushSize;  \tpublic void SetBrushSize (float size) { \t\tbrushSize = (int)size; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/brush-size-slider.png\"\/><\/div>\n<p>  <i>\u041f\u043e\u043b\u0437\u0443\u043d\u043e\u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0438\u0441\u0442\u0438.<\/i><\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a, \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u043e\u043b\u0437\u0443\u043d\u043e\u043a \u0432\u044b\u0441\u043e\u0442\u044b. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 4 \u0438 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u043c \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443. \u0422\u0430\u043a\u0436\u0435 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u043c\u0443 \u043c\u0435\u0442\u043a\u0443.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/brush-size-slider-inspector.png\"\/><\/div>\n<p>  <i>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0438\u0441\u0442\u0438.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f\u0447\u0435\u0435\u043a \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>EditCells<\/code>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>EditCell<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u043a\u0438\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid HandleInput () { \t\tRay inputRay = Camera.main.ScreenPointToRay(Input.mousePosition); \t\tRaycastHit hit; \t\tif (Physics.Raycast(inputRay, out hit)) { \t\t\tEditCells(hexGrid.GetCell(hit.point)); \t\t} \t}  \tvoid EditCells (HexCell center) { \t} \t \tvoid EditCell (HexCell cell) { \t\t&hellip; \t}<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u043c\u0435\u0440 \u043a\u0438\u0441\u0442\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0440\u0430\u0434\u0438\u0443\u0441 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u0440\u0438 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 0 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430. \u041f\u0440\u0438 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 1 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0446\u0435\u043d\u0442\u0440 \u0438 \u0435\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0438. \u041f\u0440\u0438 \u0440\u0430\u0434\u0438\u0443\u0441\u0435 2 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u0438 \u0446\u0435\u043d\u0442\u0440\u0430 \u0438 \u0438\u0445 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0435\u0434\u0438. \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/brush-diagram.png\"\/><\/div>\n<p>  <i>\u0414\u043e \u0440\u0430\u0434\u0438\u0443\u0441\u0430 3.<\/i><\/p>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0438\u0445 \u0432 \u0446\u0438\u043a\u043b\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b X \u0438 Z \u0446\u0435\u043d\u0442\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid EditCells (HexCell center) { \t\tint centerX = center.coordinates.X; \t\tint centerZ = center.coordinates.Z; \t}<\/code><\/pre>\n<p>  \u041c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 Z, \u0432\u044b\u0447\u0438\u0442\u0430\u044f \u0440\u0430\u0434\u0438\u0443\u0441. \u0422\u0430\u043a \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043d\u0443\u043b\u0435\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0446\u0438\u043a\u043b, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u043a\u0440\u043e\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0446\u0435\u043d\u0442\u0440\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid EditCells (HexCell center) { \t\tint centerX = center.coordinates.X; \t\tint centerZ = center.coordinates.Z;  \t\tfor (int r = 0, z = centerZ - brushSize; z &lt;= centerZ; z++, r++) { \t\t} \t}<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0438\u0436\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u0442\u0443 \u0436\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 X, \u0447\u0442\u043e \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430. \u042d\u0442\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u043d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a\u0438.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 X, \u0440\u0430\u0432\u043d\u0443\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0435 \u0446\u0435\u043d\u0442\u0440\u0430 \u043f\u043b\u044e\u0441 \u0440\u0430\u0434\u0438\u0443\u0441.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043e\u0439\u0442\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043a\u0430\u0436\u0434\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u043e \u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\t\tfor (int r = 0, z = centerZ - brushSize; z &lt;= centerZ; z++, r++) { \t\t\tfor (int x = centerX - r; x &lt;= centerX + brushSize; x++) { \t\t\t\tEditCell(hexGrid.GetCell(new HexCoordinates(x, z))); \t\t\t} \t\t}<\/code><\/pre>\n<p>  \u0423 \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 <code>HexGrid.GetCell<\/code> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0433\u043e. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u044f\u0447\u0435\u0439\u043a\u0443.<\/p>\n<pre><code class=\"cs\">\tpublic HexCell GetCell (HexCoordinates coordinates) { \t\tint z = coordinates.Z; \t\tint x = coordinates.X + z \/ 2; \t\treturn cells[x + z * cellCountX]; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/brush-bottom-half.png\"\/><\/div>\n<p>  <i>\u041d\u0438\u0436\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u043a\u0438\u0441\u0442\u0438, \u0440\u0430\u0437\u043c\u0435\u0440 2.<\/i><\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u0438\u0441\u0442\u0438 \u043c\u044b \u043f\u043e\u043a\u0440\u043e\u0435\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0446\u0438\u043a\u043b \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437 \u0434\u043e \u0446\u0435\u043d\u0442\u0440\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043b\u043e\u0433\u0438\u043a\u0430 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u0430 \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u043e \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tvoid EditCells (HexCell center) { \t\tint centerX = center.coordinates.X; \t\tint centerZ = center.coordinates.Z;  \t\tfor (int r = 0, z = centerZ - brushSize; z &lt;= centerZ; z++, r++) { \t\t\tfor (int x = centerX - r; x &lt;= centerX + brushSize; x++) { \t\t\t\tEditCell(hexGrid.GetCell(new HexCoordinates(x, z))); \t\t\t} \t\t} \t\tfor (int r = 0, z = centerZ + brushSize; z &gt; centerZ; z--, r++) { \t\t\tfor (int x = centerX - brushSize; x &lt;= centerX + r; x++) { \t\t\t\tEditCell(hexGrid.GetCell(new HexCoordinates(x, z))); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/brush-complete.png\"\/><\/div>\n<p>  <i>\u0412\u0441\u044f \u043a\u0438\u0441\u0442\u044c, \u0440\u0430\u0437\u043c\u0435\u0440 2.<\/i><\/p>\n<p>  \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448\u0430 \u043a\u0438\u0441\u0442\u044c \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0441\u0435\u0442\u043a\u0438. \u041a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c index-out-of-range exception. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0432 <code>HexGrid.GetCell<\/code> \u0438 \u0432\u0435\u0440\u043d\u0451\u043c <code>null<\/code>, \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic HexCell GetCell (HexCoordinates coordinates) { \t\tint z = coordinates.Z; \t\tif (z &lt; 0 || z &gt;= cellCountZ) { \t\t\treturn null; \t\t} \t\tint x = coordinates.X + z \/ 2; \t\tif (x &lt; 0 || x &gt;= cellCountX) { \t\t\treturn null; \t\t} \t\treturn cells[x + z * cellCountX]; \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c null-reference-exception, <code>HexMapEditor<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0434 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid EditCell (HexCell cell) { \t\tif (cell) { \t\t\tif (applyColor) { \t\t\t\tcell.Color = activeColor; \t\t\t} \t\t\tif (applyElevation) { \t\t\t\tcell.Elevation = activeElevation; \t\t\t} \t\t} \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\/LividPopularKiwi\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0438\u0441\u0442\u0435\u0439.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0442\u043e\u043a \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u043c\u0435\u0442\u043a\u0438 \u044f\u0447\u0435\u0435\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0445 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0438\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c canvas, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>ShowUI<\/code> \u0432 <code>HexGridChunk<\/code>. \u041a\u043e\u0433\u0434\u0430 UI \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0438\u0434\u0438\u043c, \u043c\u044b \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c canvas. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic void ShowUI (bool visible) { \t\tgridCanvas.gameObject.SetActive(visible); \t}<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u043f\u0440\u044f\u0447\u0435\u043c UI.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tgridCanvas = GetComponentInChildren&lt;Canvas&gt;(); \t\thexMesh = GetComponentInChildren&lt;HexMesh&gt;();  \t\tcells = new HexCell[HexMetrics.chunkSizeX * HexMetrics.chunkSizeZ]; \t\tShowUI(false); \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c UI \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u044b, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>ShowUI<\/code> \u0438 \u0432 <code>HexGrid<\/code>. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0432\u043e\u0438\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic void ShowUI (bool visible) { \t\tfor (int i = 0; i &lt; chunks.Length; i++) { \t\t\tchunks[i].ShowUI(visible); \t\t} \t}<\/code><\/pre>\n<p>  <code>HexMapEditor<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0437\u0430\u043f\u0440\u043e\u0441 \u0441\u0435\u0442\u043a\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic void ShowUI (bool visible) { \t\thexGrid.ShowUI(visible); \t}<\/code><\/pre>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u043a UI \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/labels-toggle.png\"\/><\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u0442\u043e\u043a.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-5\/advanced-editing\/advanced-editing.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 6: \u0440\u0435\u043a\u0438<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a \u044f\u0447\u0435\u0439\u043a\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u043a.<\/li>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0440\u0435\u043a.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0443\u0441\u0435\u043b \u0440\u0435\u043a.<\/li>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043c\u0435\u0448\u0435\u0439 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u0443\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.<\/li>\n<li>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u0438 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u043e\u0434\u044b.<\/li>\n<\/ul>\n<p>  \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043a\u0430\u0440\u0442. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043d\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0440\u0435\u043a\u0430\u0445.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/tutorial-image.jpg\"\/><\/div>\n<p>  <i>\u0420\u0435\u043a\u0438 \u0442\u0435\u043a\u0443\u0442 \u0441 \u0433\u043e\u0440.<\/i><\/p>\n<h2>\u042f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0440\u0435\u043a\u0430\u043c\u0438<\/h2>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043a \u043a \u0441\u0435\u0442\u043a\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0438\u043c \u0442\u0435\u0447\u044c \u043e\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a \u044f\u0447\u0435\u0439\u043a\u0435. \u0418\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 Endless Legend. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0438\u043c \u0442\u0435\u0447\u044c \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u043e\u0442 \u0440\u0435\u0431\u0440\u0430 \u043a \u0440\u0435\u0431\u0440\u0443. \u0422\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 Civilization 5. \u0422\u0440\u0435\u0442\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2014 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0435\u043a, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u043e\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0438\u0445. \u0422\u0430\u043a \u0440\u0435\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432 Age of Wonders 3.<\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0451\u0431\u0440\u0430 \u044f\u0447\u0435\u0435\u043a \u0443\u0436\u0435 \u0437\u0430\u043d\u044f\u0442\u044b \u0441\u043a\u043b\u043e\u043d\u0430\u043c\u0438 \u0438 \u043e\u0431\u0440\u044b\u0432\u0430\u043c\u0438. \u042d\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0430\u043b\u043e \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0440\u0435\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0442\u0435\u043a\u043b\u0438 \u043e\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a \u044f\u0447\u0435\u0439\u043a\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435 \u0438\u043b\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u043a\u0438, \u0438\u043b\u0438 \u043f\u043e \u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u0442\u0435\u0447\u044c \u0440\u0435\u043a\u0430, \u0438\u043b\u0438 \u0432 \u043d\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0440\u0435\u043a\u0438. \u0412 \u0442\u0435\u0445 \u044f\u0447\u0435\u0439\u043a\u0430\u0445, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0435\u0447\u0451\u0442 \u0440\u0435\u043a\u0430, \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0442\u0435\u0447\u044c \u043f\u0440\u044f\u043c\u043e, \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u0432\u043e\u0440\u043e\u0442 \u043d\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0438\u043b\u0438 \u043d\u0430 \u0434\u0432\u0430 \u0448\u0430\u0433\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/cells-with-rivers\/river-configurations.png\"\/><\/div>\n<p>  <i>\u041f\u044f\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0440\u0435\u043a.<\/i><\/p>\n<p>  \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0442\u0432\u044f\u0449\u0438\u0435\u0441\u044f \u0438\u043b\u0438 \u0441\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0440\u0435\u043a\u0438. \u042d\u0442\u043e \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0451 \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u0442, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u043e\u0434\u044b. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0437\u0430\u0434\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u043e\u0431\u044a\u0451\u043c\u0430\u043c\u0438 \u0432\u043e\u0434\u044b. \u0418\u0445 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435.<\/p>\n<h3>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043a<\/h3>\n<p>  \u042f\u0447\u0435\u0439\u043a\u0430, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0435\u0447\u0451\u0442 \u0440\u0435\u043a\u0430, \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a \u0438\u043c\u0435\u044e\u0449\u0430\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0440\u0435\u043a\u0443. \u0415\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0430\u0447\u0430\u043b\u043e \u0440\u0435\u043a\u0438, \u0442\u043e \u0443 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0440\u0435\u043a\u0430. \u0410 \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u043d\u0435\u0446 \u0440\u0435\u043a\u0438, \u0442\u043e \u0443 \u043d\u0435\u0451 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0440\u0435\u043a\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 <code>HexCell<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0432\u0443\u0445 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<pre><code class=\"cs\">\tbool hasIncomingRiver, hasOutgoingRiver;<\/code><\/pre>\n<p>  \u041d\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0435\u0449\u0451 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u0440\u0435\u043a. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438 \u043e\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0443\u0434\u0430 \u0442\u0430 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438 \u043e\u043d\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u0430 \u043f\u0440\u0438\u0448\u043b\u0430.<\/p>\n<pre><code class=\"cs\">\tbool hasIncomingRiver, hasOutgoingRiver; \tHexDirection incomingRiver, outgoingRiver;<\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u044f\u0447\u0435\u0435\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u043a \u043d\u0435\u0439 \u0434\u043e\u0441\u0442\u0443\u043f. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u0438\u0445 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434.<\/p>\n<pre><code class=\"cs\">\tpublic bool HasIncomingRiver { \t\tget { \t\t\treturn hasIncomingRiver; \t\t} \t}  \tpublic bool HasOutgoingRiver { \t\tget { \t\t\treturn hasOutgoingRiver; \t\t} \t}  \tpublic HexDirection IncomingRiver { \t\tget { \t\t\treturn incomingRiver; \t\t} \t}  \tpublic HexDirection OutgoingRiver { \t\tget { \t\t\treturn outgoingRiver; \t\t} \t}<\/code><\/pre>\n<p>  \u0412\u0430\u0436\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u0440\u0435\u043a\u0430, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic bool HasRiver { \t\tget { \t\t\treturn hasIncomingRiver || hasOutgoingRiver; \t\t} \t}<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441: \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u043d\u0430\u0447\u0430\u043b\u043e \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0440\u0435\u043a\u0438. \u0415\u0441\u043b\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438 \u0440\u0430\u0437\u043d\u043e\u0435, \u0442\u043e \u044d\u0442\u043e \u043a\u0430\u043a \u0440\u0430\u0437 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0435\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic bool HasRiverBeginOrEnd { \t\tget { \t\t\treturn hasIncomingRiver != hasOutgoingRiver; \t\t} \t}<\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u0442\u0435\u0447\u0451\u0442 \u043b\u0438 \u0440\u0435\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u0440\u0435\u0431\u0440\u043e, \u0431\u0443\u0434\u044c \u043e\u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0438\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439.<\/p>\n<pre><code class=\"cs\">\tpublic bool HasRiverThroughEdge (HexDirection direction) { \t\treturn \t\t\thasIncomingRiver &amp;&amp; incomingRiver == direction || \t\t\thasOutgoingRiver &amp;&amp; outgoingRiver == direction; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043a<\/h3>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u043a\u0438 \u043a \u044f\u0447\u0435\u0439\u043a\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043a. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u043a\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u043d\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438, \u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0435\u0451 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic void RemoveOutgoingRiver () { \t\tif (!hasOutgoingRiver) { \t\t\treturn; \t\t} \t\thasOutgoingRiver = false; \t\tRefresh(); \t}<\/code><\/pre>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0451 \u043d\u0435 \u0432\u0441\u0451. \u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0440\u0435\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043a\u0443\u0434\u0430-\u0442\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0435\u0434 \u0441\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u043e\u0439. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u043e\u0442 \u043d\u0435\u0451 \u0442\u043e\u0436\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic void RemoveOutgoingRiver () { \t\tif (!hasOutgoingRiver) { \t\t\treturn; \t\t} \t\thasOutgoingRiver = false; \t\tRefresh();  \t\tHexCell neighbor = GetNeighbor(outgoingRiver); \t\tneighbor.hasIncomingRiver = false; \t\tneighbor.Refresh(); \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 \u0440\u0435\u043a\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0442\u0435\u043a\u0430\u0442\u044c \u0438\u0437 \u043a\u0430\u0440\u0442\u044b?<\/b><\/p>\n<div class=\"spoiler_text\">\u0425\u043e\u0442\u044f \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0442\u0430\u043a\u0438\u0445 \u0440\u0435\u043a, \u043c\u044b \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0441\u043e\u0441\u0435\u0434.<\/div>\n<\/div>\n<p>  \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043a\u0438 \u0438\u0437 \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442\u044b \u0438\u043b\u0438 \u0446\u0432\u0435\u0442\u0430, \u043d\u0430 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043e\u043d\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0443 \u044f\u0447\u0435\u0439\u043a\u0443, \u043d\u043e \u043d\u0435 \u0435\u0451 \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<pre><code class=\"cs\">\tpublic void RemoveOutgoingRiver () { \t\tif (!hasOutgoingRiver) { \t\t\treturn; \t\t} \t\thasOutgoingRiver = false; \t\tRefreshSelfOnly();  \t\tHexCell neighbor = GetNeighbor(outgoingRiver); \t\tneighbor.hasIncomingRiver = false; \t\tneighbor.RefreshSelfOnly(); \t}<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 <code>RefreshSelfOnly<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u044f\u0447\u0435\u0439\u043a\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u043a\u0438 \u043c\u044b \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0435\u043a\u0438, \u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u043b\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0431\u044b\u043b \u043b\u0438 \u0443\u0436\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442.<\/p>\n<pre><code class=\"cs\">\tvoid RefreshSelfOnly () { \t\tchunk.Refresh(); \t}<\/code><\/pre>\n<p>  \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0440\u0435\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic void RemoveIncomingRiver () { \t\tif (!hasIncomingRiver) { \t\t\treturn; \t\t} \t\thasIncomingRiver = false; \t\tRefreshSelfOnly();  \t\tHexCell neighbor = GetNeighbor(incomingRiver); \t\tneighbor.hasOutgoingRiver = false; \t\tneighbor.RefreshSelfOnly(); \t}<\/code><\/pre>\n<p>  \u0410 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0439 \u0440\u0435\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439, \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0435\u0439 \u0440\u0435\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void RemoveRiver () { \t\tRemoveOutgoingRiver(); \t\tRemoveIncomingRiver(); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043a<\/h3>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u043a \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438 \u044f\u0447\u0435\u0439\u043a\u0438. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0440\u0435\u043a\u0438 \u0438 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0432\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0440\u0435\u043a\u0443.<\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u043d\u0430\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0440\u0435\u043a\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<pre><code class=\"cs\">\tpublic void SetOutgoingRiver (HexDirection direction) { \t\tif (hasOutgoingRiver &amp;&amp; outgoingRiver == direction) { \t\t\treturn; \t\t} \t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u043e\u0441\u0435\u0434. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0440\u0435\u043a\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0442\u0435\u0447\u044c \u0432\u0432\u0435\u0440\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0435\u0441\u043b\u0438 \u0441\u043e\u0441\u0435\u0434 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0448\u0435.<\/p>\n<pre><code class=\"cs\">\t\tHexCell neighbor = GetNeighbor(direction); \t\tif (!neighbor || elevation &lt; neighbor.elevation) { \t\t\treturn; \t\t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0440\u0435\u043a\u0443. \u0410 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0440\u0435\u043a\u0443, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0440\u0435\u043a\u0443.<\/p>\n<pre><code class=\"cs\">\t\tRemoveOutgoingRiver(); \t\tif (hasIncomingRiver &amp;&amp; incomingRiver == direction) { \t\t\tRemoveIncomingRiver(); \t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\t\thasOutgoingRiver = true; \t\toutgoingRiver = direction; \t\tRefreshSelfOnly(); <\/code><\/pre>\n<p>  \u0418 \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u0440\u0435\u043a\u0443 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0435\u0451 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<pre><code class=\"cs\">\t\tneighbor.RemoveIncomingRiver(); \t\tneighbor.hasIncomingRiver = true; \t\tneighbor.incomingRiver = direction.Opposite(); \t\tneighbor.RefreshSelfOnly();<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0418\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u0440\u0435\u043a, \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0432\u0432\u0435\u0440\u0445<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043a\u0438, \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u0443 \u044f\u0447\u0435\u0439\u043a\u0438, \u0442\u043e \u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0442\u0435\u0447\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0438\u0437. \u0412\u0441\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tpublic int Elevation { \t\tget { \t\t\treturn elevation; \t\t} \t\tset { \t\t\t&hellip;  \t\t\tif ( \t\t\t\thasOutgoingRiver &amp;&amp; \t\t\t\televation &lt; GetNeighbor(outgoingRiver).elevation \t\t\t) { \t\t\t\tRemoveOutgoingRiver(); \t\t\t} \t\t\tif ( \t\t\t\thasIncomingRiver &amp;&amp; \t\t\t\televation &gt; GetNeighbor(incomingRiver).elevation \t\t\t) { \t\t\t\tRemoveIncomingRiver(); \t\t\t}  \t\t\tRefresh(); \t\t} \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/cells-with-rivers\/cells-with-rivers.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u043a<\/h2>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043a \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 UI \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0440\u0435\u043a. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0442\u0440\u0451\u0445 \u0440\u0435\u0436\u0438\u043c\u043e\u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u043b\u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u0438, \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445, \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c. \u041c\u044b \u043c\u043e\u0436\u0435\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <code>HexMapEditor<\/code>, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u043e\u043b\u0435\u043c \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0435\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tenum OptionalToggle { \t\tIgnore, Yes, No \t} \t \tOptionalToggle riverMode;<\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0435\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 UI.<\/p>\n<pre><code class=\"cs\">\tpublic void SetRiverMode (int mode) { \t\triverMode = (OptionalToggle)mode; \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0440\u0435\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UI \u0442\u0440\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0438\u0445 \u0432 \u043d\u043e\u0432\u0443\u044e toggle group, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u0446\u0432\u0435\u0442\u0430\u043c\u0438. \u042f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043c\u0435\u0442\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0434 \u0444\u043b\u0430\u0436\u043a\u0430\u043c\u0438. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043d\u043a\u0438\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/editing-rivers\/river-ui.png\"\/><\/div>\n<p>  <i>UI \u0440\u0435\u043a.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a?<\/b><\/p>\n<div class=\"spoiler_text\">\u0415\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435, \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e dropdown list \u0432 Unity \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play. \u041f\u0443\u043d\u043a\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0443\u0442\u0435\u0440\u044f\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u0435\u043d.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0438 \u044f\u0447\u0435\u0439\u043a\u0430, \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 <code>HexMapEditor<\/code> \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e.<\/p>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0410 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443.<\/p>\n<pre><code class=\"cs\">\tbool isDrag; \tHexDirection dragDirection; \tHexCell previousCell;<\/code><\/pre>\n<p>  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0435\u0442. \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u0432\u0432\u043e\u0434\u0430 \u043d\u0435\u0442 \u0438\u043b\u0438 \u043c\u044b \u043d\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c \u0441 \u043a\u0430\u0440\u0442\u043e\u0439, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>null<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid Update () { \t\tif ( \t\t\tInput.GetMouseButton(0) &amp;&amp; \t\t\t!EventSystem.current.IsPointerOverGameObject() \t\t) { \t\t\tHandleInput(); \t\t} \t\telse { \t\t\tpreviousCell = null; \t\t} \t}  \tvoid HandleInput () { \t\tRay inputRay = Camera.main.ScreenPointToRay(Input.mousePosition); \t\tRaycastHit hit; \t\tif (Physics.Raycast(inputRay, out hit)) { \t\t\tEditCells(hexGrid.GetCell(hit.point)); \t\t} \t\telse { \t\t\tpreviousCell = null; \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u2014 \u044d\u0442\u043e \u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0430 \u0441 \u043c\u0435\u0448\u0435\u043c. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a \u043e\u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u043e\u0439 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid HandleInput () { \t\tRay inputRay = Camera.main.ScreenPointToRay(Input.mousePosition); \t\tRaycastHit hit; \t\tif (Physics.Raycast(inputRay, out hit)) { \t\t\tHexCell currentCell = hexGrid.GetCell(hit.point); \t\t\tEditCells(currentCell); \t\t\tpreviousCell = currentCell; \t\t} \t\telse { \t\t\tpreviousCell = null; \t\t} \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0435\u0451 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u043e\u0439, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0435\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0432\u0435 \u0440\u0430\u0437\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0442\u043e \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\t\tif (Physics.Raycast(inputRay, out hit)) { \t\t\tHexCell currentCell = hexGrid.GetCell(hit.point); \t\t\tif (previousCell &amp;&amp; previousCell != currentCell) { \t\t\t\tValidateDrag(currentCell); \t\t\t} \t\t\telse { \t\t\t\tisDrag = false; \t\t\t} \t\t\tEditCells(currentCell); \t\t\tpreviousCell = currentCell; \t\t\tisDrag = true; \t\t}<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u043d\u0430\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435? \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0432, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043e\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439. \u041c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u044d\u0442\u043e, \u043e\u0431\u0445\u043e\u0434\u044f \u0432 \u0446\u0438\u043a\u043b\u0435 \u0435\u0451 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u0441\u0440\u0430\u0437\u0443 \u0443\u0437\u043d\u0430\u0451\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid ValidateDrag (HexCell currentCell) { \t\tfor ( \t\t\tdragDirection = HexDirection.NE; \t\t\tdragDirection &lt;= HexDirection.NW; \t\t\tdragDirection++ \t\t) { \t\t\tif (previousCell.GetNeighbor(dragDirection) == currentCell) { \t\t\t\tisDrag = true; \t\t\t\treturn; \t\t\t} \t\t} \t\tisDrag = false; \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043b\u0438 \u043c\u044b \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0451\u0440\u0433\u0430\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0439?<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u043a\u0443\u0440\u0441\u043e\u0440 \u0432\u0434\u043e\u043b\u044c \u0440\u0451\u0431\u0435\u0440 \u044f\u0447\u0435\u0439\u043a\u0438, \u043e\u043d\u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u043a\u043e\u043b\u0435\u0431\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u044d\u0442\u0438\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u042d\u0442\u043e \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u00ab\u0434\u0440\u043e\u0436\u0430\u0449\u0438\u043c\u00bb \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f\u043c, \u043d\u043e \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0438\u0434\u0442\u0438 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p><\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0440\u0435\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0440\u0435\u043a\u0438, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid EditCell (HexCell cell) { \t\tif (cell) { \t\t\tif (applyColor) { \t\t\t\tcell.Color = activeColor; \t\t\t} \t\t\tif (applyElevation) { \t\t\t\tcell.Elevation = activeElevation; \t\t\t} \t\t\tif (riverMode == OptionalToggle.No) { \t\t\t\tcell.RemoveRiver(); \t\t\t} \t\t\telse if (isDrag &amp;&amp; riverMode == OptionalToggle.Yes) { \t\t\t\tpreviousCell.SetOutgoingRiver(dragDirection); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u0443 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0443\u044e. \u041d\u043e \u043e\u043d \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0438\u0441\u0442\u0438. \u042d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u0438\u0441\u0442\u044c\u044e. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<pre><code class=\"cs\">\t\t\telse if (isDrag &amp;&amp; riverMode == OptionalToggle.Yes) { \t\t\t\tHexCell otherCell = cell.GetNeighbor(dragDirection.Opposite()); \t\t\t\tif (otherCell) { \t\t\t\t\totherCell.SetOutgoingRiver(dragDirection); \t\t\t\t} \t\t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u0438\u0434\u0438\u043c \u0438\u0445. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438\u0437\u0443\u0447\u0430\u044f \u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/editing-rivers\/cell-with-river-debug.png\"\/><\/div>\n<p>  <i>\u042f\u0447\u0435\u0439\u043a\u0430 \u0441 \u0440\u0435\u043a\u043e\u0439 \u0432 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 (debug inspector)?<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u0438 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u043c \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0430 \u0447\u0435\u0440\u0435\u0437 \u0435\u0433\u043e \u043c\u0435\u043d\u044e \u0432\u043a\u043b\u0430\u0434\u043a\u0438. \u041e\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u043a\u043e\u043c \u0432 \u0432\u0435\u0440\u0445\u043d\u0435\u043c \u043f\u0440\u0430\u0432\u043e\u043c \u0443\u0433\u043b\u0443 \u0432\u043a\u043b\u0430\u0434\u043a\u0438. \u041d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438, \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/div>\n<\/div>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/editing-rivers\/editing-rivers.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0420\u0443\u0441\u043b\u0430 \u0440\u0435\u043a \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438<\/h2>\n<p>  \u041f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0440\u0435\u043a\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438: \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0443\u0441\u043b\u0430 \u0440\u0435\u043a\u0438 \u0438 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u043f\u043e \u043d\u0435\u043c\u0443 \u0432\u043e\u0434\u0443. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0440\u0443\u0441\u043b\u0430, \u0430 \u0432\u043e\u0434\u0443 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043d\u0430 \u043f\u043e\u0442\u043e\u043c.<\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0435\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0430\u043c, \u0433\u0434\u0435 \u043e\u043d\u0430 \u0442\u0435\u0447\u0451\u0442 \u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f\u0445 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u041f\u043e\u043a\u0430 \u043c\u044b \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u0443 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u043e\u043b\u043e\u0441\u043e\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 quad. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043d\u0435\u0439 \u0440\u0443\u0441\u043b\u043e \u0440\u0435\u043a\u0438, \u043e\u043f\u0443\u0441\u0442\u0438\u0432 \u0441\u0440\u0435\u0434\u043d\u0438\u0439 quad \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0434\u0432\u0435 \u0441\u0442\u0435\u043d\u043a\u0438 \u0440\u0443\u0441\u043b\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-between-cells\/edge-strip.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043a\u0438 \u043a \u043f\u043e\u043b\u043e\u0441\u0435 \u0440\u0435\u0431\u0440\u0430.<\/i><\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u043a\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 quad \u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u0440\u0443\u0441\u043b\u043e \u0441 \u0434\u0432\u0443\u043c\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0442\u0435\u043d\u043a\u0430\u043c\u0438. \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 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 quad. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0443\u0441\u043b\u043e \u0441 \u043d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0435\u043d\u043a\u0430\u043c\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-between-cells\/edge-strip-four-quads.png\"\/><\/div>\n<p>  <i>\u0412\u0441\u0435\u0433\u0434\u0430 \u0447\u0435\u0442\u044b\u0440\u0435 quad.<\/i><\/p>\n<p>  \u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0443\u0434\u043e\u0431\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442.<\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430<\/h3>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u0442\u0440\u0451\u0445 \u043a \u0447\u0435\u0442\u044b\u0440\u0451\u043c \u043d\u0430 \u0440\u0435\u0431\u0440\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430. \u041f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c <code>EdgeVertices<\/code>, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0432 <code>v4<\/code> \u0432 <code>v5<\/code>, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0432 <code>v3<\/code> \u0432 <code>v4<\/code>. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u044e\u0442, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u0432\u0441\u044e\u0434\u0443. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0438 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic Vector3 v1, v2, v4, v5;<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u0443\u044e <code>v3<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic Vector3 v1, v2, v3, v4, v5;<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u041e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u0443\u0433\u043b\u043e\u0432\u044b\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u00bd \u0438 \u00be, \u0430 \u043d\u0435 \u0432 &frac13; \u0438 &frac23;.<\/p>\n<pre><code class=\"cs\">\tpublic EdgeVertices (Vector3 corner1, Vector3 corner2) { \t\tv1 = corner1; \t\tv2 = Vector3.Lerp(corner1, corner2, 0.25f); \t\tv3 = Vector3.Lerp(corner1, corner2, 0.5f); \t\tv4 = Vector3.Lerp(corner1, corner2, 0.75f); \t\tv5 = corner2; \t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c <code>v3<\/code> \u0438 \u0432 <code>TerraceLerp<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic static EdgeVertices TerraceLerp ( \t\tEdgeVertices a, EdgeVertices b, int step) \t{ \t\tEdgeVertices result; \t\tresult.v1 = HexMetrics.TerraceLerp(a.v1, b.v1, step); \t\tresult.v2 = HexMetrics.TerraceLerp(a.v2, b.v2, step); \t\tresult.v3 = HexMetrics.TerraceLerp(a.v3, b.v3, step); \t\tresult.v4 = HexMetrics.TerraceLerp(a.v4, b.v4, step); \t\tresult.v5 = HexMetrics.TerraceLerp(a.v5, b.v5, step); \t\treturn result; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>HexMesh<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0432 \u0432\u0435\u0435\u0440\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u0431\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeFan (Vector3 center, EdgeVertices edge, Color color) { \t\tAddTriangle(center, edge.v1, edge.v2); \t\tAddTriangleColor(color); \t\tAddTriangle(center, edge.v2, edge.v3); \t\tAddTriangleColor(color); \t\tAddTriangle(center, edge.v3, edge.v4); \t\tAddTriangleColor(color); \t\tAddTriangle(center, edge.v4, edge.v5); \t\tAddTriangleColor(color); \t}<\/code><\/pre>\n<p>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0435\u0433\u043e \u043f\u043e\u043b\u043e\u0441\u044b \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeStrip ( \t\tEdgeVertices e1, Color c1, \t\tEdgeVertices e2, Color c2 \t) { \t\tAddQuad(e1.v1, e1.v2, e2.v1, e2.v2); \t\tAddQuadColor(c1, c2); \t\tAddQuad(e1.v2, e1.v3, e2.v2, e2.v3); \t\tAddQuadColor(c1, c2); \t\tAddQuad(e1.v3, e1.v4, e2.v3, e2.v4); \t\tAddQuadColor(c1, c2); \t\tAddQuad(e1.v4, e1.v5, e2.v4, e2.v5); \t\tAddQuadColor(c1, c2); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-between-cells\/four-vertices.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-between-cells\/five-vertices.png\"\/><\/div>\n<p>  <i>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0438 \u043f\u044f\u0442\u0438 \u0432\u0435\u0440\u0448\u0438\u043d \u043d\u0430 \u0440\u0435\u0431\u0440\u043e.<\/i><\/p>\n<h3>\u0412\u044b\u0441\u043e\u0442\u0430 \u043b\u043e\u0436\u0430 \u0440\u0435\u043a\u0438<\/h3>\n<p>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u0440\u0443\u0441\u043b\u043e, \u043e\u043f\u0443\u0441\u0442\u0438\u0432 \u043d\u0438\u0436\u043d\u044e\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0440\u0435\u0431\u0440\u0430. \u041e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043b\u043e\u0436\u0430 \u0440\u0435\u043a\u0438. \u0425\u043e\u0442\u044f \u0442\u043e\u0447\u043d\u0430\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0430, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0432\u044b\u0441\u043e\u0442\u0443 \u043b\u043e\u0436\u0430 \u0440\u0435\u043a\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u043e\u0439. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u0434\u0435 \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0442\u0435\u0447\u044c \u0432\u0432\u0435\u0440\u0445 \u043f\u043e \u0442\u0435\u0447\u0435\u043d\u0438\u044e. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043b\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0438\u0437\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043d\u0438\u0437\u0443, \u0434\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0430\u043c\u044b\u0445 \u043e\u0442\u043a\u043b\u043e\u043d\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 \u044f\u0447\u0435\u0435\u043a, \u0432 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u0432\u043e\u0434\u044b.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u044d\u0442\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 <code>HexMetrics<\/code> \u0438 \u0432\u044b\u0440\u0430\u0437\u0438\u043c \u0435\u0433\u043e \u043a\u0430\u043a \u0432\u044b\u0441\u043e\u0442\u0443. \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430 \u043e\u0434\u0438\u043d \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic const float streamBedElevationOffset = -1f;<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u043c\u0435\u0442\u0440\u0438\u043a\u0443 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 <code>HexCell<\/code>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043b\u043e\u0436\u0430 \u0440\u0435\u043a\u0438 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic float StreamBedY { \t\tget { \t\t\treturn \t\t\t\t(elevation + HexMetrics.streamBedElevationOffset) * \t\t\t\tHexMetrics.elevationStep; \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0443\u0441\u043b\u0430<\/h3>\n<p>  \u041a\u043e\u0433\u0434\u0430 <code>HexMesh<\/code> \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u0435\u0442 \u043b\u0438 \u043f\u043e \u0435\u0451 \u0440\u0435\u0431\u0440\u0443 \u0440\u0435\u043a\u0430. \u0415\u0441\u043b\u0438 \u0434\u0430, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0440\u0435\u0431\u0440\u0430 \u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u0443 \u043b\u043e\u0436\u0430 \u0440\u0435\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid Triangulate (HexDirection direction, HexCell cell) { \t\tVector3 center = cell.Position; \t\tEdgeVertices e = new EdgeVertices( \t\t\tcenter + HexMetrics.GetFirstSolidCorner(direction), \t\t\tcenter + HexMetrics.GetSecondSolidCorner(direction) \t\t);  \t\tif (cell.HasRiverThroughEdge(direction)) { \t\t\te.v3.y = cell.StreamBedY; \t\t}  \t\tTriangulateEdgeFan(center, e, cell.Color);  \t\tif (direction &lt;= HexDirection.SE) { \t\t\tTriangulateConnection(direction, cell, e); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-between-cells\/adjusting-one-edge.png\"\/><\/div>\n<p>  <i>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430.<\/i><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0440\u0435\u043a\u0438, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0434\u044b\u0440\u044b \u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0435. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u0438\u0445, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u0440\u0435\u0431\u0440\u043e, \u0430 \u0437\u0430\u0442\u0435\u043c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateConnection ( \t\tHexDirection direction, HexCell cell, EdgeVertices e1 \t) { \t\tHexCell neighbor = cell.GetNeighbor(direction); \t\tif (neighbor == null) { \t\t\treturn; \t\t}  \t\tVector3 bridge = HexMetrics.GetBridge(direction); \t\tbridge.y = neighbor.Position.y - cell.Position.y; \t\tEdgeVertices e2 = new EdgeVertices( \t\t\te1.v1 + bridge, \t\t\te1.v5 + bridge \t\t);  \t\tif (cell.HasRiverThroughEdge(direction)) { \t\t\te2.v3.y = neighbor.StreamBedY; \t\t} \t\t \t\t&hellip; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-between-cells\/adjusting-both-edges.png\"\/><\/div>\n<p>  <i>\u0417\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u0435 \u0440\u0443\u0441\u043b\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0440\u0451\u0431\u0435\u0440.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-between-cells\/river-channels-between-cells.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0420\u0443\u0441\u043b\u0430 \u0440\u0435\u043a, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043f\u043e \u044f\u0447\u0435\u0439\u043a\u0435<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0443\u0441\u043b\u0430 \u0440\u0435\u043a. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u043a\u0430 \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u044f\u0447\u0435\u0439\u043a\u0443, \u0440\u0443\u0441\u043b\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0435\u0451 \u0446\u0435\u043d\u0442\u0440\u0435. \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u043e \u0441\u043b\u0443\u0447\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u043a\u0430 \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u044f\u0447\u0435\u0439\u043a\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u0440\u0430\u044f \u0434\u043e \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0435\u043a\u0438 \u043d\u0435\u0442, \u0442\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0432\u0435\u0435\u0440\u043e\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u043a\u0430 \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u0435\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0443\u0441\u043b\u043e. \u041f\u043e \u0441\u0443\u0442\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0432 \u043b\u0438\u043d\u0438\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0432 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438. \u0422\u043e\u0433\u0434\u0430 \u0432\u0435\u0435\u0440 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0440\u0430\u043f\u0435\u0446\u043e\u0438\u0434.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/channel-across-triangle.png\"\/><\/div>\n<p>  <i>\u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0443\u0441\u043b\u043e \u0432 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a.<\/i><\/p>\n<p>  \u0422\u0430\u043a\u0438\u0435 \u0440\u0443\u0441\u043b\u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0434\u043b\u0438\u043d\u043d\u0435\u0435, \u0447\u0435\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a. \u042d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u0440\u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0432\u0435\u0440\u0448\u0438\u043d. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0442\u0440\u0430\u043f\u0435\u0446\u043e\u0438\u0434 \u043d\u0430 \u0434\u0432\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430, \u0432\u0441\u0442\u0430\u0432\u0438\u0432 \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043d\u0430\u0431\u043e\u0440 \u0432\u0435\u0440\u0448\u0438\u043d \u0440\u0435\u0431\u0440\u0430 \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0438 \u0440\u0435\u0431\u0440\u043e\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/triangulation.png\"\/><\/div>\n<p>  <i>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u0430.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u0441 \u0440\u0435\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0431\u0435\u0437 \u0440\u0435\u043a\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u043d\u0435\u0451 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u0430, \u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u0430 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432\u0435\u0435\u0440 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tvoid Triangulate (HexDirection direction, HexCell cell) { \t\tVector3 center = cell.Position; \t\tEdgeVertices e = new EdgeVertices( \t\t\tcenter + HexMetrics.GetFirstSolidCorner(direction), \t\t\tcenter + HexMetrics.GetSecondSolidCorner(direction) \t\t);  \t\tif (cell.HasRiver) { \t\t\tif (cell.HasRiverThroughEdge(direction)) { \t\t\t\te.v3.y = cell.StreamBedY; \t\t\t\tTriangulateWithRiver(direction, cell, center, e); \t\t\t} \t\t} \t\telse { \t\t\tTriangulateEdgeFan(center, e, cell.Color); \t\t}  \t\tif (direction &lt;= HexDirection.SE) { \t\t\tTriangulateConnection(direction, cell, e); \t\t} \t} \t \tvoid TriangulateWithRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/holes.png\"\/><\/div>\n<p>  <i>\u0414\u044b\u0440\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0435\u043a\u0438.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043b\u0443\u0447\u0448\u0435 \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic const float cellPerturbStrength = 0f; \/\/ 4f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/unperturbed.png\"\/><\/div>\n<p>  <i>\u041d\u0435\u0438\u0441\u043a\u0430\u0436\u0451\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b.<\/i><\/p>\n<h3>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u043a\u0432\u043e\u0437\u044c \u044f\u0447\u0435\u0439\u043a\u0443<\/h3>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0443\u0441\u043b\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0447\u0435\u0440\u0435\u0437 \u0447\u0430\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0432 \u043b\u0438\u043d\u0438\u044e. \u042d\u0442\u0430 \u043b\u0438\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u043c\u0435\u0442\u044c \u0442\u0443 \u0436\u0435 \u0448\u0438\u0440\u0438\u043d\u0443, \u0447\u0442\u043e \u0438 \u0440\u0443\u0441\u043b\u043e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043b\u0435\u0432\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443, \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0432\u0448\u0438\u0441\u044c \u043d\u0430 \u00bc \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u0434\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0433\u043b\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tVector3 centerL = center + \t\t\tHexMetrics.GetFirstSolidCorner(direction.Previous()) * 0.25f; \t}<\/code><\/pre>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438 \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0432\u0442\u043e\u0440\u043e\u0439 \u0443\u0433\u043e\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\t\tVector3 centerL = center + \t\t\tHexMetrics.GetFirstSolidCorner(direction.Previous()) * 0.25f; \t\tVector3 centerR = center + \t\t\tHexMetrics.GetSecondSolidCorner(direction.Next()) * 0.25f;<\/code><\/pre>\n<p>  \u0421\u0440\u0435\u0434\u043d\u044e\u044e \u043b\u0438\u043d\u0438\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438, \u0441\u043e\u0437\u0434\u0430\u0432 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0438 \u0440\u0435\u0431\u0440\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\t\tEdgeVertices m = new EdgeVertices( \t\t\tVector3.Lerp(centerL, e.v1, 0.5f), \t\t\tVector3.Lerp(centerR, e.v5, 0.5f) \t\t);<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u0440\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0446\u0435\u043d\u0442\u0440, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u0443\u0442 \u043d\u0438\u0436\u043d\u0438\u043c\u0438 \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0440\u0443\u0441\u043b\u0430.<\/p>\n<pre><code class=\"cs\">\t\tm.v3.y = center.y = e.v3.y;<\/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 <code>TriangulateEdgeStrip<\/code> \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043c\u0435\u0436\u0434\u0443 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043b\u0438\u043d\u0438\u0435\u0439 \u0438 \u043b\u0438\u043d\u0438\u0435\u0439 \u0440\u0435\u0431\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\t\tTriangulateEdgeStrip(m, cell.Color, e, cell.Color);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/pinched-strip.png\"\/><\/div>\n<p>  <i>\u0421\u0436\u0430\u0442\u044b\u0435 \u0440\u0443\u0441\u043b\u0430.<\/i><\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0440\u0443\u0441\u043b\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u0436\u0430\u0442\u044b\u043c\u0438. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043b\u0438\u0437\u043a\u0438 \u0434\u0440\u0443\u0433 \u043a \u0434\u0440\u0443\u0433\u0443. \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c?<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043c, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0440\u0430\u0432\u043d\u0430 1, \u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 \u00bd. \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0440\u0435\u0431\u0440\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438, \u0442\u043e \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u0430 \u00be.<\/p>\n<p>  \u0428\u0438\u0440\u0438\u043d\u0430 \u0440\u0443\u0441\u043b\u0430 \u0440\u0430\u0432\u043d\u0430 \u00bd \u0438 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u0438\u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0440\u0430\u0432\u043d\u0430 \u00be, \u0442\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u00bc, \u043f\u043e &#038;frac18; \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d \u0440\u0443\u0441\u043b\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/relative-lengths.png\"\/><\/div>\n<p>  <i>\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u0438\u043d\u044b.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u0438\u043d\u0430 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0440\u0430\u0432\u043d\u0430 \u00be, \u0442\u043e &#038;frac18; \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u0438\u043d\u044b \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0440\u0430\u0432\u043d\u043e\u0439 &#038;frac16;. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0433\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0438 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0448\u0435\u0441\u0442\u044b\u043c\u0438 \u0434\u043e\u043b\u044f\u043c\u0438, \u0430 \u043d\u0435 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044f\u043c\u0438.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0442\u0430\u043a\u043e\u0439 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 <code>EdgeVertices<\/code> \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440. \u0412\u043c\u0435\u0441\u0442\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0439 \u0434\u043b\u044f <code>v2<\/code> \u0438 <code>v4<\/code> \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/p>\n<pre><code class=\"cs\">\tpublic EdgeVertices (Vector3 corner1, Vector3 corner2, float outerStep) { \t\tv1 = corner1; \t\tv2 = Vector3.Lerp(corner1, corner2, outerStep); \t\tv3 = Vector3.Lerp(corner1, corner2, 0.5f); \t\tv4 = Vector3.Lerp(corner1, corner2, 1f - outerStep); \t\tv5 = corner2; \t}<\/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 \u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 &#038;frac16; \u0432 <code>HexMesh.TriangulateWithRiver<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tEdgeVertices m = new EdgeVertices( \t\t\tVector3.Lerp(centerL, e.v1, 0.5f), \t\t\tVector3.Lerp(centerR, e.v5, 0.5f), \t\t\t1f \/ 6f \t\t);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/straight-channels.png\"\/><\/div>\n<p>  <i>\u041f\u0440\u044f\u043c\u044b\u0435 \u0440\u0443\u0441\u043b\u0430.<\/i><\/p>\n<p>  \u0421\u0434\u0435\u043b\u0430\u0432 \u0440\u0443\u0441\u043b\u043e \u043f\u0440\u044f\u043c\u044b\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0440\u0430\u043f\u0435\u0446\u043e\u0438\u0434\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0441\u0443 \u0440\u0435\u0431\u0440\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u043f\u043e \u0431\u043e\u043a\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\t\tAddTriangle(centerL, m.v1, m.v2); \t\tAddTriangleColor(cell.Color); \t\tAddTriangle(centerR, m.v4, m.v5); \t\tAddTriangleColor(cell.Color);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/side-triangles.png\"\/><\/div>\n<p>  <i>\u0411\u043e\u043a\u043e\u0432\u044b\u0435 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438.<\/i><\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u0432\u0443\u043c\u044f \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438, \u0441\u043e\u0437\u0434\u0430\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u0430\u043d\u0430\u043b\u0430.<\/p>\n<pre><code class=\"cs\">\t\tAddTriangle(centerL, m.v1, m.v2); \t\tAddTriangleColor(cell.Color); \t\tAddQuad(centerL, center, m.v2, m.v3); \t\tAddQuadColor(cell.Color); \t\tAddQuad(center, centerR, m.v3, m.v4); \t\tAddQuadColor(cell.Color); \t\tAddTriangle(centerR, m.v4, m.v5); \t\tAddTriangleColor(cell.Color);<\/code><\/pre>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b <code>AddQuadColor<\/code>, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0435\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u041f\u043e\u043a\u0430 \u043e\u043d\u0430 \u043d\u0430\u043c \u043d\u0435 \u0431\u044b\u043b\u0430 \u043d\u0443\u0436\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0451.<\/p>\n<pre><code class=\"cs\">\tvoid AddQuadColor (Color color) { \t\tcolors.Add(color); \t\tcolors.Add(color); \t\tcolors.Add(color); \t\tcolors.Add(color); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/complete-channels.png\"\/><\/div>\n<p>  <i>\u0417\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u044f\u043c\u044b\u0435 \u0440\u0443\u0441\u043b\u0430.<\/i><\/p>\n<h3>\u041d\u0430\u0447\u0430\u043b\u043e \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438<\/h3>\n<p>  \u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u0447\u0430\u0441\u0442\u0438, \u0438\u043c\u0435\u044e\u0449\u0435\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0430\u043b\u043e \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0440\u0435\u043a\u0438, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u044d\u0442\u043e \u0432 <code>Triangulate<\/code> \u0438 \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.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiver) { \t\t\tif (cell.HasRiverThroughEdge(direction)) { \t\t\t\te.v3.y = cell.StreamBedY; \t\t\t\tif (cell.HasRiverBeginOrEnd) { \t\t\t\t\tTriangulateWithRiverBeginOrEnd(direction, cell, center, e); \t\t\t\t} \t\t\t\telse { \t\t\t\t\tTriangulateWithRiver(direction, cell, center, e); \t\t\t\t} \t\t\t} \t\t}<\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0443\u0441\u043b\u043e \u0432 \u0446\u0435\u043d\u0442\u0440\u0435, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0440\u0435\u0431\u0440\u043e \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0438\u043b\u0438 \u0440\u0435\u0431\u0440\u043e\u043c. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0443\u0441\u043b\u043e, \u0442\u043e \u043d\u0430\u0441 \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0441\u0442\u0440\u043e\u0438\u0442, \u0447\u0442\u043e \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0436\u0430\u0442\u044b\u043c.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiverBeginOrEnd ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tEdgeVertices m = new EdgeVertices( \t\t\tVector3.Lerp(center, e.v1, 0.5f), \t\t\tVector3.Lerp(center, e.v5, 0.5f) \t\t); \t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0443\u0441\u043b\u043e \u043d\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u043c\u0435\u043b\u043a\u0438\u043c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u044b\u0441\u0442\u0440\u043e, \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0432\u044b\u0441\u043e\u0442\u0443 \u043b\u043e\u0436\u0430 \u0440\u0435\u043a\u0438. \u041d\u043e \u0446\u0435\u043d\u0442\u0440 \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<pre><code class=\"cs\">\t\tm.v3.y = e.v3.y;<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u0434\u043d\u043e\u0439 \u043f\u043e\u043b\u043e\u0441\u043e\u0439 \u0440\u0435\u0431\u0440\u0430 \u0438 \u0432\u0435\u0435\u0440\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\t\tTriangulateEdgeStrip(m, cell.Color, e, cell.Color); \t\tTriangulateEdgeFan(center, m, cell.Color);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/begin-and-end.png\"\/><\/div>\n<p>  <i>\u0422\u043e\u0447\u043a\u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430.<\/i><\/p>\n<h3>\u041f\u043e\u0432\u043e\u0440\u043e\u0442\u044b \u0432 \u043e\u0434\u0438\u043d \u0448\u0430\u0433<\/h3>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0437\u043a\u0438\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0438\u0433\u0437\u0430\u0433\u043e\u043c \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043c\u0435\u0436\u0434\u0443 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0442\u043e\u0436\u0435 \u0432 <code>TriangulateWithRiver<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0441 \u043a\u0430\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0440\u0435\u043a\u0438 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/zigzag.png\"\/><\/div>\n<p>  <i>\u0420\u0435\u043a\u0430, \u0438\u0434\u0443\u0449\u0430\u044f \u0437\u0438\u0433\u0437\u0430\u0433\u043e\u043c.<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u0430, \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c, \u0442\u043e \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u044f\u043c\u0430\u044f \u0440\u0435\u043a\u0430. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0443\u0436\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u043b\u0438. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u0441\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u044f \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e.<\/p>\n<pre><code class=\"cs\">\t\tVector3 centerL, centerR; \t\tif (cell.HasRiverThroughEdge(direction.Opposite())) { \t\t\tcenterL = center + \t\t\t\tHexMetrics.GetFirstSolidCorner(direction.Previous()) * 0.25f; \t\t\tcenterR = center + \t\t\t\tHexMetrics.GetSecondSolidCorner(direction.Next()) * 0.25f; \t\t} \t\telse { \t\t\tcenterL = centerR = center; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/pinched-again.png\"\/><\/div>\n<p>  <i>\u0421\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u0435 \u0440\u0443\u0441\u043b\u0430-\u0437\u0438\u0433\u0437\u0430\u0433\u0438.<\/i><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u043a\u0438\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u044f\u0447\u0435\u0439\u043a\u0438 \u0440\u0435\u043a\u0430, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0440\u043e\u0432\u043d\u044f\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u0441 \u0440\u0435\u0431\u0440\u043e\u043c \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u043e\u0439 \u0438 \u0441\u043e\u0441\u0435\u0434\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e, \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043b\u0438\u043d\u0438\u0438 \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0438 \u043e\u0431\u0449\u0438\u043c \u0443\u0433\u043b\u043e\u043c. \u0414\u0440\u0443\u0433\u0430\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0446\u0435\u043d\u0442\u0440\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverThroughEdge(direction.Opposite())) { \t\t\tcenterL = center + \t\t\t\tHexMetrics.GetFirstSolidCorner(direction.Previous()) * 0.25f; \t\t\tcenterR = center + \t\t\t\tHexMetrics.GetSecondSolidCorner(direction.Next()) * 0.25f; \t\t} \t\telse if (cell.HasRiverThroughEdge(direction.Next())) { \t\t\tcenterL = center; \t\t\tcenterR = Vector3.Lerp(center, e.v5, 0.5f); \t\t} \t\telse if (cell.HasRiverThroughEdge(direction.Previous())) { \t\t\tcenterL = Vector3.Lerp(center, e.v1, 0.5f); \t\t\tcenterR = center; \t\t} \t\telse { \t\t\tcenterL = centerR = center; \t\t}<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043d\u044f\u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043b\u0435\u0432\u0430\u044f \u0438 \u043f\u0440\u0430\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0439\u0441\u044f \u0446\u0435\u043d\u0442\u0440 \u0438\u0445 \u0443\u0441\u0440\u0435\u0434\u043d\u0435\u043d\u0438\u0435\u043c.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverThroughEdge(direction.Opposite())) { \t\t\t&hellip; \t\t}\t\t \t\tcenter = Vector3.Lerp(centerL, centerR, 0.5f);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/twisted-center-edge.png\"\/><\/div>\n<p>  <i>\u0421\u043c\u0435\u0449\u0451\u043d\u043d\u043e\u0435 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0431\u0440\u043e.<\/i><\/p>\n<p>  \u0425\u043e\u0442\u044f \u043a\u0430\u043d\u0430\u043b \u0438\u043c\u0435\u0435\u0442 \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443, \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0436\u0430\u0442\u044b\u043c. \u042d\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u043e\u043c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438 \u043d\u0430 60\u00b0. \u041c\u043e\u0436\u043d\u043e \u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442, \u0441\u043b\u0435\u0433\u043a\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432 \u0448\u0438\u0440\u0438\u043d\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u0441 \u00bd \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c &frac23;.<\/p>\n<pre><code class=\"cs\">\t\telse if (cell.HasRiverThroughEdge(direction.Next())) { \t\t\tcenterL = center; \t\t\tcenterR = Vector3.Lerp(center, e.v5, 2f \/ 3f); \t\t} \t\telse if (cell.HasRiverThroughEdge(direction.Previous())) { \t\t\tcenterL = Vector3.Lerp(center, e.v1, 2f \/ 3f); \t\t\tcenterR = center; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/zigzag-without-pinch.png\"\/><\/div>\n<p>  <i>\u0417\u0438\u0433\u0437\u0430\u0433 \u0431\u0435\u0437 \u0441\u0436\u0430\u0442\u0438\u044f.<\/i><\/p>\n<h3>\u0414\u0432\u0443\u0445\u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u044b\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b<\/h3>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0441\u043b\u0443\u0447\u0430\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0437\u0438\u0433\u0437\u0430\u0433\u0430\u043c\u0438 \u0438 \u043f\u0440\u044f\u043c\u044b\u043c\u0438 \u0440\u0435\u043a\u0430\u043c\u0438. \u042d\u0442\u043e \u0434\u0432\u0443\u0445\u0441\u0442\u0443\u043f\u0435\u043d\u0447\u0430\u0442\u044b\u0435 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u044b, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0435 \u043c\u044f\u0433\u043a\u043e \u0438\u0437\u0433\u0438\u0431\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0440\u0435\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/curves.png\"\/><\/div>\n<p>  <i>\u0418\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0440\u0435\u043a\u0430.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0434\u0432\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>direction.Next().Next()<\/code>. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 <code>HexDirection<\/code> \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>Next2<\/code> \u0438 <code>Previous2<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic static HexDirection Previous2 (this HexDirection direction) { \t\tdirection -= 2; \t\treturn direction &gt;= HexDirection.NE ? direction : (direction + 6); \t}  \tpublic static HexDirection Next2 (this HexDirection direction) { \t\tdirection += 2; \t\treturn direction &lt;= HexDirection.NW ? direction : (direction - 6); \t}<\/code><\/pre>\n<p>  \u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a <code>HexMesh.TriangulateWithRiver<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0439 \u0438\u0437\u0432\u0438\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u0440\u0435\u043a\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>direction.Next2()<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverThroughEdge(direction.Opposite())) { \t\t\tcenterL = center + \t\t\t\tHexMetrics.GetFirstSolidCorner(direction.Previous()) * 0.25f; \t\t\tcenterR = center + \t\t\t\tHexMetrics.GetSecondSolidCorner(direction.Next()) * 0.25f; \t\t} \t\telse if (cell.HasRiverThroughEdge(direction.Next())) { \t\t\tcenterL = center; \t\t\tcenterR = Vector3.Lerp(center, e.v5, 2f \/ 3f); \t\t} \t\telse if (cell.HasRiverThroughEdge(direction.Previous())) { \t\t\tcenterL = Vector3.Lerp(center, e.v1, 2f \/ 3f); \t\t\tcenterR = center; \t\t} \t\telse if (cell.HasRiverThroughEdge(direction.Next2())) { \t\t\tcenterL = centerR = center; \t\t} \t\telse { \t\t\tcenterL = centerR = center; \t\t}<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0443\u044e \u043b\u0438\u043d\u0438\u044e \u0432 \u0447\u0430\u0441\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u0440\u0438\u0432\u043e\u0439. \u0415\u0441\u043b\u0438 \u0431\u044b \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430, \u0442\u043e \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\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.<\/p>\n<pre><code class=\"cs\">\t\telse if (cell.HasRiverThroughEdge(direction.Next2())) { \t\t\tcenterL = center; \t\t\tcenterR = center + \t\t\t\tHexMetrics.GetSolidEdgeMiddle(direction.Next()) * 0.5f; \t\t} \t\telse { \t\t\tcenterL = center + \t\t\t\tHexMetrics.GetSolidEdgeMiddle(direction.Previous()) * 0.5f; \t\t\tcenterR = center; \t\t}<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432 <code>HexMetrics<\/code>. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0442\u044c \u0434\u0432\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0443\u0433\u043b\u043e\u0432 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0446\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic static Vector3 GetSolidEdgeMiddle (HexDirection direction) { \t\treturn \t\t\t(corners[(int)direction] + corners[(int)direction + 1]) * \t\t\t(0.5f * solidFactor); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/pinched-curves.png\"\/><\/div>\n<p>  <i>\u0421\u043b\u0435\u0433\u043a\u0430 \u0441\u0436\u0430\u0442\u044b\u0435 \u043a\u0440\u0438\u0432\u044b\u0435.<\/i><\/p>\n<p>  \u041d\u0430\u0448\u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0438\u043d\u0438\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u0451\u0440\u043d\u0443\u0442\u044b \u043d\u0430 30\u00b0. \u041d\u043e \u043e\u043d\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0440\u0443\u0441\u043b\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0436\u0430\u0442\u044b. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u0442\u043e\u0447\u043a\u0430 \u0440\u0435\u0431\u0440\u0430 \u0431\u043b\u0438\u0436\u0435 \u043a \u0446\u0435\u043d\u0442\u0440\u0443, \u0447\u0435\u043c \u0443\u0433\u043e\u043b \u0440\u0435\u0431\u0440\u0430. \u0415\u0451 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u0440\u0430\u0434\u0438\u0443\u0441\u0443, \u0430 \u043d\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u043e\u043c.<\/p>\n<p>  \u041c\u044b \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u0432 <code>HexMetrics<\/code>. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 <code>HexMetrics<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic const float outerToInner = 0.866025404f; \tpublic const float innerToOuter = 1f \/ outerToInner;  \tpublic const float outerRadius = 10f;  \tpublic const float innerRadius = outerRadius * outerToInner;<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0443 \u0432 <code>HexMesh.TriangulateWithRiver<\/code>. \u0420\u0443\u0441\u043b\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0436\u0430\u0442\u044b\u043c\u0438 \u0438\u0437-\u0437\u0430 \u0438\u0445 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430, \u043d\u043e \u044d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u0435\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u043e, \u0447\u0435\u043c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0437\u0438\u0433\u0437\u0430\u0433\u0430\u043c\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e.<\/p>\n<pre><code class=\"cs\">\t\telse if (cell.HasRiverThroughEdge(direction.Next2())) { \t\t\tcenterL = center; \t\t\tcenterR = center + \t\t\t\tHexMetrics.GetSolidEdgeMiddle(direction.Next()) * \t\t\t\t(0.5f * HexMetrics.innerToOuter); \t\t} \t\telse { \t\t\tcenterL = center + \t\t\t\tHexMetrics.GetSolidEdgeMiddle(direction.Previous()) * \t\t\t\t(0.5f * HexMetrics.innerToOuter); \t\t\tcenterR = center; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/smooth-curves.png\"\/><\/div>\n<p>  <i>\u041f\u043b\u0430\u0432\u043d\u044b\u0435 \u043a\u0440\u0438\u0432\u044b\u0435.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/river-channels-across-cells\/river-channels-across-cells.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u043f\u043e \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u0443 \u0441 \u0440\u0435\u043a\u0430\u043c\u0438<\/h2>\n<p>  \u041d\u0430\u0448\u0438 \u0440\u0435\u043a\u0438 \u0433\u043e\u0442\u043e\u0432\u044b. \u041d\u043e \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u044f\u0447\u0435\u0435\u043a, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0440\u0435\u043a\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u0430\u043a\u0440\u043e\u0435\u043c \u044d\u0442\u0438 \u0434\u044b\u0440\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/triangulating-adjacent-to-rivers\/holes-alongside-channels.png\"\/><\/div>\n<p>  <i>\u0414\u044b\u0440\u044b \u0440\u044f\u0434\u043e\u043c \u0441 \u0440\u0443\u0441\u043b\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u043a\u0443, \u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u0442\u0435\u0447\u0451\u0442 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0442\u043e \u0432 <code>Triangulate<\/code> \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiver) { \t\t\tif (cell.HasRiverThroughEdge(direction)) { \t\t\t\te.v3.y = cell.StreamBedY; \t\t\t\tif (cell.HasRiverBeginOrEnd) { \t\t\t\t\tTriangulateWithRiverBeginOrEnd(direction, cell, center, e); \t\t\t\t} \t\t\t\telse { \t\t\t\t\tTriangulateWithRiver(direction, cell, center, e); \t\t\t\t} \t\t\t} \t\t\telse { \t\t\t\tTriangulateAdjacentToRiver(direction, cell, center, e); \t\t\t} \t\t} \t\telse { \t\t\tTriangulateEdgeFan(center, e, cell.Color); \t\t}<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 \u043c\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u043e\u043b\u043e\u0441\u043e\u0439 \u0438 \u0432\u0435\u0435\u0440\u043e\u043c. \u0422\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0435\u0440\u0430 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u0443 \u0440\u0435\u0431\u0440\u0443 \u0447\u0430\u0441\u0442\u0435\u0439, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445 \u0440\u0435\u043a\u0443.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateAdjacentToRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tEdgeVertices m = new EdgeVertices( \t\t\tVector3.Lerp(center, e.v1, 0.5f), \t\t\tVector3.Lerp(center, e.v5, 0.5f) \t\t); \t\t \t\tTriangulateEdgeStrip(m, cell.Color, e, cell.Color); \t\tTriangulateEdgeFan(center, m, cell.Color); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/triangulating-adjacent-to-rivers\/filled-holes.png\"\/><\/div>\n<p>  <i>\u041d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043a\u0440\u0438\u0432\u044b\u0445 \u0438 \u043f\u0440\u044f\u043c\u044b\u0445 \u0440\u0435\u043a\u0430\u0445.<\/i><\/p>\n<h3>\u0421\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0443\u0441\u043b\u043e<\/h3>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043d\u0430\u043c\u0438 \u0446\u0435\u043d\u0442\u0440 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u0441 \u0440\u0435\u043a\u043e\u0439. \u0421 \u0437\u0438\u0433\u0437\u0430\u0433\u0430\u043c\u0438 \u0432\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0430 \u043a\u0440\u0438\u0432\u044b\u0435 \u0438 \u043f\u0440\u044f\u043c\u044b\u0435 \u0440\u0435\u043a\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438 \u0442\u0438\u043f \u0440\u0435\u043a\u0438, \u0438 \u0435\u0451 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0442\u043e\u0433\u043e, \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043b\u0438 \u043c\u044b \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0438\u0432\u043e\u0439. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435, \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0435\u043a\u0443. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u043a \u0440\u0435\u0431\u0440\u0443.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverThroughEdge(direction.Next())) { \t\t\tif (cell.HasRiverThroughEdge(direction.Previous())) { \t\t\t\tcenter += HexMetrics.GetSolidEdgeMiddle(direction) * \t\t\t\t\t(HexMetrics.innerToOuter * 0.5f); \t\t\t} \t\t}  \t\tEdgeVertices m = new EdgeVertices( \t\t\tVector3.Lerp(center, e.v1, 0.5f), \t\t\tVector3.Lerp(center, e.v5, 0.5f) \t\t);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/triangulating-adjacent-to-rivers\/river-on-both-sides.png\"\/><\/div>\n<p>  <i>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u043a\u0430 \u0442\u0435\u0447\u0451\u0442 \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d.<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043d\u043e \u043d\u0435 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c, \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043f\u0440\u044f\u043c\u0430\u044f \u043b\u0438 \u043e\u043d\u0430. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0446\u0435\u043d\u0442\u0440 \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0443\u0433\u043b\u0443.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverThroughEdge(direction.Next())) { \t\t\tif (cell.HasRiverThroughEdge(direction.Previous())) { \t\t\t\tcenter += HexMetrics.GetSolidEdgeMiddle(direction) * \t\t\t\t\t(HexMetrics.innerToOuter * 0.5f); \t\t\t} \t\t\telse if ( \t\t\t\tcell.HasRiverThroughEdge(direction.Previous2()) \t\t\t) { \t\t\t\tcenter += HexMetrics.GetFirstSolidCorner(direction) * 0.25f; \t\t\t} \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/triangulating-adjacent-to-rivers\/along-straight-river.png\"\/><\/div>\n<p>  <i>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u0440\u044f\u043c\u043e\u0439 \u0440\u0435\u043a\u043e\u0439.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0432\u043e\u043f\u0440\u043e\u0441 \u0441 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0435\u0439, \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0441 \u043f\u0440\u044f\u043c\u044b\u043c\u0438 \u0440\u0435\u043a\u0430\u043c\u0438. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u2014 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u0430 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0438 \u043e\u043d\u0430 \u043f\u0440\u044f\u043c\u0430\u044f. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0443\u0433\u043b\u0443.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverThroughEdge(direction.Next())) { \t\t\tif (cell.HasRiverThroughEdge(direction.Previous())) { \t\t\t\tcenter += HexMetrics.GetSolidEdgeMiddle(direction) * \t\t\t\t\t(HexMetrics.innerToOuter * 0.5f); \t\t\t} \t\t\telse if ( \t\t\t\tcell.HasRiverThroughEdge(direction.Previous2()) \t\t\t) { \t\t\t\tcenter += HexMetrics.GetFirstSolidCorner(direction) * 0.25f; \t\t\t} \t\t} \t\telse if ( \t\t\tcell.HasRiverThroughEdge(direction.Previous()) &amp;&amp; \t\t\tcell.HasRiverThroughEdge(direction.Next2()) \t\t) { \t\t\tcenter += HexMetrics.GetSecondSolidCorner(direction) * 0.25f; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/triangulating-adjacent-to-rivers\/no-more-mismatch.png\"\/><\/div>\n<p>  <i>\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0435\u0442.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/triangulating-adjacent-to-rivers\/triangulating-adjacent-to-rivers.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u041e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0435 HexMesh<\/h2>\n<p>  \u041c\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044e \u0440\u0443\u0441\u0435\u043b. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u0445 \u0432\u043e\u0434\u043e\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u043e\u0434\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u0443\u0448\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u0448 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u043c. \u0411\u044b\u043b\u043e \u0431\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>HexMesh<\/code> \u0438 \u0434\u043b\u044f \u0441\u0443\u0448\u0438, \u0438 \u0434\u043b\u044f \u0432\u043e\u0434\u044b. \u0422\u0430\u043a \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0431\u043e\u0431\u0449\u0438\u043c <code>HexMesh<\/code>, \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0432 \u0435\u0433\u043e \u0432 \u043a\u043b\u0430\u0441\u0441, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0448\u0435\u0439 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f. \u0417\u0430\u0434\u0430\u0447\u0443 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0435\u0433\u043e \u044f\u0447\u0435\u0435\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c <code>HexGridChunk<\/code>.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 Perturb<\/h3>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434 <code>Perturb<\/code> \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0432 <code>HexMetrics<\/code>. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0435\u0433\u043e \u0432 <code>HexMetrics.Perturb<\/code>. \u042d\u0442\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0438\u043c\u044f \u043c\u0435\u0442\u043e\u0434\u0430, \u043d\u043e \u043e\u043d\u043e \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043a\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0438\u043c.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0432 \u043c\u0435\u0442\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u044c <code>HexMetrics<\/code>, \u0441\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0435\u0433\u043e \u043e\u0431\u0449\u0438\u043c \u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c, \u0430 \u043f\u043e\u0442\u043e\u043c \u0438\u0441\u043f\u0440\u0430\u0432\u044c\u0442\u0435 \u0435\u0433\u043e \u0438\u043c\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic static Vector3 Perturb (Vector3 position) { \t\tVector4 sample = SampleNoise(position); \t\tposition.x += (sample.x * 2f - 1f) * cellPerturbStrength; \t\tposition.z += (sample.z * 2f - 1f) * cellPerturbStrength; \t\treturn position; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438<\/h3>\n<p>  \u0412 <code>HexGridChunk<\/code> \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>hexMesh<\/code> \u043d\u0430 \u043e\u0431\u0449\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>terrain<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic HexMesh terrain; \/\/\tHexMesh hexMesh;  \tvoid Awake () { \t\tgridCanvas = GetComponentInChildren&lt;Canvas&gt;(); \/\/\t\thexMesh = GetComponentInChildren&lt;HexMesh&gt;();  \t\tcells = new HexCell[HexMetrics.chunkSizeX * HexMetrics.chunkSizeZ]; \t\tShowUI(false); \t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>Add\u2026<\/code> \u0438\u0437 <code>HexMesh<\/code> \u0432 <code>terrain.Add\u2026<\/code>. \u0417\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>Triangulate\u2026<\/code> \u0432 <code>HexGridChunk<\/code>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>Add\u2026<\/code> \u0432 <code>HexMesh<\/code> \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u043e\u0431\u0449\u0438\u043c\u0438. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f <code>HexGridChunk<\/code>, \u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043a \u043c\u0435\u0448\u0443 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0432 <code>HexMesh<\/code>.<\/p>\n<p>  \u041c\u044b \u0435\u0449\u0451 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438. \u0422\u0435\u043f\u0435\u0440\u044c <code>HexGridChunk.LateUpdate<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>Triangulate<\/code>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u0430\u043a \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 <code>Triangulate<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u0418 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0447\u0438\u0441\u0442\u043a\u0443 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0448\u0430 <code>HexMesh<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid LateUpdate () { \t\tTriangulate(); \/\/\t\thexMesh.Triangulate(cells); \t\tenabled = false; \t} \t \tpublic void Triangulate () { \t\tterrain.Clear(); \/\/\t\thexMesh.Clear(); \/\/\t\tvertices.Clear(); \/\/\t\tcolors.Clear(); \/\/\t\ttriangles.Clear(); \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tTriangulate(cells[i]); \t\t} \t\tterrain.Apply(); \/\/\t\thexMesh.vertices = vertices.ToArray(); \/\/\t\thexMesh.colors = colors.ToArray(); \/\/\t\thexMesh.triangles = triangles.ToArray(); \/\/\t\thexMesh.RecalculateNormals(); \/\/\t\tmeshCollider.sharedMesh = hexMesh; \t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>Clear<\/code> \u0438 <code>Apply<\/code> \u0432 <code>HexMesh<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void Clear () { \t\thexMesh.Clear(); \t\tvertices.Clear(); \t\tcolors.Clear(); \t\ttriangles.Clear(); \t}  \tpublic void Apply () { \t\thexMesh.SetVertices(vertices); \t\thexMesh.SetColors(colors); \t\thexMesh.SetTriangles(triangles, 0); \t\thexMesh.RecalculateNormals(); \t\tmeshCollider.sharedMesh = hexMesh; \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0451\u0442 SetVertices, SetColors \u0438 SetTriangles?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u0442\u0430\u043b\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 <code>Mesh<\/code>. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0448\u0435\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0438\u0441\u043a\u0438. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u0435\u0448\u0435\u0439.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>SetTriangles<\/code> \u0438\u043c\u0435\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 integer, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u043f\u043e\u0434\u043c\u0435\u0448\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u043c\u0435\u0448\u0438, \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e.<\/div>\n<\/div>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u0435\u0448\u0430 \u043a \u043f\u0440\u0435\u0444\u0430\u0431\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u041c\u044b \u0443\u0436\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u043a\u043e\u0440\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u043c\u0435\u0448\u0430. \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0435\u0433\u043e \u0432 <em>Terrain<\/em>, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/generalizing-hexmesh\/assigning-terrain.png\"\/><\/div>\n<p>  <i>\u041d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0440\u0435\u043b\u044c\u0435\u0444.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442?<\/b><\/p>\n<div class=\"spoiler_text\">\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438\u043c\u0435\u043d\u0438 \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0435\u0444\u0430\u0431\u0430. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u0441\u043e\u0437\u0434\u0430\u0432 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u0435\u0444\u0430\u0431\u0430. \u0418\u0437\u043c\u0435\u043d\u0438\u0442\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440, \u0430 \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043d\u043e\u043f\u043a\u0443 <em>Apply<\/em>, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0432 \u043f\u0440\u0435\u0444\u0430\u0431. \u041f\u043e\u043a\u0430 \u044d\u0442\u043e \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u0440\u0435\u0444\u0430\u0431\u043e\u0432.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0443\u043b\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u043e\u0432<\/h3>\n<p>  \u0425\u043e\u0442\u044f \u043c\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u0430\u0448\u0430 \u043a\u0430\u0440\u0442\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0434\u043e\u043b\u0436\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0440\u0430\u043d\u044c\u0448\u0435. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u0435\u0448\u0430 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442. \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441 \u043d\u044b\u043d\u0435\u0448\u043d\u0438\u043c <code>HexMesh<\/code>, \u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>  \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0438, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043e\u0434\u043d\u0438\u043c \u043c\u0435\u0448\u0435\u043c. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u043b\u043e \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0448\u0435\u0439. \u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0434\u0432\u0443\u043c\u044f \u043c\u0435\u0448\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0438.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043d\u0435 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043d\u0430\u0431\u043e\u0440\u0430\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 <code>HexMesh<\/code>. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0443\u043b \u0441\u043f\u0438\u0441\u043a\u043e\u0432. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0443\u043b\u0438\u043d\u0433\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0430\u043c\u0438 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0443\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.<\/p>\n<pre><code class=\"cs\">public static class ListPool&lt;T&gt; {  }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 ListPool&lt;T&gt;?<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u044b \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 <code>List&lt;int&gt;<\/code> \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u041f\u043e\u043c\u0435\u0441\u0442\u0438\u0432 <code>&lt;T&gt;<\/code> \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>ListPool<\/code>, \u043c\u044b \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441. \u0414\u043b\u044f \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 <code>T<\/code> (\u043e\u0442 \u0441\u043b\u043e\u0432\u0430 template).<\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432 \u043f\u0443\u043b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043a. \u041e\u0431\u044b\u0447\u043d\u043e \u044f \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u043f\u0438\u0441\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e Unity \u0438\u0445 \u043d\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442, \u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435\u0432\u0430\u0436\u043d\u043e.<\/p>\n<pre><code class=\"cs\">using System.Collections.Generic;  public static class ListPool&lt;T&gt; {  \tstatic Stack&lt;List&lt;T&gt;&gt; stack = new Stack&lt;List&lt;T&gt;&gt;(); }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 Stack&lt;List&lt;T&gt;&gt;?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u041e\u043d \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u0442\u0435\u043a \u0441\u043f\u0438\u0441\u043a\u043e\u0432. \u0410 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0443\u043b\u0430.<\/div>\n<\/div>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u0449\u0438\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437 \u043f\u0443\u043b\u0430. \u0415\u0441\u043b\u0438 \u0441\u0442\u0435\u043a \u043d\u0435 \u043f\u0443\u0441\u0442, \u043c\u044b \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043c \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438 \u0432\u0435\u0440\u043d\u0451\u043c \u044d\u0442\u043e\u0442. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic static List&lt;T&gt; Get () { \t\tif (stack.Count &gt; 0) { \t\t\treturn stack.Pop(); \t\t} \t\treturn new List&lt;T&gt;(); \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0445 \u0432 \u043f\u0443\u043b \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438. <code>ListPool<\/code> \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u043e\u0439 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u0441\u0442\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tpublic static void Add (List&lt;T&gt; list) { \t\tlist.Clear(); \t\tstack.Push(list); \t}<\/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 \u043f\u0443\u043b\u044b \u0432 <code>HexMesh<\/code>. \u0417\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0438 \u043d\u0435\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0447\u0430\u0441\u0442\u043d\u044b\u043c\u0438 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438. \u041f\u043e\u043c\u0435\u0442\u0438\u043c \u0438\u0445 \u043a\u0430\u043a <code>NonSerialized<\/code>, \u0447\u0442\u043e\u0431\u044b Unity \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430\u0441\u044c \u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438 \u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0418\u043b\u0438 \u0437\u0430\u043f\u0438\u0448\u0435\u043c <code>System.NonSerialized<\/code>, \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c <code>using System;<\/code> \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\t[NonSerialized] List&lt;Vector3&gt; vertices; \t[NonSerialized] List&lt;Color&gt; colors; \t[NonSerialized] List&lt;int&gt; triangles;  \/\/\tstatic List&lt;Vector3&gt; vertices = new List&lt;Vector3&gt;(); \/\/\tstatic List&lt;Color&gt; colors = new List&lt;Color&gt;(); \/\/\tstatic List&lt;int&gt; triangles = new List&lt;int&gt;();<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0435\u0448 \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0432 \u043d\u0435\u0433\u043e \u043d\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u0438\u0437 \u043f\u0443\u043b\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tpublic void Clear () { \t\thexMesh.Clear(); \t\tvertices = ListPool&lt;Vector3&gt;.Get(); \t\tcolors = ListPool&lt;Color&gt;.Get(); \t\ttriangles = ListPool&lt;int&gt;.Get(); \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0448\u0435\u0439 \u043e\u043d\u0438 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432 \u043f\u0443\u043b\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void Apply () { \t\thexMesh.SetVertices(vertices); \t\tListPool&lt;Vector3&gt;.Add(vertices); \t\thexMesh.SetColors(colors); \t\tListPool&lt;Color&gt;.Add(colors); \t\thexMesh.SetTriangles(triangles, 0); \t\tListPool&lt;int&gt;.Add(triangles); \t\thexMesh.RecalculateNormals(); \t\tmeshCollider.sharedMesh = hexMesh; \t} <\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0448\u0435\u0439 \u043c\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<h3>\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043b\u043b\u0430\u0439\u0434\u0435\u0440<\/h3>\n<p>  \u0425\u043e\u0442\u044f \u043d\u0430\u0448\u0435\u043c\u0443 \u0440\u0435\u043b\u044c\u0435\u0444\u0443 \u043d\u0443\u0436\u0435\u043d \u043a\u043e\u043b\u043b\u0430\u0439\u0434\u0435\u0440, \u0434\u043b\u044f \u0440\u0435\u043a \u043e\u043d \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f. \u041b\u0443\u0447\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0441\u043a\u0432\u043e\u0437\u044c \u0432\u043e\u0434\u0443 \u0438 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0442\u044c\u0441\u044f \u0441 \u0440\u0443\u0441\u043b\u043e\u043c \u043f\u043e\u0434 \u043d\u0435\u0439. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043a\u043e\u043b\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u0434\u043b\u044f <code>HexMesh<\/code>. \u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u044d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u0449\u0435\u0433\u043e \u043f\u043e\u043b\u044f <code>bool useCollider<\/code>. \u0414\u043b\u044f \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043c\u044b \u0435\u0433\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic bool useCollider;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/generalizing-hexmesh\/use-collider.png\"\/><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0430\u0439\u0434\u0435\u0440\u0430 \u043c\u0435\u0448\u0430.<\/i><\/p>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043b\u043b\u0430\u0439\u0434\u0435\u0440 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u043b\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tGetComponent&lt;MeshFilter&gt;().mesh = hexMesh = new Mesh(); \t\tif (useCollider) { \t\t\tmeshCollider = gameObject.AddComponent&lt;MeshCollider&gt;(); \t\t} \t\thexMesh.name = &quot;Hex Mesh&quot;; \t}  \tpublic void Apply () { \t\t&hellip; \t\tif (useCollider) { \t\t\tmeshCollider.sharedMesh = hexMesh; \t\t}  \t\t&hellip; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430<\/h3>\n<p>  \u0426\u0432\u0435\u0442\u0430 \u0432\u0435\u0440\u0448\u0438\u043d \u0442\u043e\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438. \u041e\u043d\u0438 \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u043c \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043d\u043e \u0432\u043e\u0434\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0446\u0432\u0435\u0442\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043b\u043b\u0430\u0439\u0434\u0435\u0440.<\/p>\n<pre><code class=\"cs\">\tpublic bool useCollider, useColors;  \tpublic void Clear () { \t\thexMesh.Clear(); \t\tvertices = ListPool&lt;Vector3&gt;.Get(); \t\tif (useColors) { \t\t\tcolors = ListPool&lt;Color&gt;.Get(); \t\t} \t\ttriangles = ListPool&lt;int&gt;.Get(); \t}  \tpublic void Apply () { \t\thexMesh.SetVertices(vertices); \t\tListPool&lt;Vector3&gt;.Add(vertices); \t\tif (useColors) { \t\t\thexMesh.SetColors(colors); \t\t\tListPool&lt;Color&gt;.Add(colors); \t\t} \t\t&hellip; \t}<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0440\u0435\u043b\u044c\u0435\u0444 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0432\u0435\u0440\u0448\u0438\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0445.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/generalizing-hexmesh\/use-colors.png\"\/><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043e\u0432.<\/i><\/p>\n<h3>\u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 UV<\/h3>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c, \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u0425\u043e\u0442\u044f \u0440\u0435\u043b\u044c\u0435\u0444 \u0438\u0445 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442, \u043e\u043d\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043d\u0430\u043c \u0434\u043b\u044f \u0432\u043e\u0434\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic bool useCollider, useColors, useUVCoordinates;  \t[NonSerialized] List&lt;Vector2&gt; uvs;  \tpublic void Clear () { \t\thexMesh.Clear(); \t\tvertices = ListPool&lt;Vector3&gt;.Get(); \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\ttriangles = ListPool&lt;int&gt;.Get(); \t}  \tpublic void Apply () { \t\thexMesh.SetVertices(vertices); \t\tListPool&lt;Vector3&gt;.Add(vertices); \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\t&hellip; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/generalizing-hexmesh\/not-using-uvs.png\"\/><\/div>\n<p>  <i>\u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c \u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic void AddTriangleUV (Vector2 uv1, Vector2 uv2, Vector3 uv3) { \t\tuvs.Add(uv1); \t\tuvs.Add(uv2); \t\tuvs.Add(uv3); \t} \t \tpublic void AddQuadUV (Vector2 uv1, Vector2 uv2, Vector3 uv3, Vector3 uv4) { \t\tuvs.Add(uv1); \t\tuvs.Add(uv2); \t\tuvs.Add(uv3); \t\tuvs.Add(uv4); \t}<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>AddQuadUV<\/code> \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 UV-\u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u042d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 quad \u0438 \u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0432\u043e\u0434\u044b \u0440\u0435\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void AddQuadUV (float uMin, float uMax, float vMin, float vMax) { \t\tuvs.Add(new Vector2(uMin, vMin)); \t\tuvs.Add(new Vector2(uMax, vMin)); \t\tuvs.Add(new Vector2(uMin, vMax)); \t\tuvs.Add(new Vector2(uMax, vMax)); \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/generalizing-hexmesh\/generalizing-hexmesh.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0422\u0435\u043a\u0443\u0449\u0438\u0435 \u0440\u0435\u043a\u0438<\/h2>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u043e\u0434\u044b! \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e quad, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0432\u043e\u0434\u044b. \u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0440\u0435\u043a\u0430\u043c\u0438, \u0432\u043e\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0442\u0435\u0447\u044c. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0435 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u0440\u0435\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043d\u043e\u0432\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440 \u0438 \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e <em>River<\/em>. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b\u044b albedo.<\/p>\n<pre><code>Shader &quot;Custom\/River&quot; { \t&hellip;  \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.color; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t\to.Albedo.rg = IN.uv_MainTex; \t\t} \t\tENDCG \t} \tFallBack &quot;Diffuse&quot; }<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexGridChunk<\/code> \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043b\u0435 <code>HexMesh rivers<\/code>. \u041e\u0447\u0438\u0441\u0442\u0438\u043c \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0435\u0433\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0440\u0435\u043b\u044c\u0435\u0444\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic HexMesh terrain, rivers; \t \tpublic void Triangulate () { \t\tterrain.Clear(); \t\trivers.Clear(); \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tTriangulate(cells[i]); \t\t} \t\tterrain.Apply(); \t\trivers.Apply(); \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0411\u0443\u0434\u0443\u0442 \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0440\u0435\u043a?<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0432\u0438\u0436\u043e\u043a Unity \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u043c\u0451\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043f\u0443\u0441\u0442\u043e\u0433\u043e \u043c\u0435\u0448\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0448 \u0440\u0435\u043a\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c.<\/div>\n<\/div>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u0435\u0444\u0430\u0431 (\u0447\u0435\u0440\u0435\u0437 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440), \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u0432 <em>Rivers<\/em> \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u0435\u0433\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/prefab-project.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/prefab-inspector.png\"\/><\/div>\n<p>  <i>\u041f\u0440\u0435\u0444\u0430\u0431 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0441 \u0440\u0435\u043a\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b <em>River<\/em>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0448 \u043d\u043e\u0432\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440, \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u0431\u044a\u0435\u043a\u0442 <em>Rivers<\/em>. \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u0435\u0448\u0430 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043d\u0438 \u0446\u0432\u0435\u0442\u0430 \u0432\u0435\u0440\u0448\u0438\u043d, \u043d\u0438 \u043a\u043e\u043b\u043b\u0430\u0439\u0434\u0435\u0440.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/rivers-object.png\"\/><\/div>\n<p>  <i>\u041f\u043e\u0434\u043e\u0431\u044a\u0435\u043a\u0442 Rivers.<\/i><\/p>\n<h3>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u0432\u043e\u0434\u0443<\/h3>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0434\u0443, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0443\u0440\u043e\u0432\u043d\u0435\u043c \u0435\u0451 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0451 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u044b \u0432 <code>HexMetrics<\/code>, \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u043b\u043e\u0436\u0435\u043c \u0440\u0435\u043a\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438 \u0440\u0430\u0432\u043d\u044b \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442\u044b, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451 \u0438 \u0434\u043b\u044f \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u043a\u0438. \u0422\u0430\u043a \u043c\u044b \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u043c, \u0447\u0442\u043e \u0432\u043e\u0434\u0430 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0430\u0434 \u0440\u0435\u043b\u044c\u0435\u0444\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic const float riverSurfaceElevationOffset = -0.5f;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0438\u0436\u0435?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0434\u044b.<\/div>\n<\/div>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c <code>HexCell<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u0440\u0435\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic float RiverSurfaceY { \t\tget { \t\t\treturn \t\t\t\t(elevation + HexMetrics.riverSurfaceElevationOffset) * \t\t\t\tHexMetrics.elevationStep; \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0432 <code>HexGridChunk<\/code>! \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u043a, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u0414\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 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0438 \u0432\u044b\u0441\u043e\u0442\u0443. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c quad.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRiverQuad ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y \t) { \t\tv1.y = v2.y = v3.y = v4.y = y; \t\trivers.AddQuad(v1, v2, v3, v4); \t}<\/code><\/pre>\n<p>  \u041c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0437\u0434\u0435\u0441\u044c \u0438 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043e\u0439\u0434\u0451\u043c \u0441\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e \u0438 \u0441\u043d\u0438\u0437\u0443 \u0432\u0432\u0435\u0440\u0445.<\/p>\n<pre><code class=\"cs\">\t\trivers.AddQuad(v1, v2, v3, v4); \t\trivers.AddQuadUV(0f, 1f, 0f, 1f);<\/code><\/pre>\n<p>  <code>TriangulateWithRiver<\/code> \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0440\u0435\u043a. \u041f\u0435\u0440\u0432\u044b\u0439 quad \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0438 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043e\u0439. \u0412\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043e\u0439 \u0438 \u0440\u0435\u0431\u0440\u043e\u043c. \u041c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043d\u0438\u0436\u0435\u043d\u044b, \u0442\u043e \u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u0434 \u043d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u043c\u0438 \u0441\u0442\u0435\u043d\u043a\u0430\u043c\u0438 \u0440\u0443\u0441\u043b\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e \u0442\u043e\u0447\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0440\u0430\u044f \u0432\u043e\u0434\u044b.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t&hellip;  \t\tTriangulateRiverQuad(centerL, centerR, m.v2, m.v4, cell.RiverSurfaceY); \t\tTriangulateRiverQuad(m.v2, m.v4, e.v2, e.v4, cell.RiverSurfaceY); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/first-water.png\"\/><\/div>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0432\u043e\u0434\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0448\u0438\u0440\u0438\u043d\u0430 \u0432\u043e\u0434\u044b?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u044b\u0441\u043e\u0442\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0430, \u0430 \u043b\u043e\u0436\u0435 \u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u043a\u0438 \u2014 \u043d\u0435\u0442. \u0411\u041e\u043b\u044c\u0448\u0430\u044f \u0432\u044b\u0441\u043e\u0442\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u0442\u044b\u043c \u0438 \u0432\u044b\u0441\u043e\u043a\u0438\u043c \u0441\u0442\u0435\u043d\u043a\u0430\u043c \u0440\u0443\u0441\u043b\u0430. \u042d\u0442\u043e \u0441\u0443\u0436\u0430\u0435\u0442 \u0440\u0435\u043a\u0443 \u043d\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0434\u044b.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0414\u0432\u0438\u0433\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u043e\u0442\u043e\u043a\u043e\u043c<\/h3>\n<p>  \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u044e\u0442\u0441\u044f \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0441 \u0442\u0435\u0447\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u043a\u0438. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 U \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 0 \u0432 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u043a\u0438, \u0438 1 \u0432 \u043f\u0440\u0430\u0432\u043e\u0439, \u043f\u0440\u0438 \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u0432\u043d\u0438\u0437 \u043f\u043e \u0442\u0435\u0447\u0435\u043d\u0438\u044e. \u0410 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 V \u0434\u043e\u043b\u0436\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0442 0 \u0434\u043e 1 \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0442\u0435\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u043a\u0438.<\/p>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0442\u0430\u043a\u043e\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 UV \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438, \u043d\u043e \u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u043c\u0438 \u0438 \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>TriangulateRiverQuad<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>bool reversed<\/code>. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0438\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f UV \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRiverQuad ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y, bool reversed \t) { \t\tv1.y = v2.y = v3.y = v4.y = y; \t\trivers.AddQuad(v1, v2, v3, v4); \t\tif (reversed) { \t\t\trivers.AddQuadUV(1f, 0f, 1f, 0f); \t\t} \t\telse { \t\t\trivers.AddQuadUV(0f, 1f, 0f, 1f); \t\t} \t}<\/code><\/pre>\n<p>  \u0412 <code>TriangulateWithRiver<\/code> \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441\u043e \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u043e\u0439.<\/p>\n<pre><code class=\"cs\">\t\tbool reversed = cell.IncomingRiver == direction; \t\tTriangulateRiverQuad( \t\t\tcenterL, centerR, m.v2, m.v4, cell.RiverSurfaceY, reversed \t\t); \t\tTriangulateRiverQuad( \t\t\tm.v2, m.v4, e.v2, e.v4, cell.RiverSurfaceY, reversed \t\t);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/consistent-direction.png\"\/><\/div>\n<p>  <i>\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043a.<\/i><\/p>\n<h3>\u041d\u0430\u0447\u0430\u043b\u043e \u0438 \u043a\u043e\u043d\u0435\u0446 \u0440\u0435\u043a\u0438<\/h3>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 <code>TriangulateWithRiverBeginOrEnd<\/code> \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0440\u0435\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d quad \u0440\u0435\u043a\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043e\u0439 \u0438 \u0440\u0435\u0431\u0440\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiverBeginOrEnd ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t&hellip;  \t\tbool reversed = cell.HasIncomingRiver; \t\tTriangulateRiverQuad( \t\t\tm.v2, m.v4, e.v2, e.v4, cell.RiverSurfaceY, reversed \t\t); \t}<\/code><\/pre>\n<p>  \u0427\u0430\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0438 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043e\u0439 \u2014 \u044d\u0442\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>TriangulateRiverQuad<\/code>. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0437\u0434\u0435\u0441\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0440\u0435\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0451 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 U \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u0430 \u00bd.<\/p>\n<pre><code class=\"cs\">\t\tcenter.y = m.v2.y = m.v4.y = cell.RiverSurfaceY; \t\trivers.AddTriangle(center, m.v2, m.v4); \t\tif (reversed) { \t\t\trivers.AddTriangleUV( \t\t\t\tnew Vector2(0.5f, 1f), new Vector2(1f, 0f), new Vector2(0f, 0f) \t\t\t); \t\t} \t\telse { \t\t\trivers.AddTriangleUV( \t\t\t\tnew Vector2(0.5f, 0f), new Vector2(0f, 1f), new Vector2(1f, 1f) \t\t\t); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/begin-and-end.png\"\/><\/div>\n<p>  <i>\u0412\u043e\u0434\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0438 \u043a\u043e\u043d\u0446\u0435.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e \u043a\u043e\u043d\u0446\u0430\u043c \u0435\u0441\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0432\u043e\u0434\u044b?<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0430\u043a \u043a\u0430\u043a \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0442\u043e \u043a\u043e\u0433\u0434\u0430 quad \u043d\u0435 \u043f\u043b\u043e\u0441\u043a\u0438\u0439, \u0438\u0445 \u0444\u043e\u0440\u043c\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u0435\u043d\u043e\u043a \u0440\u0443\u0441\u043b\u0430 \u0441 \u043b\u044e\u0431\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0435\u043a\u0438 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0439. \u042d\u0442\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u0435\u0435 \u0432 \u043c\u0435\u0441\u0442\u0430\u0445 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0434\u044b \u0441\u043e \u0441\u0442\u0435\u043d\u043a\u0430\u043c\u0441\u0438 \u0440\u0443\u0441\u043b\u0430.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f, \u043e\u0442\u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0432 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u0441\u043a\u0430\u0437\u0438\u043b\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u041f\u043e\u0441\u043b\u0435 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u044f \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0430\u0440\u0443\u0448\u0438\u0442\u0441\u044f.<\/p><\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0422\u0435\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438<\/h3>\n<p>  \u041f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u043a \u0440\u0430\u0437\u043d\u0438\u0446\u0435 \u0432\u044b\u0441\u043e\u0442. \u0427\u0442\u043e\u0431\u044b \u0432\u043e\u0434\u0430 \u043c\u043e\u0433\u043b\u0430 \u0441\u0442\u0435\u043a\u0430\u0442\u044c \u043f\u043e \u0441\u043a\u043b\u043e\u043d\u0430\u043c \u0438 \u043e\u0431\u0440\u044b\u0432\u0430\u043c, <code>TriangulateRiverQuad<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432\u044b\u0441\u043e\u0442\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u0442\u043e\u0440\u043e\u0439.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRiverQuad ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y1, float y2, bool reversed \t) { \t\tv1.y = v2.y = y1; \t\tv3.y = v4.y = y2; \t\trivers.AddQuad(v1, v2, v3, v4); \t\tif (reversed) { \t\t\trivers.AddQuadUV(1f, 0f, 1f, 0f); \t\t} \t\telse { \t\t\trivers.AddQuadUV(0f, 1f, 0f, 1f); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0432\u044b\u0441\u043e\u0442\u0443. \u041e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u0435\u0442\u043e\u0434.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRiverQuad ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y, bool reversed \t) { \t\tTriangulateRiverQuad(v1, v2, v3, v4, y, y, reversed); \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c quad \u0440\u0435\u043a\u0438 \u0438 \u0432 <code>TriangulateConnection<\/code>. \u041d\u0430\u0445\u043e\u0434\u044f\u0441\u044c \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0443\u0437\u043d\u0430\u0442\u044c, \u0441 \u043a\u0430\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0440\u0435\u043a\u0438 \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e. \u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043d\u0430\u0441 \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0440\u0435\u043a\u0430, \u0438 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverThroughEdge(direction)) { \t\t\te2.v3.y = neighbor.StreamBedY; \t\t\tTriangulateRiverQuad( \t\t\t\te1.v2, e1.v4, e2.v2, e2.v4, \t\t\t\tcell.RiverSurfaceY, neighbor.RiverSurfaceY, \t\t\t\tcell.HasIncomingRiver &amp;&amp; cell.IncomingRiver == direction \t\t\t); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/complete-river.png\"\/><\/div>\n<p>  <i>\u0417\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u0430\u044f \u0440\u0435\u043a\u0430.<\/i><\/p>\n<h3>\u0420\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 V<\/h3>\n<p>  \u041f\u043e\u043a\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u0440\u0435\u043a\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V, \u0438\u0434\u0443\u0449\u0438\u0435 \u043e\u0442 0 \u0434\u043e 1. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443 \u0438\u0445 \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435. \u041f\u044f\u0442\u044c, \u0435\u0441\u043b\u0438 \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u0427\u0435\u043c \u0431\u044b \u043c\u044b \u043d\u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u043a\u0438, \u043e\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u0439, \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0448\u043b\u0438 \u043e\u0442 0 \u0434\u043e 1 \u043d\u0430 \u043f\u0440\u043e\u0442\u044f\u0436\u0435\u043d\u0438\u0438 \u0432\u0441\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u043b\u044e\u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 V \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0435 \u043d\u0430 0.2. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0432 \u0446\u0435\u043d\u0442\u0440 0.4, \u0442\u043e \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 0.6, \u0430 \u043d\u0430 \u0440\u0435\u0431\u0440\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u0442 0.8. \u0422\u043e\u0433\u0434\u0430 \u0432 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 1.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0435\u043a\u0430 \u0442\u0435\u0447\u0451\u0442 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0446\u0435\u043d\u0442\u0440 0.4, \u043d\u043e \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043e\u043d\u043e \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f 0.2, \u0430 \u043d\u0430 \u0440\u0435\u0431\u0440\u0435 \u2014 0. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u044d\u0442\u043e \u0434\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438, \u0442\u043e \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c -0.2. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e 0.8 \u0434\u043b\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441 \u0440\u0435\u0436\u0438\u043c\u043e\u043c \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 repeat, \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a 0 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d 1.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/v-flow.png\"\/><\/div>\n<p>  <i>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 V.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>TriangulateRiverQuad<\/code> \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRiverQuad ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y, float v, bool reversed \t) { \t\tTriangulateRiverQuad(v1, v2, v3, v4, y, y, v, reversed); \t}  \tvoid TriangulateRiverQuad ( \t\tVector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, \t\tfloat y1, float y2, float v, bool reversed \t) { \t\t&hellip; \t}<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u043e, \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u0443\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u0432\u043d\u0438\u0437\u0443 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c 0.2 \u043d\u0430\u0432\u0435\u0440\u0445\u0443.<\/p>\n<pre><code class=\"cs\">\t\telse { \t\t\trivers.AddQuadUV(0f, 1f, v, v + 0.2f); \t\t}<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u0435\u0440\u0435\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c, \u0432\u044b\u0447\u0438\u0442\u0430\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u0438\u0437 0.8 \u0438 0.6.<\/p>\n<pre><code class=\"cs\">\t\tif (reversed) { \t\t\trivers.AddQuadUV(1f, 0f, 0.8f - v, 0.6f - v); \t\t} <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u043e\u0439. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 <code>TriangulateWithRiver<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tTriangulateRiverQuad( \t\t\tcenterL, centerR, m.v2, m.v4, cell.RiverSurfaceY, 0.4f, reversed \t\t); \t\tTriangulateRiverQuad( \t\t\tm.v2, m.v4, e.v2, e.v4, cell.RiverSurfaceY, 0.6f, reversed \t\t);<\/code><\/pre>\n<p>  \u0422\u043e\u0433\u0434\u0430 <code>TriangulateConnection<\/code> \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\t\t\tTriangulateRiverQuad( \t\t\t\te1.v2, e1.v4, e2.v2, e2.v4, \t\t\t\tcell.RiverSurfaceY, neighbor.RiverSurfaceY, 0.8f, \t\t\t\tcell.HasIncomingRiver &amp;&amp; cell.IncomingRiver == direction \t\t\t);<\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 <code>TriangulateWithRiverBeginOrEnd<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tTriangulateRiverQuad( \t\t\tm.v2, m.v4, e.v2, e.v4, cell.RiverSurfaceY, 0.6f, reversed \t\t); \t\tcenter.y = m.v2.y = m.v4.y = cell.RiverSurfaceY; \t\trivers.AddTriangle(center, m.v2, m.v4); \t\tif (reversed) { \t\t\trivers.AddTriangleUV( \t\t\t\tnew Vector2(0.5f, 0.4f), \t\t\t\tnew Vector2(1f, 0.2f), new Vector2(0f, 0.2f) \t\t\t); \t\t} \t\telse { \t\t\trivers.AddTriangleUV( \t\t\t\tnew Vector2(0.5f, 0.4f), \t\t\t\tnew Vector2(0f, 0.6f), new Vector2(1f, 0.6f) \t\t\t); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/stretched-v.png\"\/><\/div>\n<p>  <i>\u0420\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 V, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 \u0440\u0435\u043a\u0438 \u043e\u043d\u0438 \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438.<\/p>\n<pre><code>\t\t\tif (IN.uv_MainTex.y &lt; 0) { \t\t\t\tIN.uv_MainTex.y += 1; \t\t\t} \t\t\to.Albedo.rg = IN.uv_MainTex;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/v-wrap.png\"\/><\/div>\n<p>  <i>\u0421\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/flowing-rivers\/flowing-rivers.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0410\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043a<\/h2>\n<p>  \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0441 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0440\u0435\u043a. \u042d\u0442\u0438\u043c \u0437\u0430\u0439\u043c\u0451\u0442\u0441\u044f \u0448\u0435\u0439\u0434\u0435\u0440 \u0440\u0435\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043c\u0435\u0448.<\/p>\n<p>  \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440 \u0440\u0435\u043a\u0438, \u0430 \u0437\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u044d\u0442\u0438\u043c \u043f\u043e\u0437\u0436\u0435. \u041f\u043e\u043a\u0430 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442, \u0434\u0430\u044e\u0449\u0438\u0439 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>  \u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u0434\u0432\u0438\u0433\u043e\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 V \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438\u0433\u0440\u044b. Unity \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>_Time<\/code>. \u0415\u0451 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Y \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c. \u0412 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<p>  \u0418\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e V, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u043e \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0438\u0437 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V. \u042d\u0442\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 \u0432\u043d\u0438\u0437, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0438\u043b\u043b\u044e\u0437\u0438\u044e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u043d\u0438\u0437 \u043f\u043e \u0442\u0435\u0447\u0435\u043d\u0438\u044e \u0440\u0435\u043a\u0438.<\/p>\n<pre><code>\/\/\t\t\tif (IN.uv_MainTex.y &lt; 0) { \/\/\t\t\t\tIN.uv_MainTex.y += 1; \/\/\t\t\t} \t\t\tIN.uv_MainTex.y -= _Time.y; \t\t\to.Albedo.rg = IN.uv_MainTex;<\/code><\/pre>\n<p>  \u0427\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 V \u0432\u043e \u0432\u0441\u0435\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u0441\u0442\u0430\u043d\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0443\u043b\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u044b. \u041f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V.<\/p>\n<pre><code>\t\t\tIN.uv_MainTex.y -= _Time.y; \t\t\tIN.uv_MainTex.y = frac(IN.uv_MainTex.y); \t\t\to.Albedo.rg = IN.uv_MainTex;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 64.704%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/PlaintiveMeaslyHellbender\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0410\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V.<\/i><\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0443\u043c\u0430<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0448\u0430 \u0440\u0435\u043a\u0430 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0430, \u043d\u043e \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0435\u0437\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044b. \u041d\u0430\u0448 UV-\u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0445 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c\u0438, \u043d\u043e \u0438\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043d\u0430 \u0432\u043e\u0434\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u044b\u0440\u044b\u0445 UV \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0431\u0443\u0434\u0435\u043c \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0443 \u043d\u0430\u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0448\u0443\u043c\u0430. \u0421\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u043c \u0435\u0451 \u0438 \u0443\u043c\u043d\u043e\u0436\u0438\u043c \u0446\u0432\u0435\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u0448\u0443\u043c\u0430.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfloat2 uv = IN.uv_MainTex; \t\t\tuv.y -= _Time.y; \t\t\tfloat4 noise = tex2D(_MainTex, uv); \t\t\t \t\t\tfixed4 c = _Color * noise.r; \t\t\to.Albedo = c.rgb; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t}<\/code><\/pre>\n<p>  \u041d\u0430\u0437\u043d\u0430\u0447\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0448\u0443\u043c\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0443 \u0440\u0435\u043a\u0438, \u0438 \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0431\u0435\u043b\u044b\u0439 \u0446\u0432\u0435\u0442.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/animating-rivers\/noise-inspector.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/animating-rivers\/noise-sample.png\"\/><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0448\u0443\u043c\u0430.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044b, \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0448\u0443\u043c\u0430 \u0442\u043e\u0436\u0435 \u0440\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0434\u043e\u043b\u044c \u0440\u0435\u043a\u0438. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u043c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u2014 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0432 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 U. \u041e\u0434\u043d\u043e\u0439 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0437\u043a\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0448\u0443\u043c\u0430.<\/p>\n<pre><code>\t\t\tfloat2 uv = IN.uv_MainTex; \t\t\tuv.x *= 0.0625; \t\t\tuv.y -= _Time.y;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/animating-rivers\/stretched-u.png\"\/><\/div>\n<p>  <i>\u0420\u0430\u0441\u0442\u044f\u0433\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b U.<\/i><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u043c \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u043e \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0438 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<pre><code>\t\t\tuv.y -= _Time.y * 0.25;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 64.704%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/GrouchyGentleAfricanaugurbuzzard\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0448\u0443\u043c.<\/i><\/p>\n<h3>\u0421\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0448\u0443\u043c\u0430<\/h3>\n<p>  \u0412\u0441\u0451 \u0443\u0436\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435, \u043d\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c. \u0412\u043e\u0434\u0430 \u0441\u0435\u0431\u044f \u0442\u0430\u043a \u043d\u0435 \u0432\u0435\u0434\u0451\u0442.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u0448\u0443\u043c\u0430, \u0442\u043e \u043c\u043e\u0436\u0435\u043c \u0432\u0430\u0440\u044c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u0441\u0434\u0432\u0438\u0433\u0430\u044f \u044d\u0442\u0443 \u043f\u043e\u043b\u043e\u0441\u0443 \u0432\u0434\u043e\u043b\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0435 U \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0440\u0435\u043a\u0430 \u0442\u0435\u0447\u0451\u0442 \u0432\u0431\u043e\u043a. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 0.005. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f 200 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<pre><code>\t\t\tuv.x = uv.x * 0.0625 + _Time.y * 0.005;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 64.704%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/DefiantDirectFrillneckedlizard\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0421\u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0448\u0443\u043c.<\/i><\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u0412\u043e\u0434\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0439 \u0438 \u0441\u0434\u0432\u0438\u0433 \u044f\u0432\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0435\u043d, \u0445\u043e\u0442\u044f \u043e\u043d \u0438 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u0440\u044b\u0442\u044c \u0441\u0434\u0432\u0438\u0433, \u0441\u043e\u0447\u0435\u0442\u0430\u044f \u0434\u0432\u0430 \u0441\u044d\u043c\u043f\u043b\u0430 \u0448\u0443\u043c\u0430, \u0438 \u0441\u0434\u0432\u0438\u0433\u0430\u044f \u0438\u0445 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445. \u0418 \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u044d\u043c\u043f\u043b\u0430 \u0441\u043b\u0435\u0433\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043b\u0451\u0433\u043a\u0443\u044e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0448\u0443\u043c\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u044d\u043c\u043f\u043b\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u0430\u043d\u0430\u043b.<\/p>\n<pre><code>\t\t\tfloat2 uv = IN.uv_MainTex; \t\t\tuv.x = uv.x * 0.0625 + _Time.y * 0.005; \t\t\tuv.y -= _Time.y * 0.25; \t\t\tfloat4 noise = tex2D(_MainTex, uv); \t\t\t \t\t\tfloat2 uv2 = IN.uv_MainTex; \t\t\tuv2.x = uv2.x * 0.0625 - _Time.y * 0.0052; \t\t\tuv2.y -= _Time.y * 0.23; \t\t\tfloat4 noise2 = tex2D(_MainTex, uv2); \t\t\t \t\t\tfixed4 c = _Color * (noise.r * noise2.a);<\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 64.704%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/LazyFatGrassspider\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0443\u0445 \u0441\u0434\u0432\u0438\u0433\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0448\u0443\u043c\u0430.<\/i><\/p>\n<h3>\u041f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430\u044f \u0432\u043e\u0434\u0430<\/h3>\n<p>  \u041d\u0430\u0448 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u044b\u043c. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u2014 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c.<\/p>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0432\u043e\u0434\u0430 \u043d\u0435 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u043d\u0435\u0439. \u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 renderer \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>Rivers<\/em> \u0432 \u043f\u0440\u0435\u0444\u0430\u0431\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/animating-rivers\/no-shadow-casting.png\"\/><\/div>\n<p>  <i>\u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043d\u0435\u0439 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u043c \u0448\u0435\u0439\u0434\u0435\u0440 \u0432 transparent mode. \u0414\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u044d\u0433\u0438 \u0448\u0435\u0439\u0434\u0435\u0440\u0430. \u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u0442\u0440\u043e\u043a\u0443 <code>#pragma surface<\/code> \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>alpha<\/code>. \u041f\u043e\u043a\u0430 \u043c\u044b \u0437\u0434\u0435\u0441\u044c, \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>fullforwardshadows<\/code>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043d\u0438.<\/p>\n<pre><code>\t\tTags { &quot;RenderType&quot;=&quot;Transparent&quot; &quot;Queue&quot;=&quot;Transparent&quot; } \t\tLOD 200 \t\t \t\tCGPROGRAM \t\t#pragma surface surf Standard alpha \/\/ fullforwardshadows \t\t#pragma target 3.0<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430 \u0440\u0435\u043a\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0448\u0443\u043c\u0430 \u043d\u0430 \u0446\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u043d\u0435\u043c\u0443 \u0448\u0443\u043c. \u0417\u0430\u0442\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>saturate<\/code> \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u043b 1.<\/p>\n<pre><code>\t\t\tfixed4 c = saturate(_Color + noise.r * noise2.a);<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430 \u0446\u0432\u0435\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u0428\u0443\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u0435\u0433\u043e \u044f\u0440\u043a\u043e\u0441\u0442\u044c \u0438 \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u043d\u0438\u0439 \u0446\u0432\u0435\u0442 \u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0438\u0437\u043a\u043e\u0439 \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c\u044e (opacity). \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0433\u043e\u043b\u0443\u0431\u0443\u044e \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0443\u044e \u0432\u043e\u0434\u0443 \u0441 \u0431\u0435\u043b\u044b\u043c\u0438 \u0432\u043a\u0440\u0430\u043f\u043b\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/animating-rivers\/colored.png\"\/><\/div>\n<p>  <\/p>\n<div class=\"oembed\">\n<div>\n<div style=\"left: 0; width: 100%; height: 0; position: relative; padding-bottom: 64.704%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/InfamousAliveFinwhale\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0426\u0432\u0435\u0442\u043d\u0430\u044f \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430\u044f \u0432\u043e\u0434\u0430.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/animating-rivers\/animating-rivers.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0414\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0451 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u043e\u0432\u0430 \u0438\u0441\u043a\u0430\u0437\u0438\u0442\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u041a\u0440\u043e\u043c\u0435 \u0434\u0435\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0451\u0431\u0435\u0440 \u044f\u0447\u0435\u0435\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435\u0440\u043e\u0432\u043d\u044b\u043c\u0438 \u043d\u0430\u0448\u0438 \u0440\u0435\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic const float cellPerturbStrength = 4f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/tweaking\/unperturbed.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/tweaking\/perturbed.png\"\/><\/div>\n<p>  \u041d\u0435\u0438\u0441\u043a\u0430\u0436\u0451\u043d\u043d\u044b\u0435 \u0438 \u0438\u0441\u043a\u0430\u0436\u0451\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b.<\/p>\n<p>  \u0418\u0437\u0443\u0447\u0438\u043c \u0440\u0435\u043b\u044c\u0435\u0444 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0448\u0438\u0445 \u0438\u0437-\u0437\u0430 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0435\u0441\u0442\u044c! \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u0432\u043e\u0434\u043e\u043f\u0430\u0434\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/tweaking\/waterfall-problem.png\"\/><\/div>\n<p>  <i>\u0412\u043e\u0434\u0430, \u0443\u0441\u0435\u0447\u0451\u043d\u043d\u0430\u044f \u043e\u0431\u0440\u044b\u0432\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u0412\u043e\u0434\u0430, \u043f\u0430\u0434\u0430\u044e\u0449\u0430\u044f \u0441 \u0432\u044b\u0441\u043e\u043a\u043e\u0433\u043e \u0432\u043e\u0434\u043e\u043f\u0430\u0434\u0430, \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0437\u0430 \u043e\u0431\u0440\u044b\u0432\u043e\u043c. \u041a\u043e\u0433\u0434\u0430 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441 \u044d\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>  \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u0435\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0432\u043e\u0434\u043e\u043f\u0430\u0434\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043a\u043b\u043e\u043d\u043d\u044b\u043c\u0438, \u0430 \u043d\u0435 \u0441\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432\u043d\u0438\u0437. \u0425\u043e\u0442\u044f \u0432\u043e\u0434\u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a \u043d\u0435 \u0442\u0435\u0447\u0451\u0442, \u044d\u0442\u043e \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e. \u041d\u0430\u0448 \u043c\u043e\u0437\u0433 \u043f\u0440\u043e\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442 \u044d\u0442\u043e \u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u043e.<\/p>\n<p>  \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u0443\u0433\u043b\u0443\u0431\u043b\u0435\u043d\u0438\u0435\u043c \u0440\u0443\u0441\u0435\u043b \u0440\u0435\u043a. \u0422\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u044c\u044e \u0432\u043e\u0434\u044b \u0438 \u043b\u043e\u0436\u0435\u043c \u0440\u0435\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u0435\u043d\u043a\u0438 \u0440\u0443\u0441\u043b\u0430 \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c <code>HexMetrics.streamBedElevationOffset<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 -1.75. \u042d\u0442\u043e \u0440\u0435\u0448\u0438\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c, \u0430 \u043b\u043e\u0436\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0441\u0442\u0430\u043d\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u043c. \u0427\u0430\u0441\u0442\u044c \u0432\u043e\u0434\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0435\u0437\u0430\u043d\u043d\u043e\u0439, \u043d\u043e \u043d\u0435 \u0432\u043e\u0434\u043e\u043f\u0430\u0434\u044b \u0446\u0435\u043b\u0438\u043a\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic const float streamBedElevationOffset = -1.75f;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/tweaking\/deeper-channels.png\"\/><\/div>\n<p>  <i>\u0423\u0433\u043b\u0443\u0431\u043b\u0451\u043d\u043d\u044b\u0435 \u0440\u0443\u0441\u043b\u0430.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-6\/tweaking\/tweaking.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 7: \u0434\u043e\u0440\u043e\u0433\u0438<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0434\u043e\u0440\u043e\u0433.<\/li>\n<li>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u0440\u043e\u0433\u0438.<\/li>\n<li>\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u0443\u0435\u043c \u0434\u043e\u0440\u043e\u0433\u0438 \u0438 \u0440\u0435\u043a\u0438.<\/li>\n<li>\u0423\u043b\u0443\u0447\u0448\u0430\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0434\u043e\u0440\u043e\u0433.<\/li>\n<\/ul>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/tutorial-image.jpg\"\/><\/div>\n<p>  <i>\u041f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0438 \u0446\u0438\u0432\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/i><\/p>\n<h2>\u042f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438<\/h2>\n<p>  \u041a\u0430\u043a \u0438 \u0440\u0435\u043a\u0438, \u0434\u043e\u0440\u043e\u0433\u0438 \u0438\u0434\u0443\u0442 \u043e\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a \u044f\u0447\u0435\u0439\u043a\u0435, \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u0440\u0451\u0431\u0435\u0440 \u044f\u0447\u0435\u0439\u043a\u0438. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0430\u043c \u043d\u0435 \u0442\u0435\u0447\u0451\u0442 \u0432\u043e\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0436\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043a\u0440\u0451\u0441\u0442\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0432\u0443\u0445 \u0434\u043e\u0440\u043e\u0433 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0430\u043c \u0438\u0434\u0442\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u0448\u0435\u0441\u0442\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445, \u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0442 \u043d\u0443\u043b\u044f \u0434\u043e \u0448\u0435\u0441\u0442\u0438 \u0434\u043e\u0440\u043e\u0433. \u0422\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0440\u043e\u0433. \u042d\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043f\u044f\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0440\u0435\u043a. \u0427\u0442\u043e\u0431\u044b \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/cells-with-roads\/road-configurations.png\"\/><\/div>\n<p>  <i>14 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0434\u043e\u0440\u043e\u0433.<\/i><\/p>\n<h3>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433<\/h3>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0440\u043e\u0433 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0447\u0430\u0441\u0442\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432 <code>HexCell<\/code> \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0438\u0434\u0435\u0442\u044c \u0435\u0433\u043e \u0432 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u0444\u0430\u0431 \u044f\u0447\u0435\u0439\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u0448\u0435\u0441\u0442\u044c \u0434\u043e\u0440\u043e\u0433.<\/p>\n<pre><code class=\"cs\">\t[SerializeField] \tbool[] roads;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/cells-with-roads\/prefab-inspector.png\"\/><\/div>\n<p>  <i>\u041f\u0440\u0435\u0444\u0430\u0431 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0448\u0435\u0441\u0442\u044c\u044e \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0438\u043c\u0435\u0435\u0442 \u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430 \u0434\u043e\u0440\u043e\u0433\u0443 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic bool HasRoadThroughEdge (HexDirection direction) { \t\treturn roads[(int)direction]; \t}<\/code><\/pre>\n<p>  \u0411\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u0436\u0435 \u0443\u0434\u043e\u0431\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0430 \u0434\u043e\u0440\u043e\u0433\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e. \u041f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043e\u0439\u0434\u0451\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0438 \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <code>true<\/code>, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0439\u0434\u0451\u043c \u0434\u043e\u0440\u043e\u0433\u0443. \u0415\u0441\u043b\u0438 \u0434\u043e\u0440\u043e\u0433 \u043d\u0435\u0442, \u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c <code>false<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic bool HasRoads { \t\tget { \t\t\tfor (int i = 0; i &lt; roads.Length; i++) { \t\t\t\tif (roads[i]) { \t\t\t\t\treturn true; \t\t\t\t} \t\t\t} \t\t\treturn false; \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433<\/h3>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0440\u0435\u043a\u0430\u043c\u0438, \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0434\u043e\u0440\u043e\u0433 \u0438\u0437 \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0438\u043a\u043b\u0430, \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u043a\u0430\u0436\u0434\u0443\u044e \u0434\u043e\u0440\u043e\u0433\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0440\u0430\u043d\u0435\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic void RemoveRoads () { \t\tfor (int i = 0; i &lt; neighbors.Length; i++) { \t\t\tif (roads[i]) { \t\t\t\troads[i] = false; \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0434\u043e\u0440\u043e\u0433\u0438\u0435 \u0432 \u0441\u043e\u0441\u0435\u0434\u044f\u0445 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\t\t\tif (roads[i]) { \t\t\t\troads[i] = false; \t\t\t\tneighbors[i].roads[(int)((HexDirection)i).Opposite()] = false; \t\t\t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0437 \u044f\u0447\u0435\u0435\u043a. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043e\u0440\u043e\u0433\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u044f\u0447\u0435\u0435\u043a, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u0435\u0437 \u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439.<\/p>\n<pre><code class=\"cs\">\t\t\tif (roads[i]) { \t\t\t\troads[i] = false; \t\t\t\tneighbors[i].roads[(int)((HexDirection)i).Opposite()] = false; \t\t\t\tneighbors[i].RefreshSelfOnly(); \t\t\t\tRefreshSelfOnly(); \t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433<\/h3>\n<p>  \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0434\u043e\u0440\u043e\u0433. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0431\u0443\u043b\u0435\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>true<\/code>, \u0430 \u043d\u0435 <code>false<\/code>. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0431\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438. \u0422\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0438 \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0440\u043e\u0433\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void AddRoad (HexDirection direction) { \t\tif (!roads[(int)direction]) { \t\t\tSetRoad((int)direction, true); \t\t} \t}  \tpublic void RemoveRoads () { \t\tfor (int i = 0; i &lt; neighbors.Length; i++) { \t\t\tif (roads[i]) { \t\t\t\tSetRoad(i, false); \t\t\t} \t\t} \t}  \tvoid SetRoad (int index, bool state) { \t\troads[index] = state; \t\tneighbors[index].roads[(int)((HexDirection)index).Opposite()] = state; \t\tneighbors[index].RefreshSelfOnly(); \t\tRefreshSelfOnly(); \t}<\/code><\/pre>\n<p>  \u0423 \u043d\u0430\u0441 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0438 \u0440\u0435\u043a\u0438, \u0438 \u0434\u043e\u0440\u043e\u0433\u0438, \u0438\u0434\u0443\u0449\u0438\u0445 \u0432 \u043e\u0434\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u0440\u043e\u0433\u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0434\u043b\u044f \u043d\u0435\u0451 \u043c\u0435\u0441\u0442\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic void AddRoad (HexDirection direction) { \t\tif (!roads[(int)direction] &amp;&amp; !HasRiverThroughEdge(direction)) { \t\t\tSetRoad((int)direction, true); \t\t} \t}<\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043e\u0440\u043e\u0433\u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043e\u0431\u0440\u044b\u0432\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0440\u0435\u0437\u043a\u0438\u0435. \u0418\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0443 \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0437\u043a\u0438\u0439 \u043e\u0431\u0440\u044b\u0432, \u043d\u043e \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0441\u043e\u043a\u0438\u0439? \u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u044d\u0442\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434, \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0449\u0438\u0439 \u043d\u0430\u043c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432\u044b\u0441\u043e\u0442 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic int GetElevationDifference (HexDirection direction) { \t\tint difference = elevation - GetNeighbor(direction).elevation; \t\treturn difference &gt;= 0 ? difference : -difference; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0440\u043e\u0433\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u0435 \u0432\u044b\u0441\u043e\u0442. \u042f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0443\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u043b\u043e\u043d\u0430\u043c\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u043e\u043c \u0432 1 \u0435\u0434\u0438\u043d\u0438\u0446\u0443.<\/p>\n<pre><code class=\"cs\">\tpublic void AddRoad (HexDirection direction) { \t\tif ( \t\t\t!roads[(int)direction] &amp;&amp; !HasRiverThroughEdge(direction) &amp;&amp; \t\t\tGetElevationDifference(direction) &lt;= 1 \t\t) { \t\t\tSetRoad((int)direction, true); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u0434\u043e\u0440\u043e\u0433<\/h3>\n<p>  \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0440\u043e\u0433\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0443\u0434\u0430\u043b\u044f\u043b\u0438\u0441\u044c, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u043d\u0443\u0442 \u043f\u043e\u0437\u0436\u0435 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0440\u0435\u043a\u0438. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0440\u0435\u043a \u043f\u043e\u0432\u0435\u0440\u0445 \u0434\u043e\u0440\u043e\u0433, \u043d\u043e \u0440\u0435\u043a\u0438 \u043d\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438. \u041f\u0443\u0441\u0442\u044c \u043e\u043d\u0438 \u0441\u043c\u044b\u0432\u0430\u044e\u0442 \u0434\u043e\u0440\u043e\u0433\u0438 \u0441 \u043f\u0443\u0442\u0438.<\/p>\n<p>  \u041d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u0434\u043e\u0440\u043e\u0433\u0438 <code>false<\/code>, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0431\u044b\u043b\u0430 \u043b\u0438 \u0434\u043e\u0440\u043e\u0433\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0431\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>RefreshSelfOnly<\/code> \u0432 <code>SetOutgoingRiver<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void SetOutgoingRiver (HexDirection direction) { \t\tif (hasOutgoingRiver &amp;&amp; outgoingRiver == direction) { \t\t\treturn; \t\t}  \t\tHexCell neighbor = GetNeighbor(direction); \t\tif (!neighbor || elevation &lt; neighbor.elevation) { \t\t\treturn; \t\t}  \t\tRemoveOutgoingRiver(); \t\tif (hasIncomingRiver &amp;&amp; incomingRiver == direction) { \t\t\tRemoveIncomingRiver(); \t\t} \t\thasOutgoingRiver = true; \t\toutgoingRiver = direction; \/\/\t\tRefreshSelfOnly(); \t\t \t\tneighbor.RemoveIncomingRiver(); \t\tneighbor.hasIncomingRiver = true; \t\tneighbor.incomingRiver = direction.Opposite(); \/\/\t\tneighbor.RefreshSelfOnly(); \t\t \t\tSetRoad((int)direction, false); \t}<\/code><\/pre>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0443 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u2014 \u044d\u0442\u043e \u0441\u043c\u0435\u043d\u0430 \u0432\u044b\u0441\u043e\u0442\u044b. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u043e\u0440\u043e\u0433 \u0432\u043e \u0432\u0441\u0435\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445. \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u044b\u0441\u043e\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0434\u043e\u0440\u043e\u0433\u0443 \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tpublic int Elevation { \t\tget { \t\t\treturn elevation; \t\t} \t\tset { \t\t\t&hellip;  \t\t\tfor (int i = 0; i &lt; roads.Length; i++) { \t\t\t\tif (roads[i] &amp;&amp; GetElevationDifference((HexDirection)i) &gt; 1) { \t\t\t\t\tSetRoad(i, false); \t\t\t\t} \t\t\t}  \t\t\tRefresh(); \t\t} \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/cells-with-roads\/cells-with-roads.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433<\/h2>\n<p>  \u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f <code>HexMapEditor<\/code> \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c, \u043f\u043b\u044e\u0441 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tOptionalToggle riverMode, roadMode;  \tpublic void SetRiverMode (int mode) { \t\triverMode = (OptionalToggle)mode; \t}  \tpublic void SetRoadMode (int mode) { \t\troadMode = (OptionalToggle)mode; \t}<\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 <code>EditCell<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0441 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u043e\u0440\u043e\u0433. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0438 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438\u0441\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0431\u043e\u0438\u0445 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<pre><code class=\"cs\">\tvoid EditCell (HexCell cell) { \t\tif (cell) { \t\t\tif (applyColor) { \t\t\t\tcell.Color = activeColor; \t\t\t} \t\t\tif (applyElevation) { \t\t\t\tcell.Elevation = activeElevation; \t\t\t} \t\t\tif (riverMode == OptionalToggle.No) { \t\t\t\tcell.RemoveRiver(); \t\t\t} \t\t\tif (roadMode == OptionalToggle.No) { \t\t\t\tcell.RemoveRoads(); \t\t\t} \t\t\tif (isDrag) { \t\t\t\tHexCell otherCell = cell.GetNeighbor(dragDirection.Opposite()); \t\t\t\tif (otherCell) { \t\t\t\t\tif (riverMode == OptionalToggle.Yes) { \t\t\t\t\t\totherCell.SetOutgoingRiver(dragDirection); \t\t\t\t\t} \t\t\t\t\tif (roadMode == OptionalToggle.Yes) { \t\t\t\t\t\totherCell.AddRoad(dragDirection); \t\t\t\t\t} \t\t\t\t} \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0431\u044b\u0441\u0442\u0440\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 UI \u043f\u0430\u043d\u0435\u043b\u044c \u0434\u043e\u0440\u043e\u0433, \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u0430\u043d\u0435\u043b\u044c \u0440\u0435\u043a \u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u043c\u0435\u0442\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f\u043c\u0438.<\/p>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u044b\u0441\u043e\u043a\u0438\u0439 UI. \u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e, \u044f \u0438\u0437\u043c\u0435\u043d\u0438\u043b \u0441\u0445\u0435\u043c\u0443 \u043f\u0430\u043d\u0435\u043b\u0438 \u0446\u0432\u0435\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c \u043f\u0430\u043d\u0435\u043b\u044f\u043c \u0434\u043e\u0440\u043e\u0433 \u0438 \u0440\u0435\u043a.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/editing-roads\/ui.png\"\/><\/div>\n<p>  <i>UI \u0441 \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0434\u043b\u044f \u0446\u0432\u0435\u0442\u043e\u0432 \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, \u0435\u0441\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u0435\u0449\u0451 \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0443\u043d\u043a\u0442 \u0434\u043b\u044f \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u043e\u0433\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/editing-roads\/colors-inspector.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/editing-roads\/colors-scene.png\"\/><\/div>\n<p>  <i>\u041f\u044f\u0442\u044c \u0446\u0432\u0435\u0442\u043e\u0432: \u0436\u0451\u043b\u0442\u044b\u0439, \u0437\u0435\u043b\u0451\u043d\u044b\u0439, \u0441\u0438\u043d\u0438\u0439, \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u0438 \u0431\u0435\u043b\u044b\u0439.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u043d\u0435 \u0432\u0438\u0434\u043d\u044b. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440, \u0447\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.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/editing-roads\/cell-with-roads.png\"\/><\/div>\n<p>  <i>\u042f\u0447\u0435\u0439\u043a\u0430 \u0441 \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438 \u0432 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/editing-roads\/editing-roads.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433<\/h2>\n<p>  \u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u0440\u043e\u0433 \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u042d\u0442\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043c\u0435\u0448\u0430 \u0434\u043b\u044f \u0440\u0435\u043a, \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0440\u0443\u0441\u043b\u0430.<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f \u0440\u0430\u0441\u043a\u0440\u0430\u0441\u043a\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0434\u043e\u0440\u043e\u0433\u0438 \u0441\u043d\u043e\u0432\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b.<\/p>\n<pre><code>Shader &quot;Custom\/Road&quot; { \tProperties { \t\t_Color (&quot;Color&quot;, Color) = (1,1,1,1) \t\t_MainTex (&quot;Albedo (RGB)&quot;, 2D) = &quot;white&quot; {} \t\t_Glossiness (&quot;Smoothness&quot;, Range(0,1)) = 0.5 \t\t_Metallic (&quot;Metallic&quot;, Range(0,1)) = 0.0 \t} \tSubShader { \t\tTags { &quot;RenderType&quot;=&quot;Opaque&quot; } \t\tLOD 200 \t\t \t\tCGPROGRAM \t\t#pragma surface surf Standard fullforwardshadows \t\t#pragma target 3.0  \t\tsampler2D _MainTex;  \t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t};  \t\thalf _Glossiness; \t\thalf _Metallic; \t\tfixed4 _Color;  \t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfixed4 c = fixed4(IN.uv_MainTex, 1, 1); \t\t\to.Albedo = c.rgb; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t} \t\tENDCG \t} \tFallBack &quot;Diffuse&quot; }<\/code><\/pre>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0434\u043e\u0440\u043e\u0433\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u044d\u0442\u043e\u0442 \u0448\u0435\u0439\u0434\u0435\u0440.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/material.png\"\/><\/div>\n<p>  <i>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b Road.<\/i><\/p>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043f\u0440\u0435\u0444\u0430\u0431 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043c\u0435\u0448 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0434\u043b\u044f \u0434\u043e\u0440\u043e\u0433. \u042d\u0442\u043e\u0442 \u043c\u0435\u0448 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u0435\u043d\u0435\u0439 \u0438 \u043e\u0431\u044f\u0437\u0430\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u0411\u044b\u0441\u0442\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u2014 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 <em>Rivers<\/em> \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/hierarchy.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/roads.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 Roads.<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a <code>HexGridChunk<\/code> \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043b\u0435 <code>HexMesh roads<\/code> \u0438 \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0433\u043e \u0432 <code>Triangulate<\/code>. \u0421\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0435\u0433\u043e \u0432 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c <em>Roads<\/em>.<\/p>\n<pre><code class=\"cs\">\tpublic HexMesh terrain, rivers, roads; \t \tpublic void Triangulate () { \t\tterrain.Clear(); \t\trivers.Clear(); \t\troads.Clear(); \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tTriangulate(cells[i]); \t\t} \t\tterrain.Apply(); \t\trivers.Apply(); \t\troads.Apply(); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/chunk.png\"\/><\/div>\n<p>  <i>\u041e\u0431\u044a\u0435\u043a\u0442 Roads \u0441\u043e\u0435\u0434\u0438\u043d\u0451\u043d.<\/i><\/p>\n<h3>\u0414\u043e\u0440\u043e\u0433\u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438<\/h3>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0440\u043e\u0433 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u041a\u0430\u043a \u0438 \u0440\u0435\u043a\u0438, \u0434\u043e\u0440\u043e\u0433\u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u0434\u0432\u0430 \u0441\u0440\u0435\u0434\u043d\u0438\u0445 quad. \u041c\u044b \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043a\u0440\u043e\u0435\u043c \u044d\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c\u0438 \u0434\u043e\u0440\u043e\u0433, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0442\u0435\u0445 \u0436\u0435 \u0448\u0435\u0441\u0442\u0438 \u0432\u0435\u0440\u0448\u0438\u043d. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 <code>HexGridChunk<\/code> \u043c\u0435\u0442\u043e\u0434 <code>TriangulateRoadSegment<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoadSegment ( \t\tVector3 v1, Vector3 v2, Vector3 v3, \t\tVector3 v4, Vector3 v5, Vector3 v6 \t) { \t\troads.AddQuad(v1, v2, v4, v5); \t\troads.AddQuad(v2, v3, v5, v6); \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f \u043e \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0432\u043e\u0434\u044b, \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 V \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0435\u0439 \u0432\u0435\u0437\u0434\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 U, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c, \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043b\u0438 \u043c\u044b \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0434\u043e\u0440\u043e\u0433\u0438 \u0438\u043b\u0438 \u0441\u0431\u043e\u043a\u0443. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 1, \u0430 \u043f\u043e \u043e\u0431\u043e\u0438\u043c \u0431\u043e\u043a\u0430\u043c \u0440\u0430\u0432\u043d\u0430 0.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoadSegment ( \t\tVector3 v1, Vector3 v2, Vector3 v3, \t\tVector3 v4, Vector3 v5, Vector3 v6 \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}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/road-segment.png\"\/><\/div>\n<p>  <i>\u0421\u0435\u0433\u043c\u0435\u043d\u0442 \u0434\u043e\u0440\u043e\u0433\u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u041b\u043e\u0433\u0438\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432 <code>TriangulateEdgeStrip<\/code>, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0434\u043e\u0440\u043e\u0433\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0435\u0441\u0442\u044c. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u043c\u0435\u0442\u043e\u0434\u0443 \u0431\u0443\u043b\u0435\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeStrip ( \t\tEdgeVertices e1, Color c1, \t\tEdgeVertices e2, Color c2, \t\tbool hasRoad \t) { \t\t&hellip; \t}<\/code><\/pre>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u044b\u0437\u043e\u0432\u0430 <code>TriangulateEdgeStrip<\/code> \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c <code>false<\/code>. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0440\u0430\u0432\u043d\u043e <code>false<\/code>. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441\u0442\u0430\u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeStrip ( \t\tEdgeVertices e1, Color c1, \t\tEdgeVertices e2, Color c2, \t\tbool hasRoad = false \t) { \t\t&hellip; \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b (optional parameters)?<\/b><\/p>\n<div class=\"spoiler_text\">\u0412\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0439\u0442\u0435 \u0438\u0445 \u043a\u0430\u043a \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u0442\u043e\u0434<\/p>\n<pre><code class=\"cs\">int MyMethod (int x = 1, int y = 2) { return x + y; }<\/code><\/pre>\n<p>  \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0442\u0440\u0451\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c<\/p>\n<pre><code class=\"cs\">int MyMethod (int x, int y) { return x + y; }  int MyMethod (int x) { return MyMethod(x, 2); }  int MyMethod () { return MyMethod(1, 2}; }<\/code><\/pre>\n<p>  \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0437\u0434\u0435\u0441\u044c \u0432\u0430\u0436\u0435\u043d. \u041d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c. \u041e\u043d\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0434\u0443\u0442 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432.<\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0434\u043e\u0440\u043e\u0433\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u043c <code>TriangulateRoadSegment<\/code> \u0441\u043e \u0441\u0440\u0435\u0434\u043d\u0438\u043c\u0438 \u0448\u0435\u0441\u0442\u044c\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeStrip ( \t\tEdgeVertices e1, Color c1, \t\tEdgeVertices e2, Color c2, \t\tbool hasRoad = false \t) { \t\tterrain.AddQuad(e1.v1, e1.v2, e2.v1, e2.v2); \t\tterrain.AddQuadColor(c1, c2); \t\tterrain.AddQuad(e1.v2, e1.v3, e2.v2, e2.v3); \t\tterrain.AddQuadColor(c1, c2); \t\tterrain.AddQuad(e1.v3, e1.v4, e2.v3, e2.v4); \t\tterrain.AddQuadColor(c1, c2); \t\tterrain.AddQuad(e1.v4, e1.v5, e2.v4, e2.v5); \t\tterrain.AddQuadColor(c1, c2);  \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>  \u0422\u0430\u043a \u043c\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u043b\u043e\u0441\u043a\u0438\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0435\u043a. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0434\u043e\u0440\u043e\u0433 \u043d\u0430 \u0443\u0441\u0442\u0443\u043f\u0430\u0445 \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c <code>TriangulateEdgeTerraces<\/code>, \u043a\u0443\u0434\u0430 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0443. \u041e\u043d \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e <code>TriangulateEdgeStrip<\/code>.<\/p>\n<pre><code class=\"cs\">\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 c2 = HexMetrics.TerraceLerp(beginCell.Color, endCell.Color, 1);  \t\tTriangulateEdgeStrip(begin, beginCell.Color, e2, c2, hasRoad);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tEdgeVertices e1 = e2; \t\t\tColor c1 = c2; \t\t\te2 = EdgeVertices.TerraceLerp(begin, end, i); \t\t\tc2 = HexMetrics.TerraceLerp(beginCell.Color, endCell.Color, i); \t\t\tTriangulateEdgeStrip(e1, c1, e2, c2, hasRoad); \t\t}  \t\tTriangulateEdgeStrip(e2, c2, end, endCell.Color, hasRoad); \t}<\/code><\/pre>\n<p>  <code>TriangulateEdgeTerraces<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 <code>TriangulateConnection<\/code>. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0434\u043e\u0440\u043e\u0433\u0430, \u0438\u0434\u0443\u0449\u0430\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0438 \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0440\u0435\u0431\u0440\u0430, \u0438 \u043f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0443\u0441\u0442\u0443\u043f\u043e\u0432.<\/p>\n<pre><code class=\"cs\"> \t\tif (cell.GetEdgeType(direction) == HexEdgeType.Slope) { \t\t\tTriangulateEdgeTerraces( \t\t\t\te1, cell, e2, neighbor, cell.HasRoadThroughEdge(direction) \t\t\t); \t\t} \t\telse { \t\t\tTriangulateEdgeStrip( \t\t\t\te1, cell.Color, e2, neighbor.Color, \t\t\t\tcell.HasRoadThroughEdge(direction) \t\t\t); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/roads-between-cells.png\"\/><\/div>\n<p>  <i>\u0421\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0440\u043e\u0433\u0438 \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438.<\/i><\/p>\n<h3>\u0420\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u043f\u043e\u0432\u0435\u0440\u0445 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u041f\u0440\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u0434\u043e\u0440\u043e\u0433 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0434\u043e\u0440\u043e\u0433 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438. \u0421\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u044d\u0442\u0438\u0445 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0440\u043f\u0443\u0440\u043d\u043e\u0439 \u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043a \u0441\u0438\u043d\u0435\u043c\u0443 \u043f\u043e \u043a\u0440\u0430\u044f\u043c.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u0440\u0446\u0430\u0442\u044c, \u0430 \u0438\u043d\u043e\u0433\u0434\u0430 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u043f\u0430\u0430\u0434\u0430\u0442\u044c. \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0434\u043e\u0440\u043e\u0433 \u0442\u043e\u0447\u043d\u043e \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0422\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0423\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430.<\/p>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u042d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0438\u0445 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0432 \u0438\u0445 \u0432 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u044e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430.<\/p>\n<pre><code>\t\tTags { \t\t\t&quot;RenderType&quot;=&quot;Opaque&quot; \t\t\t&quot;Queue&quot; = &quot;Geometry+1&quot; \t\t}<\/code><\/pre>\n<p>  \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043e\u0440\u043e\u0433\u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u0442\u043e\u0439 \u0436\u0435 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u044b. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 GPU \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u0447\u0442\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0431\u043b\u0438\u0436\u0435 \u043a \u043a\u0430\u043c\u0435\u0440\u0435, \u0447\u0435\u043c \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435.<\/p>\n<pre><code>\t\tTags { \t\t\t&quot;RenderType&quot;=&quot;Opaque&quot; \t\t\t&quot;Queue&quot; = &quot;Geometry+1&quot; \t\t} \t\tLOD 200 \t\tOffset -1, -1<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0414\u043e\u0440\u043e\u0433\u0438 \u0447\u0435\u0440\u0435\u0437 \u044f\u0447\u0435\u0439\u043a\u0438<\/h3>\n<p>  \u041f\u0440\u0438 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u0440\u0435\u043a \u043d\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0438\u043c\u0435\u0442\u044c \u0434\u0435\u043b\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0441 \u0434\u0432\u0443\u043c\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u0440\u0435\u043a\u0438 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443. \u041c\u044b \u043c\u043e\u0433\u043b\u0438 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u044f\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0438\u0445 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0438\u0435 \u0440\u0435\u043a\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0440\u043e\u0433 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043e\u0440\u043e\u0433.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043f\u043e \u0447\u0430\u0441\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u0440\u043e\u0433\u0430, \u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043c \u0435\u0451 \u043f\u0440\u044f\u043c\u0438\u043a\u043e\u043c \u0434\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u044f\u0447\u0435\u0439\u043a\u0438, \u043d\u0435 \u0432\u044b\u0445\u043e\u0434\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u0437\u043e\u043d\u044b \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041c\u044b \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0434\u043e\u0440\u043e\u0433\u0438 \u043e\u0442 \u0440\u0435\u0431\u0440\u0430 \u0434\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0446\u0435\u043d\u0442\u0440\u0430. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0432\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442 \u0434\u043e \u0446\u0435\u043d\u0442\u0440\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/road-across-cell.png\"\/><\/div>\n<p>  <i>\u0422\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u044f \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<p>  \u0414\u043b\u044f \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438 \u044d\u0442\u043e\u0439 \u0441\u0445\u0435\u043c\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u044f\u0447\u0435\u0439\u043a\u0438, \u043b\u0435\u0432\u0443\u044e \u0438 \u043f\u0440\u0430\u0432\u0443\u044e \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0440\u0435\u0431\u0440\u0430. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>TriangulateRoad<\/code> \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoad ( \t\tVector3 center, Vector3 mL, Vector3 mR, EdgeVertices e \t) { \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u0434\u043e\u0440\u043e\u0433\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043e\u0434\u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u0430. \u041e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u043d\u0438\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoad ( \t\tVector3 center, Vector3 mL, Vector3 mR, EdgeVertices e \t) { \t\tVector3 mC = Vector3.Lerp(mL, mR, 0.5f); \t\tTriangulateRoadSegment(mL, mC, mR, e.v2, e.v3, e.v4); \t} <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0434\u0432\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\t\tTriangulateRoadSegment(mL, mC, mR, e.v2, e.v3, e.v4); \t\troads.AddTriangle(center, mL, mC); \t\troads.AddTriangle(center, mC, mR);<\/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 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u0414\u0432\u0435 \u0438\u0437 \u0438\u0445 \u0432\u0435\u0440\u0448\u0438\u043d \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0434\u043e\u0440\u043e\u0433\u0438, \u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u2014 \u043d\u0430 \u0440\u0435\u0431\u0440\u0435.<\/p>\n<pre><code class=\"cs\">\t\troads.AddTriangle(center, mL, mC); \t\troads.AddTriangle(center, mC, mR); \t\troads.AddTriangleUV( \t\t\tnew Vector2(1f, 0f), new Vector2(0f, 0f), new Vector2(1f, 0f) \t\t); \t\troads.AddTriangleUV( \t\t\tnew Vector2(1f, 0f), new Vector2(1f, 0f), new Vector2(0f, 0f) \t\t);<\/code><\/pre>\n<p>  \u041f\u043e\u043a\u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u0442 \u0440\u0435\u043a. \u0412 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 <code>Triangulate<\/code> \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u0435\u0435\u0440 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432. \u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432\u044b\u0437\u043e\u0432 <code>TriangulateRoad<\/code>, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0440\u043e\u0433\u0430 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0435\u0441\u0442\u044c. \u041b\u0435\u0432\u0443\u044e \u0438 \u043f\u0440\u0430\u0432\u0443\u044e \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0438 \u0434\u0432\u0443\u043c\u044f \u0443\u0433\u043b\u043e\u0432\u044b\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid Triangulate (HexDirection direction, HexCell cell) { \t\t&hellip;  \t\tif (cell.HasRiver) { \t\t\t&hellip; \t\t} \t\telse { \t\t\tTriangulateWithoutRiver(direction, cell, center, e); \t\t}  \t\t&hellip; \t}  \tvoid TriangulateWithoutRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tTriangulateEdgeFan(center, e, cell.Color); \t\t \t\tif (cell.HasRoadThroughEdge(direction)) { \t\t\tTriangulateRoad( \t\t\t\tcenter, \t\t\t\tVector3.Lerp(center, e.v1, 0.5f), \t\t\t\tVector3.Lerp(center, e.v5, 0.5f), \t\t\t\te \t\t\t); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/roads-across-cells.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433\u0438, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043f\u043e \u044f\u0447\u0435\u0439\u043a\u0430\u043c.<\/i><\/p>\n<h3>\u0420\u0451\u0431\u0440\u0430 \u0434\u043e\u0440\u043e\u0433<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0438, \u043d\u043e \u0431\u043b\u0438\u0436\u0435 \u043a \u0446\u0435\u043d\u0442\u0440\u0430\u043c \u044f\u0447\u0435\u0435\u043a \u043e\u043d\u0438 \u0441\u0443\u0436\u0430\u044e\u0442\u0441\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0441 \u043a\u0430\u043a\u0438\u043c \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u043d\u0430\u0434\u0446\u0430\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e, \u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u044b. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 \u0434\u043e\u0440\u043e\u0433 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0447\u0430\u0441\u0442\u044f\u0445 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043f\u043e \u044f\u0447\u0435\u0439\u043a\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0434\u043e\u0440\u043e\u0433\u0438, \u043d\u043e \u043d\u0435 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0440\u0435\u0431\u0440\u0430 \u0434\u043e\u0440\u043e\u0433\u0438. \u042d\u0442\u043e\u0442 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0446\u0435\u043d\u0442\u0440\u043e\u043c, \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0441\u0440\u0435\u0434\u043d\u0438\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0434\u043e\u0440\u043e\u0433\u0438 \u043b\u0435\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u0430. \u0414\u0432\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043b\u0435\u0436\u0430\u0442 \u043d\u0430 \u0435\u0451 \u0440\u0435\u0431\u0440\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoadEdge (Vector3 center, Vector3 mL, Vector3 mR) { \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}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/road-edge.png\"\/><\/div>\n<p>  <i>\u0427\u0430\u0441\u0442\u044c \u0440\u0435\u0431\u0440\u0430 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u0434\u043e\u0440\u043e\u0433\u0443 \u0438\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0431\u0440\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0434\u043b\u044f <code>TriangulateRoad<\/code>. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u0434\u043e\u0440\u043e\u0433\u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u044f\u0447\u0435\u0439\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateRoad ( \t\tVector3 center, Vector3 mL, Vector3 mR, \t\tEdgeVertices e, bool hasRoadThroughCellEdge \t) { \t\tif (hasRoadThroughCellEdge) { \t\t\tVector3 mC = Vector3.Lerp(mL, mR, 0.5f); \t\t\tTriangulateRoadSegment(mL, mC, mR, e.v2, e.v3, e.v4); \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} \t\telse { \t\t\tTriangulateRoadEdge(center, mL, mR); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>TriangulateWithoutRiver<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>TriangulateRoad<\/code>, \u043a\u043e\u0433\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u044f\u0447\u0435\u0439\u043a\u0443 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u043b\u044e\u0431\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438. \u0418 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u0434\u043e\u0440\u043e\u0433\u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0440\u0435\u0431\u0440\u043e.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithoutRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tTriangulateEdgeFan(center, e, cell.Color);  \t\tif (cell.HasRoads) { \t\t\tTriangulateRoad( \t\t\t\tcenter, \t\t\t\tVector3.Lerp(center, e.v1, 0.5f), \t\t\t\tVector3.Lerp(center, e.v5, 0.5f), \t\t\t\te, cell.HasRoadThroughEdge(direction) \t\t\t); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/bulging-roads.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433\u0438 \u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u043c\u0438 \u0440\u0451\u0431\u0440\u0430\u043c\u0438.<\/i><\/p>\n<h3>\u0421\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433<\/h3>\n<p>  \u0414\u043e\u0440\u043e\u0433\u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u044b. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0432\u044b\u043f\u0443\u043a\u043b\u043e\u0441\u0442\u0438 \u0432 \u0446\u0435\u043d\u0442\u0440\u0430\u0445 \u044f\u0447\u0435\u0435\u043a. \u0420\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043b\u0435\u0432\u043e\u0439 \u0438 \u043f\u0440\u0430\u0432\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0438 \u0443\u0433\u043b\u0430\u043c\u0438 \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u043d\u044f\u044f \u0441 \u043d\u0438\u043c\u0438 \u0434\u043e\u0440\u043e\u0433\u0430. \u041d\u043e \u0435\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442, \u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u044b\u043f\u0443\u043a\u043b\u043e\u0441\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u0432 \u0442\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0431\u043b\u0438\u0436\u0435 \u043a \u0446\u0435\u043d\u0442\u0440\u0443. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435, \u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u044f \u0441 \u00bc, \u0430 \u043d\u0435 \u0441 \u00bd.<\/p>\n<p>  \u0414\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, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a \u0438\u0445 \u0434\u0432\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 <code>Vector2<\/code>. \u0415\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 X \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u043b\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438, \u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Y \u2014 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0430\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tVector2 GetRoadInterpolators (HexDirection direction, HexCell cell) { \t\tVector2 interpolators; \t\treturn interpolators; \t}<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u043e\u0440\u043e\u0433\u0430, \u0438\u0434\u0443\u0449\u0430\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043f\u043e\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435.<\/p>\n<pre><code class=\"cs\">\tVector2 GetRoadInterpolators (HexDirection direction, HexCell cell) { \t\tVector2 interpolators; \t\tif (cell.HasRoadThroughEdge(direction)) { \t\t\tinterpolators.x = interpolators.y = 0.5f; \t\t} \t\treturn interpolators; \t}<\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438. \u0414\u043b\u044f \u043b\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u00bd, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0430, \u0438\u0434\u0443\u0449\u0430\u044f \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442, \u0442\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u00bc. \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043f\u0440\u0430\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u043d\u043e \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tVector2 GetRoadInterpolators (HexDirection direction, HexCell cell) { \t\tVector2 interpolators; \t\tif (cell.HasRoadThroughEdge(direction)) { \t\t\tinterpolators.x = interpolators.y = 0.5f; \t\t} \t\telse { \t\t\tinterpolators.x = \t\t\t\tcell.HasRoadThroughEdge(direction.Previous()) ? 0.5f : 0.25f; \t\t\tinterpolators.y = \t\t\t\tcell.HasRoadThroughEdge(direction.Next()) ? 0.5f : 0.25f; \t\t} \t\treturn interpolators; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440\u043e\u0432. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0440\u043e\u0433\u0438 \u0441\u0433\u043b\u0430\u0434\u044f\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithoutRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tTriangulateEdgeFan(center, e, cell.Color);  \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) \t\t\t); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/smooth-roads.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/road-network.png\"\/><\/div>\n<p>  <i>\u0421\u0433\u043b\u0430\u0436\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/triangulating-roads\/triangulating-roads.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043a \u0438 \u0434\u043e\u0440\u043e\u0433<\/h2>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0440\u0435\u043a\u0438. \u0415\u0441\u043b\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u0430, \u0442\u043e \u0434\u043e\u0440\u043e\u0433\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/no-roads.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433 \u0432\u043e\u0437\u043b\u0435 \u0440\u0435\u043a \u043d\u0435\u0442.<\/i><\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>TriangulateRoadAdjacentToRiver<\/code> \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0417\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0411\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>TriangulateAdjacentToRiver<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateAdjacentToRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tif (cell.HasRoads) { \t\t\tTriangulateRoadAdjacentToRiver(direction, cell, center, e); \t\t}  \t\t&hellip; \t}  \tvoid TriangulateRoadAdjacentToRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e \u0436\u0435, \u0447\u0442\u043e \u0438 \u0434\u043b\u044f \u0434\u043e\u0440\u043e\u0433 \u0431\u0435\u0437 \u0440\u0435\u043a. \u0411\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043b\u0438 \u0434\u043e\u0440\u043e\u0433\u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0440\u0435\u0431\u0440\u043e, \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0442\u043e\u0440\u044b, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0438\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>TriangulateRoad<\/code>. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043f\u0443\u0442\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0440\u0435\u043a\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043e\u0442 \u043d\u0438\u0445 \u0434\u043e\u0440\u043e\u0433\u0438. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>roadCenter<\/code>. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0443 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">void TriangulateRoadAdjacentToRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tbool hasRoadThroughEdge = cell.HasRoadThroughEdge(direction); \t\tVector2 interpolators = GetRoadInterpolators(direction, cell); \t\tVector3 roadCenter = center; \t\tVector3 mL = Vector3.Lerp(roadCenter, e.v1, interpolators.x); \t\tVector3 mR = Vector3.Lerp(roadCenter, e.v5, interpolators.y); \t\tTriangulateRoad(roadCenter, mL, mR, e, hasRoadThroughEdge); \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u0441 \u0440\u0435\u043a\u0430\u043c\u0438. \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0440\u0435\u043a\u0438, \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0440\u0435\u0437\u0430\u0442\u044c \u0432 \u0434\u043e\u0440\u043e\u0433\u0430\u0445 \u043f\u0440\u043e\u0431\u0435\u043b\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/roads-with-gaps.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433\u0438 \u0441 \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c\u0438.<\/i><\/p>\n<h3>\u041d\u0430\u0447\u0430\u043b\u043e \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0440\u0435\u043a\u0438<\/h3>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u044f\u0447\u0435\u0439\u043a\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u043e, \u0438\u043b\u0438 \u043a\u043e\u043d\u0435\u0446 \u0440\u0435\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u0434\u043e\u0440\u043e\u0433\u0438 \u043d\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043d\u0430 \u0432\u043e\u0434\u0443, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u043e\u0434\u0432\u0438\u043d\u0435\u043c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u043e\u0442 \u0440\u0435\u043a\u0438. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0438\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u043c <code>HexCell<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e.<\/p>\n<pre><code class=\"cs\">\tpublic HexDirection RiverBeginOrEndDirection { \t\tget { \t\t\treturn hasIncomingRiver ? incomingRiver : outgoingRiver; \t\t} \t}<\/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\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432 <code>HexGridChunk.TriangulateRoadAdjacentToRiver<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0440\u0435\u0442\u044c \u043a \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u0443 \u0440\u0435\u0431\u0440\u0443 \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\t\tbool hasRoadThroughEdge = cell.HasRoadThroughEdge(direction); \t\tVector2 interpolators = GetRoadInterpolators(direction, cell); \t\tVector3 roadCenter = center;  \t\tif (cell.HasRiverBeginOrEnd) { \t\t\troadCenter += HexMetrics.GetSolidEdgeMiddle( \t\t\t\tcell.RiverBeginOrEndDirection.Opposite() \t\t\t) * (1f \/ 3f); \t\t}  \t\tVector3 mL = Vector3.Lerp(roadCenter, e.v1, interpolators.x); \t\tVector3 mR = Vector3.Lerp(roadCenter, e.v5, interpolators.y); \t\tTriangulateRoad(roadCenter, mL, mR, e, hasRoadThroughEdge);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/adjusted-roads.png\"\/><\/div>\n<p>  <i>\u0418\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u0435\u043b\u044b. \u041c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0440\u0451\u0431\u0435\u0440 \u0434\u043e\u0440\u043e\u0433\u0438, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u0440\u0435\u043a\u0435. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u0430, \u0442\u043e \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0434\u043e\u0440\u043e\u0433\u0438, \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043b\u0435\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439. \u0410 \u0435\u0441\u043b\u0438 \u0440\u0435\u043a\u0430 \u0435\u0441\u0442\u044c \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u0442\u043e \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0434\u043e\u0440\u043e\u0433\u0438, \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043f\u0440\u0430\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u0438 \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<p>  \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0440\u0435\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0432 \u043a\u043e\u043d\u0435\u0446 \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<pre><code class=\"cs\">\t\tVector3 mL = Vector3.Lerp(roadCenter, e.v1, interpolators.x); \t\tVector3 mR = Vector3.Lerp(roadCenter, e.v5, interpolators.y); \t\tTriangulateRoad(roadCenter, mL, mR, e, hasRoadThroughEdge); \t\tif (cell.HasRiverThroughEdge(direction.Previous())) { \t\t\tTriangulateRoadEdge(roadCenter, center, mL); \t\t} \t\tif (cell.HasRiverThroughEdge(direction.Next())) { \t\t\tTriangulateRoadEdge(roadCenter, mR, center); \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 else?<\/b><\/p>\n<div class=\"spoiler_text\">\u041e\u043d \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043a, \u0438\u0434\u0443\u0449\u0438\u0445 \u0432 \u043e\u0431\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/div>\n<\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/roads-complete.png\"\/><\/div>\n<p>  <i>\u0413\u043e\u0442\u043e\u0432\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<h3>\u041f\u0440\u044f\u043c\u044b\u0435 \u0440\u0435\u043a\u0438<\/h3>\n<p>  \u041e\u0441\u043e\u0431\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u043f\u0440\u044f\u043c\u044b\u043c\u0438 \u0440\u0435\u043a\u0430\u043c\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043f\u043e \u0441\u0443\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442 \u0446\u0435\u043d\u0442\u0440 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 \u0434\u0432\u0430. \u041c\u044b \u0443\u0436\u0435 \u0438 \u0442\u0430\u043a \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043b\u0438\u0448\u043d\u0438\u0435 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0438 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u043a\u0430\u043c\u0438, \u043d\u043e \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0438 \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u0445 \u0440\u0435\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/straight-incorrect.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433\u0438, \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043d\u0430 \u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0435\u043a\u0443.<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u044f\u0447\u0435\u0439\u043a\u0430 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043b\u0438 \u043a\u043e\u043d\u0446\u0430 \u0440\u0435\u043a\u0438, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0438\u0434\u0443\u0442 \u043b\u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u0440\u0435\u043a\u0438 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u0443 \u043d\u0430\u0441 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u0430\u044f \u0440\u0435\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverBeginOrEnd) { \t\t\troadCenter += HexMetrics.GetSolidEdgeMiddle( \t\t\t\tcell.RiverBeginOrEndDirection.Opposite() \t\t\t) * (1f \/ 3f); \t\t} \t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Opposite()) { \t\t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0433\u0434\u0435 \u0440\u0435\u043a\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0420\u0435\u043a\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043b\u0438 \u0441\u043b\u0435\u0432\u0430, \u0438\u043b\u0438 \u0441\u043f\u0440\u0430\u0432\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043c\u0435\u0442\u043e\u0434\u0430, \u0442\u043e \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c \u044d\u0442\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u0431\u0443\u043b\u0435\u0432\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u0435\u0449\u0451 \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442 \u0447\u0442\u0435\u043d\u0438\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<pre><code class=\"cs\">\t\tbool hasRoadThroughEdge = cell.HasRoadThroughEdge(direction); \t\tbool previousHasRiver = cell.HasRiverThroughEdge(direction.Previous()); \t\tbool nextHasRiver = cell.HasRiverThroughEdge(direction.Next()); \t\tVector2 interpolators = GetRoadInterpolators(direction, cell); \t\tVector3 roadCenter = center;  \t\tif (cell.HasRiverBeginOrEnd) { \t\t\troadCenter += HexMetrics.GetSolidEdgeMiddle( \t\t\t\tcell.RiverBeginOrEndDirection.Opposite() \t\t\t) * (1f \/ 3f); \t\t} \t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Opposite()) { \t\t\tif (previousHasRiver) { \t\t\t} \t\t\telse { \t\t\t} \t\t}  \t\tVector3 mL = Vector3.Lerp(roadCenter, e.v1, interpolators.x); \t\tVector3 mR = Vector3.Lerp(roadCenter, e.v5, interpolators.y); \t\tTriangulateRoad(roadCenter, mL, mR, e, hasRoadThroughEdge); \t\tif (previousHasRiver) { \t\t\tTriangulateRoadEdge(roadCenter, center, mL); \t\t} \t\tif (nextHasRiver) { \t\t\tTriangulateRoadEdge(roadCenter, mR, center); \t\t}<\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u043a \u0443\u0433\u043b\u043e\u0432\u043e\u043c\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0443, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u0443\u044e \u043e\u0442 \u0440\u0435\u043a\u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0415\u0441\u043b\u0438 \u0440\u0435\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0442\u043e \u044d\u0442\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0439 \u0443\u0433\u043e\u043b. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0439 \u0443\u0433\u043e\u043b.<\/p>\n<pre><code class=\"cs\">\t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Opposite()) { \t\t\tVector3 corner; \t\t\tif (previousHasRiver) { \t\t\t\tcorner = HexMetrics.GetSecondSolidCorner(direction); \t\t\t} \t\t\telse { \t\t\t\tcorner = HexMetrics.GetFirstSolidCorner(direction); \t\t\t} \t\t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u0434\u0432\u0438\u0433\u0443\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u043e \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u0443 \u0441 \u0440\u0435\u043a\u043e\u0439, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u0443\u0433\u043b\u0443. \u0417\u0430\u0442\u0435\u043c \u043d\u0430\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Opposite()) { \t\t\tVector3 corner; \t\t\tif (previousHasRiver) { \t\t\t\tcorner = HexMetrics.GetSecondSolidCorner(direction); \t\t\t} \t\t\telse { \t\t\t\tcorner = HexMetrics.GetFirstSolidCorner(direction); \t\t\t} \t\t\troadCenter += corner * 0.5f; \t\t\tcenter += corner * 0.25f; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/straight-adjusted.png\"\/><\/div>\n<p>  <i>\u0420\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<p>  \u041c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043b\u0438 \u0441\u0435\u0442\u044c \u0434\u043e\u0440\u043e\u0433 \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0440\u043e\u0433\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c \u0440\u0435\u043a\u0438. \u041d\u043e \u0435\u0441\u043b\u0438 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043d\u0435\u0442 \u0434\u043e\u0440\u043e\u0433\u0438, \u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0443\u0441\u043e\u043a \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0434\u043e\u0440\u043e\u0433\u0438. \u042d\u0442\u043e \u043d\u0435\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 \u0442\u0430\u043a\u0438\u0445 \u0447\u0430\u0441\u0442\u0435\u0439.<\/p>\n<p>  \u0423\u0431\u0435\u0434\u0438\u043c\u0441\u044f, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0430, \u0438\u0434\u0443\u0449\u0430\u044f \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u0415\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442, \u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0434\u0440\u0443\u0433\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0442\u043e\u0439 \u0436\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0435\u043a\u0438 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u043e\u0440\u043e\u0433\u0438. \u0415\u0441\u043b\u0438 \u043d\u0438 \u0442\u0430\u043c, \u043d\u0438 \u0442\u0430\u043c \u043d\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0434\u043e\u0440\u043e\u0433\u0438, \u0442\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u044f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\t\t\tif (previousHasRiver) { \t\t\t\tif ( \t\t\t\t\t!hasRoadThroughEdge &amp;&amp; \t\t\t\t\t!cell.HasRoadThroughEdge(direction.Next()) \t\t\t\t) { \t\t\t\t\treturn; \t\t\t\t} \t\t\t\tcorner = HexMetrics.GetSecondSolidCorner(direction); \t\t\t} \t\t\telse { \t\t\t\tif ( \t\t\t\t\t!hasRoadThroughEdge &amp;&amp; \t\t\t\t\t!cell.HasRoadThroughEdge(direction.Previous()) \t\t\t\t) { \t\t\t\t\treturn; \t\t\t\t} \t\t\t\tcorner = HexMetrics.GetFirstSolidCorner(direction); \t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/straight-pruned.png\"\/><\/div>\n<p>  <i>\u0423\u0441\u0435\u0447\u0451\u043d\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 \u043c\u043e\u0441\u0442\u043e\u0432?<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u043e\u043a\u0430 \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u043c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438. \u041c\u043e\u0441\u0442\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0420\u0435\u043a\u0438-\u0437\u0438\u0433\u0437\u0430\u0433\u0438<\/h3>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0442\u0438\u043f \u0440\u0435\u043a \u2014 \u044d\u0442\u043e \u0437\u0438\u0433\u0437\u0430\u0433\u0438. \u0422\u0430\u043a\u0438\u0435 \u0440\u0435\u043a\u0438 \u043d\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442 \u0434\u043e\u0440\u043e\u0436\u043d\u0443\u044e \u0441\u0435\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/zigzag-incorrect.png\"\/><\/div>\n<p>  \u0417\u0438\u0433\u0437\u0430\u0433\u0438, \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u043a\u0432\u043e\u0437\u044c \u0434\u043e\u0440\u043e\u0433\u0438.<\/p>\n<p>  \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0437\u0438\u0433\u0437\u0430\u0433\u043e\u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0440\u0435\u043a. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438, \u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0437\u0438\u0433\u0437\u0430\u0433. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0434\u0432\u0443\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u043c, \u0437\u0430\u0432\u0438\u0441\u044f\u0449\u0438\u043c \u043e\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0447\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\t\tif (cell.HasRiverBeginOrEnd) { \t\t\t&hellip; \t\t} \t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Opposite()) { \t\t\t&hellip; \t\t} \t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Previous()) { \t\t} \t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Next()) { \t\t}<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0443\u0433\u043b\u043e\u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a\u0438. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c\u044b\u0439 \u0443\u0433\u043e\u043b \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u0447\u0435\u043d\u0438\u044f. \u041e\u0442\u043e\u0434\u0432\u0438\u043d\u0435\u043c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0443\u0433\u043b\u0430 \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c 0.2.<\/p>\n<pre><code class=\"cs\">\t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Previous()) { \t\t\troadCenter -= HexMetrics.GetSecondCorner(cell.IncomingRiver) * 0.2f; \t\t} \t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Next()) { \t\t\troadCenter -= HexMetrics.GetFirstCorner(cell.IncomingRiver) * 0.2f; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/zigzag-adjusted.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433\u0430, \u043e\u0442\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u043e\u0442 \u0437\u0438\u0433\u0437\u0430\u0433\u043e\u0432.<\/i><\/p>\n<h3>\u0412\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0438\u0432\u044b\u0445 \u0440\u0435\u043a<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u043a \u2014 \u043f\u043b\u0430\u0432\u043d\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f. \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u0440\u044f\u043c\u043e\u0439 \u0440\u0435\u043a\u043e\u0439, \u044d\u0442\u0430 \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u044a\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0438. \u041d\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u0434\u0440\u0443\u0433\u0438\u043c\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u0440\u0438\u0432\u043e\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/curved-incorrect.png\"\/><\/div>\n<p>  <i>\u0418\u0441\u043a\u0440\u0438\u0432\u043b\u0451\u043d\u043d\u0430\u044f \u0440\u0435\u043a\u0430 \u0441 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u0430 \u043f\u043e \u043e\u0431\u0435\u0438\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u0430\u043c \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u043e \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0440\u0438\u0432\u043e\u0439.<\/p>\n<pre><code class=\"cs\">\t\telse if (cell.IncomingRiver == cell.OutgoingRiver.Next()) { \t\t\t&hellip; \t\t} \t\telse if (previousHasRiver &amp;&amp; nextHasRiver) { \t\t}<\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u043f\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0440\u0435\u0431\u0440\u0443 \u044f\u0447\u0435\u0439\u043a\u0438, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043a\u043e\u0440\u043e\u0442\u0438\u0432 \u0434\u043e\u0440\u043e\u0433\u0443. \u041f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 0.7. \u0426\u0435\u043d\u0442\u0440 \u044f\u0447\u0435\u0439\u043a\u0438 \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u043e\u043c 0.5.<\/p>\n<pre><code class=\"cs\">\t\telse if (previousHasRiver &amp;&amp; nextHasRiver) { \t\t\tVector3 offset = HexMetrics.GetSolidEdgeMiddle(direction) * \t\t\t\tHexMetrics.innerToOuter; \t\t\troadCenter += offset * 0.7f; \t\t\tcenter += offset * 0.5f; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/curved-inside-adjusted.png\"\/><\/div>\n<p>  <i>\u0423\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043f\u0440\u044f\u043c\u044b\u043c\u0438 \u0440\u0435\u043a\u0430\u043c\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u0435\u0447\u044c \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0434\u043e\u0440\u043e\u0433. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\t\telse if (previousHasRiver &amp;&amp; nextHasRiver) { \t\t\tif (!hasRoadThroughEdge) { \t\t\t\treturn; \t\t\t} \t\t\tVector3 offset = HexMetrics.GetSolidEdgeMiddle(direction) * \t\t\t\tHexMetrics.innerToOuter; \t\t\troadCenter += offset * 0.7f; \t\t\tcenter += offset * 0.5f; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/curved-inside-pruned.png\"\/><\/div>\n<p>  <i>\u041e\u0442\u0441\u0435\u0447\u0451\u043d\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<h3>\u0421\u043d\u0430\u0440\u0443\u0436\u0438 \u043a\u0440\u0438\u0432\u044b\u0445 \u0440\u0435\u043a<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u043c\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0441\u043a\u0440\u0438\u0432\u043b\u0451\u043d\u043d\u043e\u0439 \u0440\u0435\u043a\u0438. \u0421\u043d\u0430\u0440\u0443\u0436\u0438 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438 \u044f\u0447\u0435\u0439\u043a\u0438. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u0435\u0433\u043e, \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0446\u0435\u043d\u0442\u0440 \u0434\u043e\u0440\u043e\u0433\u0438 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u043d\u0430 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 0.25.<\/p>\n<pre><code class=\"cs\">\t\telse if (previousHasRiver &amp;&amp; nextHasRiver) { \t\t\t&hellip; \t\t} \t\telse { \t\t\tHexDirection middle; \t\t\tif (previousHasRiver) { \t\t\t\tmiddle = direction.Next(); \t\t\t} \t\t\telse if (nextHasRiver) { \t\t\t\tmiddle = direction.Previous(); \t\t\t} \t\t\telse { \t\t\t\tmiddle = direction; \t\t\t} \t\t\troadCenter += HexMetrics.GetSolidEdgeMiddle(middle) * 0.25f; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/curved-outside-adjusted.png\"\/><\/div>\n<p>  <i>\u0418\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\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 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0435\u0447\u044c \u0434\u043e\u0440\u043e\u0433\u0438 \u0438 \u043d\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0440\u0435\u043a\u0438. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0440\u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0440\u043e\u0433\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b. \u0415\u0441\u043b\u0438 \u0434\u043e\u0440\u043e\u0433 \u043d\u0435\u0442, \u043c\u044b \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<pre><code class=\"cs\">\t\telse { \t\t\tHexDirection middle; \t\t\tif (previousHasRiver) { \t\t\t\tmiddle = direction.Next(); \t\t\t} \t\t\telse if (nextHasRiver) { \t\t\t\tmiddle = direction.Previous(); \t\t\t} \t\t\telse { \t\t\t\tmiddle = direction; \t\t\t} \t\t\tif ( \t\t\t\t!cell.HasRoadThroughEdge(middle) &amp;&amp; \t\t\t\t!cell.HasRoadThroughEdge(middle.Previous()) &amp;&amp; \t\t\t\t!cell.HasRoadThroughEdge(middle.Next()) \t\t\t) { \t\t\t\treturn; \t\t\t} \t\t\troadCenter += HexMetrics.GetSolidEdgeMiddle(middle) * 0.25f; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/curved-outside-not-pruned.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/curved-outside-pruned.png\"\/><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433\u0438 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u0441\u0435\u0447\u0435\u043d\u0438\u044f.<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0441\u0435\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u043a \u043d\u0430\u0448\u0438 \u0440\u0435\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u0420\u0435\u043a\u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442 \u0434\u043e\u0440\u043e\u0433\u0438, \u0430 \u0434\u043e\u0440\u043e\u0433\u0438 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u0430\u0431\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a \u0440\u0435\u043a\u0430\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/rivers-and-roads.png\"\/><\/div>\n<p>  <i>\u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043a \u0438 \u0434\u043e\u0440\u043e\u0433.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/combining-rivers-and-roads\/combining-rivers-and-roads.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0434\u043e\u0440\u043e\u0433<\/h2>\n<p>  \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0446\u0432\u0435\u0442\u043e\u0432 \u0434\u043e\u0440\u043e\u0433 \u0438\u0445 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 U, \u0442\u043e \u043c\u044b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043e\u0439 \u0438 \u043a\u0440\u0430\u0435\u043c \u0434\u043e\u0440\u043e\u0433\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/uv.png\"\/><\/div>\n<p>  <i>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u0440\u043e\u0433\u0438 \u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0438\u0430\u043d\u0433\u0443\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440 \u0434\u043e\u0440\u043e\u0433, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043b \u043d\u0435\u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0445\u043e\u0436\u0435\u0435 \u043d\u0430 \u0434\u043e\u0440\u043e\u0433\u0438. \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0440\u0435\u043a\u0430\u043c\u0438, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0438\u0437\u044b\u0441\u043a\u043e\u0432.<\/p>\n<p>  \u041c\u044b \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0434\u043e\u0440\u043e\u0433 \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u0435\u0433\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u043c.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfixed4 c = _Color; \t\t\t \t\t\to.Albedo = c.rgb; \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:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/red.png\"\/><\/div>\n<p>  <i>\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<p>  \u0418 \u044d\u0442\u043e \u0443\u0436\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435! \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0438 \u0441\u043c\u0435\u0448\u0430\u0435\u043c \u0434\u043e\u0440\u043e\u0433\u0443 \u0441 \u0440\u0435\u043b\u044c\u0435\u0444\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 U.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfixed4 c = _Color; \t\t\tfloat blend = IN.uv_MainTex.x; \t\t\t \t\t\to.Albedo = c.rgb; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = blend; \t\t}<\/code><\/pre>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0435, \u044d\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u0448 \u0448\u0435\u0439\u0434\u0435\u0440 \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u0435\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0430\u043b\u044c\u0444\u0430-\u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0448\u0435\u0439\u0434\u0435\u0440 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u043a\u0430\u043b\u0435\u0439. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043a \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0435 <code>#pragma surface<\/code> \u0441\u0442\u0440\u043e\u043a\u0443 <code>decal:blend<\/code>.<\/p>\n<pre><code>\t\t#pragma surface surf Standard fullforwardshadows decal:blend<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/decal.png\"\/><\/div>\n<p>  <i>\u0421\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0442 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u044b \u043a \u043a\u0440\u0430\u044e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u043f\u043e\u0445\u043e\u0434\u0438\u043b\u043e \u043d\u0430 \u0434\u043e\u0440\u043e\u0433\u0443, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0441\u043f\u043b\u043e\u0448\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0434\u0451\u0442 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>smoothstep<\/code>. \u041e\u043d\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u044e \u043e\u0442 0 \u0434\u043e 1 \u0432 S-\u043e\u0431\u0440\u0430\u0437\u043d\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/smoothstep-curve.png\"\/><\/div>\n<p>  <i>\u041b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0438\u044f \u0438 smoothstep.<\/i><\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>smoothstep<\/code> \u0438\u043c\u0435\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0430 \u0434\u043b\u044f \u0443\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043a\u0440\u0438\u0432\u043e\u0439 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435. \u0412\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043a\u0440\u0438\u0432\u0430\u044f \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043b\u043e\u0441\u043a\u043e\u0439. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c 0.4 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043a\u0440\u0438\u0432\u043e\u0439 \u0438 0.7 \u0432 \u043a\u043e\u043d\u0446\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 U \u043e\u0442 0 \u0434\u043e 0.4 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439. \u0410 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b U \u043e\u0442 0.7 \u0434\u043e 1 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u043c\u0438. \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u0435\u0436\u0434\u0443 0.4 \u0438 0.7.<\/p>\n<pre><code>\t\t\tfloat blend = IN.uv_MainTex.x; \t\t\tblend = smoothstep(0.4, 0.7, blend);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/smoothstep.png\"\/><\/div>\n<p>  <i>\u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438.<\/i><\/p>\n<h3>\u0414\u043e\u0440\u043e\u0433\u0430 \u0441 \u0448\u0443\u043c\u043e\u043c<\/h3>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0435\u0448 \u0434\u043e\u0440\u043e\u0433\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u0430\u0436\u0451\u043d, \u0434\u043e\u0440\u043e\u0433\u0438 \u0438\u043c\u0435\u044e\u0442 \u0432\u0430\u0440\u044c\u0438\u0440\u0443\u044e\u0449\u0443\u044e\u0441\u044f \u0448\u0438\u0440\u0438\u043d\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0448\u0438\u0440\u0438\u043d\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043a\u0440\u0430\u044f\u0445 \u0442\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u0418\u043d\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0440\u0430\u0437\u043c\u044b\u0442\u0430, \u0438\u043d\u043e\u0433\u0434\u0430 \u0440\u0435\u0437\u043a\u0430. \u0422\u0430\u043a\u0430\u044f \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u043e\u0440\u043e\u0433\u0438 \u043a\u0430\u043a \u043f\u0435\u0441\u0447\u0430\u043d\u044b\u0435 \u0438\u043b\u0438 \u0437\u0435\u043c\u043b\u044f\u043d\u044b\u0435.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u043a\u0440\u0430\u044f\u043c \u0434\u043e\u0440\u043e\u0433\u0438 \u0448\u0443\u043c\u0430. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u0440\u043e\u0432\u043d\u044b\u043c\u0438 \u0438 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0448\u0443\u043c\u0430. \u0414\u043b\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\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 \u043c\u0438\u0440\u0430 XZ, \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0438 \u0438\u0441\u043a\u0430\u0436\u0435\u043d\u0438\u0438 \u0432\u0435\u0440\u0448\u0438\u043d \u044f\u0447\u0435\u0435\u043a.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043c\u0438\u0440\u0430 \u0432 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e\u043c \u0448\u0435\u0439\u0434\u0435\u0440\u0435, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 <code>float3 worldPos<\/code>.<\/p>\n<pre><code>\t\tstruct Input { \t\t\tfloat2 uv_MainTex; \t\t\tfloat3 worldPos; \t\t};<\/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 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 <code>surf<\/code> \u0434\u043b\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u0438\u043d\u0430\u0447\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0447\u0430\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f.<\/p>\n<pre><code>\t\t\tfloat4 noise = tex2D(_MainTex, IN.worldPos.xz * 0.025); \t\t\tfixed4 c = _Color; \t\t\tfloat blend = IN.uv_MainTex.x;<\/code><\/pre>\n<p>  \u0418\u0441\u043a\u0430\u0437\u0438\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434, \u0443\u043c\u043d\u043e\u0436\u0438\u0432 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0443 U \u043d\u0430 <code>noise.x<\/code>. \u041d\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0448\u0443\u043c\u0430 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0440\u0430\u0432\u043d\u044b 0.5, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0434\u043e\u0440\u043e\u0433 \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043f\u0435\u0440\u0435\u0434 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u043a \u0448\u0443\u043c\u0443 0.5.<\/p>\n<pre><code>\t\t\tfloat blend = IN.uv_MainTex.x; \t\t\tblend *= noise.x + 0.5; \t\t\tblend = smoothstep(0.4, 0.7, blend);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/inspector.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/perturbed.png\"\/><\/div>\n<p>  <i>\u0418\u0441\u043a\u0430\u0436\u0451\u043d\u043d\u044b\u0435 \u043a\u0440\u0430\u044f \u0434\u043e\u0440\u043e\u0433.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u0441 \u044d\u0442\u0438\u043c, \u0438\u0441\u043a\u0430\u0437\u0438\u043c \u0442\u0430\u043a\u0436\u0435 \u0438 \u0446\u0432\u0435\u0442 \u0434\u043e\u0440\u043e\u0433. \u042d\u0442\u043e \u043f\u0440\u0438\u0434\u0430\u0441\u0442 \u0434\u043e\u0440\u043e\u0433\u0430\u043c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435 \u0433\u0440\u044f\u0437\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u043d\u0435\u0447\u0451\u0442\u043a\u0438\u043c \u043a\u0440\u0430\u044f\u043c.<\/p>\n<p>  \u0423\u043c\u043d\u043e\u0436\u0438\u043c \u0446\u0432\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u0430\u043d\u0430\u043b \u0448\u0443\u043c\u0430, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430 <code>noise.y<\/code>. \u0422\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 \u0448\u0443\u043c\u0430 \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443, \u0447\u0442\u043e\u0431\u044b \u0441\u0443\u043c\u043c\u0430 \u043c\u043e\u0433\u043b\u0430 \u0434\u043e\u0441\u0442\u0438\u0447\u044c 1.<\/p>\n<pre><code>\t\t\tfixed4 c = _Color * (noise.y * 0.75 + 0.25);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/colorized.png\"\/><\/div>\n<p>  <i>\u041d\u0435\u0440\u043e\u0432\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-7\/road-appearance\/road-appearance.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\/424491\/\"> https:\/\/habr.com\/post\/424491\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<div style=\"text-align:center;\"><img decoding=\"async\"  src=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-20\/tutorial-image.jpg\" alt=\"image\"\/><\/div>\n<p>  \u041d\u0430\u0447\u0430\u043b\u043e: <a href=\"https:\/\/habr.com\/post\/424257\/\">\u0447\u0430\u0441\u0442\u0438 1-3<\/a>.<\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 4: \u041d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438<\/h1>\n<p>  <\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<ul>\n<li>\u0421\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0448\u0443\u043c\u0430.<\/li>\n<li>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0435\u0440\u0448\u0438\u043d\u044b.<\/li>\n<li>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043f\u043b\u043e\u0441\u043a\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u044f\u0447\u0435\u0435\u043a.<\/li>\n<li>\u041f\u043e\u0434\u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u0440\u0451\u0431\u0440\u0430 \u044f\u0447\u0435\u0435\u043a.<\/li>\n<\/ul>\n<p>  \u041f\u043e\u043a\u0430 \u043d\u0430\u0448\u0430 \u0441\u0435\u0442\u043a\u0430 \u044f\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0441\u0442\u0440\u043e\u0433\u0438\u043c \u0443\u0437\u043e\u0440\u043e\u043c \u0438\u0437 \u0441\u043e\u0442. \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0440\u0442\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u0430 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0435\u0435.  <\/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-290373","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/290373","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=290373"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/290373\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=290373"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=290373"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=290373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}