{"id":290869,"date":"2018-10-16T12:25:02","date_gmt":"2018-10-16T08:25:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=290869"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=290869","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: \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430, \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\"><a href=\"https:\/\/habr.com\/post\/424257\/\">\u0427\u0430\u0441\u0442\u0438 1-3: \u0441\u0435\u0442\u043a\u0430, \u0446\u0432\u0435\u0442\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0435\u043a.<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/424491\/\">\u0427\u0430\u0441\u0442\u0438 4-7: \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438.<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/425463\/\">\u0427\u0430\u0441\u0442\u0438 8-11: \u0432\u043e\u0434\u0430, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0438 \u043a\u0440\u0435\u043f\u043e\u0441\u0442\u043d\u044b\u0435 \u0441\u0442\u0435\u043d\u044b<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 12: \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0432\u0435\u0442\u0430.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b.<\/li>\n<li>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e.<\/li>\n<li>\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a.<\/li>\n<li>\u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430.<\/li>\n<\/ul>\n<p>  \u041c\u044b \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7bb\/2ce\/740\/7bb2ce7409d37733e3b6f96c237ce1e9.jpg\"><\/div>\n<p><a name=\"habracut\"><\/a><br \/>  <i>\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-12\/test.map\">test.map<\/a>.<\/i><\/p>\n<h2>\u0422\u0438\u043f \u0440\u0435\u043b\u044c\u0435\u0444\u0430<\/h2>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438. \u0421\u0430\u043c\u0430 \u0435\u0451 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0431\u0435\u0440\u0451\u0442\u0441\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0451 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043b\u0443\u0447\u0448\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u0437\u0436\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b. \u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u044b \u043e\u0442 \u0438\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u043e\u0447\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u044f\u0447\u0435\u0439\u043a\u0438. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0430 \u0437\u0435\u043b\u0451\u043d\u0430\u044f. \u041d\u043e \u0442\u043e\u0447\u043d\u044b\u0439 \u043e\u0442\u0442\u0435\u043d\u043e\u043a \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441 \u0446\u0432\u0435\u0442\u0430, \u0430 \u043d\u0435 \u0441\u0430\u043c\u0438 \u0446\u0432\u0435\u0442\u0430. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0446\u0432\u0435\u0442\u043e\u0432 \u044d\u0442\u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043f\u043e\u0437\u0436\u0435 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0446\u0432\u0435\u0442\u043e\u0432<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e \u0446\u0432\u0435\u0442\u0435, \u0442\u043e \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0445\u0440\u0430\u043d\u0438\u0442\u044c\u0441\u044f \u0433\u0434\u0435-\u0442\u043e \u0435\u0449\u0451. \u0423\u0434\u043e\u0431\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0432 <code>HexMetrics<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0435\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0446\u0432\u0435\u0442\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tpublic static Color[] colors;<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0438 \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0448\u0443\u043c, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0446\u0432\u0435\u0442\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>HexGrid<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic Color[] colors; \t \t\u2026 \t \tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource; \t\tHexMetrics.InitializeHashGrid(seed); \t\tHexMetrics.colors = colors;  \t\t\u2026 \t}  \t\u2026  \tvoid OnEnable () { \t\tif (!HexMetrics.noiseSource) { \t\t\tHexMetrics.noiseSource = noiseSource; \t\t\tHexMetrics.InitializeHashGrid(seed); \t\t\tHexMetrics.colors = colors; \t\t} \t}<\/code><\/pre>\n<p>  \u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u0435\u043c \u0446\u0432\u0435\u0442\u0430 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044f\u0447\u0435\u0439\u043a\u0430\u043c, \u0438\u0437\u0431\u0430\u0432\u0438\u043c\u0441\u044f \u043e\u0442 \u0446\u0432\u0435\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic Color defaultColor = Color.white; \t \t\u2026 \t\t\t\t\t \tvoid CreateCell (int x, int z, int i) { \t\t\u2026  \t\tHexCell cell = cells[i] = Instantiate&lt;HexCell&gt;(cellPrefab); \t\tcell.transform.localPosition = position; \t\tcell.coordinates = HexCoordinates.FromOffsetCoordinates(x, z); \/\/\t\tcell.Color = defaultColor;  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043d\u043e\u0432\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u043e\u0431\u0449\u0435\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4bf\/3cb\/002\/4bf3cb002342f9ab3aa482cf3a526042.png\"><\/div>\n<p>  <i>\u0426\u0432\u0435\u0442\u0430, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0435 \u0432 \u0441\u0435\u0442\u043a\u0443.<\/i><\/p>\n<h3>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u0423\u0431\u0435\u0440\u0451\u043c \u0438\u0437 <code>HexCell<\/code> \u043f\u043e\u043b\u0435 \u0446\u0432\u0435\u0442\u0430. \u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441. \u0410 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0446\u0432\u0435\u0442\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<pre><code class=\"cs\">\/\/\tColor color; \tint terrainTypeIndex;<\/code><\/pre>\n<p>  \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e color \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0446\u0432\u0435\u0442\u0430. \u041e\u043d \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0435 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0434\u0430\u043b\u0438\u043c \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0441\u043a\u043e\u0440\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c.<\/p>\n<pre><code class=\"cs\">\tpublic Color Color { \t\tget { \t\t\treturn HexMetrics.colors[terrainTypeIndex]; \t\t} \/\/\t\tset { \/\/\t\t\t\u2026 \/\/\t\t} \t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043d\u043e\u0432\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic int TerrainTypeIndex { \t\tget { \t\t\treturn terrainTypeIndex; \t\t} \t\tset { \t\t\tif (terrainTypeIndex != value) { \t\t\t\tterrainTypeIndex = value; \t\t\t\tRefresh(); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0420\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430<\/h3>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 <code>HexMapEditor<\/code> \u0443\u0434\u0430\u043b\u0438\u043c \u0432\u0435\u0441\u044c \u043a\u043e\u0434, \u043a\u0430\u0441\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0446\u0432\u0435\u0442\u043e\u0432. \u042d\u0442\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0443 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic Color[] colors;  \t\u2026  \/\/\tColor activeColor;  \t\u2026  \/\/\tbool applyColor;  \u2026  \/\/\tpublic void SelectColor (int index) { \/\/\t\tapplyColor = index &gt;= 0; \/\/\t\tif (applyColor) { \/\/\t\t\tactiveColor = colors[index]; \/\/\t\t} \/\/\t}  \u2026  \/\/\tvoid Awake () { \/\/\t\tSelectColor(0); \/\/\t} \t \t\u2026 \t \tvoid EditCell (HexCell cell) { \t\tif (cell) { \/\/\t\t\tif (applyColor) { \/\/\t\t\t\tcell.Color = activeColor; \/\/\t\t\t} \t\t\t\u2026 \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u043b\u0435 \u0438 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<pre><code class=\"cs\">\tint activeTerrainTypeIndex; \t \t\u2026 \t \tpublic void SetTerrainTypeIndex (int index) { \t\tactiveTerrainTypeIndex = index; \t}<\/code><\/pre>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043a\u0430\u043a \u0437\u0430\u043c\u0435\u043d\u0443 \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 <code>SelectColor<\/code>. \u0421\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0446\u0432\u0435\u0442\u043e\u0432 \u0432 UI \u0441 <code>SetTerrainTypeIndex<\/code>, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0432\u0441\u0451 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0446\u0432\u0435\u0442 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>EditCell<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043d\u0430\u0437\u043d\u0430\u0447\u0430\u043b\u0441\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid EditCell (HexCell cell) { \t\tif (cell) { \t\t\tif (activeTerrainTypeIndex &gt;= 0) { \t\t\t\tcell.TerrainTypeIndex = activeTerrainTypeIndex; \t\t\t} \t\t\t\u2026 \t\t} \t}<\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044f \u043c\u044b \u0443\u0434\u0430\u043b\u0438\u043b\u0438 \u0438\u0437 \u044f\u0447\u0435\u0435\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430, \u043a\u0430\u0440\u0442\u0430 \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. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0446\u0432\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u043c \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435. \u0412 \u043c\u043e\u0451\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0436\u0451\u043b\u0442\u044b\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8cc\/e7e\/6ac\/8cce7e6acb202e119a6e7d5cdae2db74.png\"><\/div>\n<p>  <i>\u0416\u0451\u043b\u0442\u044b\u0439 \u2014 \u043d\u043e\u0432\u044b\u0439 \u0446\u0432\u0435\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-12\/terrain-type\/terrain-type.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435<\/h2>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>HexMapEditor<\/code>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0439\u043c\u0443\u0442\u0441\u044f \u044d\u0442\u0438\u043c, \u0438 \u043f\u043e\u043a\u0430 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0438\u0445 \u043f\u0443\u0441\u0442\u044b\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void Save () { \t}  \tpublic void Load () { \t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UI \u0434\u0432\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 (<em>GameObject \/ UI \/ Button<\/em>). \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0445 \u043a \u043a\u043d\u043e\u043f\u043a\u0430\u043c \u0438 \u0434\u0430\u0434\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043a\u0438. \u042f \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b \u0438\u0445 \u0432 \u043d\u0438\u0436\u043d\u044e\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6ec\/eba\/96b\/6eceba96bb5ff18fd0b4ad9472a19695.png\"><\/div>\n<p>  <i>\u041a\u043d\u043e\u043f\u043a\u0438 Save \u0438 Load.<\/i><\/p>\n<h3>\u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430<\/h3>\n<p>  \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u0435\u0451 \u043a\u0443\u0434\u0430-\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c. \u041a\u0430\u043a \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0438\u0433\u0440, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435. \u041d\u043e \u043a\u0443\u0434\u0430 \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b? \u041e\u0442\u0432\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u043e\u0433\u043e, \u0432 \u043a\u0430\u043a\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u0430 \u0438\u0433\u0440\u0430. \u0423 \u043a\u0430\u0436\u0434\u043e\u0439 \u041e\u0421 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0445\u0441\u044f \u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c.<\/p>\n<p>  \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u044d\u0442\u0438\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u0432. Unity \u0437\u043d\u0430\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0443\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>Application.persistentDataPath<\/code>. \u041c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043a\u0430\u043a\u0438\u043c \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0443 \u0432\u0430\u0441, \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>Save<\/code> \u0432\u044b\u0432\u0435\u0434\u044f \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438 \u043d\u0430\u0436\u0430\u0432 \u043a\u043d\u043e\u043f\u043a\u0443 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play.<\/p>\n<pre><code class=\"cs\">\tpublic void Save () { \t\tDebug.Log(Application.persistentDataPath); \t}<\/code><\/pre>\n<p>  \u0412 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445 \u043f\u0443\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u042d\u0442\u043e\u0442 \u043f\u0443\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440, \u0438 \u0441\u0431\u043e\u0440\u043a\u0438. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432 <em>Edit \/ Project Settings \/ Player<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/656\/a60\/056\/656a60056f9d51c5a5f3d81762135b87.png\"><\/div>\n<p>  <i>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u043d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 \u043f\u0430\u043f\u043a\u0443 Library \u043d\u0430 Mac?<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u0430\u043f\u043a\u0430 <em>Library<\/em> \u0447\u0430\u0441\u0442\u043e \u0441\u043a\u0440\u044b\u0442\u0430. \u0421\u043f\u043e\u0441\u043e\u0431, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c, \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 OS X. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043d\u0435 \u0441\u0442\u0430\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0432 Finder \u043f\u0430\u043f\u043a\u0443 home \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u0432 <em>Show View Options<\/em>. \u0422\u0430\u043c \u0435\u0441\u0442\u044c \u0444\u043b\u0430\u0436\u043e\u043a \u0434\u043b\u044f \u043f\u0430\u043f\u043a\u0438 <em>Library<\/em>.<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 WebGL?<\/b><\/p>\n<div class=\"spoiler_text\">\u0418\u0433\u0440\u044b \u043d\u0430 WebGL \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438. \u041e\u043d\u0430 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u0430 \u0434\u043b\u044f \u043d\u0430\u0441. \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u0438\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d <code>System.IO<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>using<\/code> \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043d\u0430\u0434 \u043a\u043b\u0430\u0441\u0441\u043e\u043c <code>HexMapEditor<\/code>.<\/p>\n<pre><code class=\"cs\">using UnityEngine; using UnityEngine.EventSystems; using System.IO;  public class HexMapEditor : MonoBehaviour { \t\u2026 }<\/code><\/pre>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <em>test.map<\/em>. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043a \u043f\u0443\u0442\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0443\u0436\u043d\u043e \u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u0443\u044e \u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u043a\u043e\u0441\u0443\u044e \u0447\u0435\u0440\u0442\u0443 (slash \u0438\u043b\u0438 backslash), \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u042d\u0442\u0438\u043c \u0437\u0430\u0439\u043c\u0451\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 <code>Path.Combine<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void Save () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0430\u0439\u043b\u0443 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>File.Open<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0435\u0436\u0438\u043c create. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b, \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u0441\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0432\u0448\u0438\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<pre><code class=\"cs\">\t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tFile.Open(path, FileMode.Create);<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u044d\u0442\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b. \u0418 \u043d\u0443\u0436\u043d\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0442\u043e\u043a, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d.<\/p>\n<pre><code class=\"cs\">\t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tStream fileStream = File.Open(path, FileMode.Create); \t\tfileStream.Close();<\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 <em>Save<\/em> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b <em>test.map<\/em> \u0432 \u043f\u0430\u043f\u043a\u0435, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u0430\u043a \u043f\u0443\u0442\u044c \u043a \u0445\u0440\u0430\u043d\u0438\u043c\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c. \u0415\u0441\u043b\u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u044b\u043c \u0438 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 0 \u0431\u0430\u0439\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u0432 \u043d\u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438.<\/p>\n<h3>\u0417\u0430\u043f\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432 \u043d\u0435\u0433\u043e \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>BinaryWriter<\/code>. \u042d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043f\u043e\u0442\u043e\u043a.<\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>BinaryWriter<\/code>, \u0430 \u0435\u0433\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0448 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u0417\u0430\u043a\u0440\u044b\u0442\u0438\u0435 writer \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0438\u043c \u043f\u043e\u0442\u043e\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043f\u043e\u0442\u043e\u043a.<\/p>\n<pre><code class=\"cs\">\t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tBinaryWriter writer = \t\t\tnew BinaryWriter(File.Open(path, FileMode.Create)); \t\twriter.Close();<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u043e\u0442\u043e\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>BinaryWriter.Write<\/code>. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 <code>Write<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a integer \u0438 float. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c integer 123.<\/p>\n<pre><code class=\"cs\">\t\tBinaryWriter writer = \t\t\tnew BinaryWriter(File.Open(path, FileMode.Create)); \t\twriter.Write(123); \t\twriter.Close();<\/code><\/pre>\n<p>  \u041d\u0430\u0436\u043c\u0451\u043c \u043a\u043d\u043e\u043f\u043a\u0443 <em>Save<\/em> \u0438 \u0441\u043d\u043e\u0432\u0430 \u0438\u0437\u0443\u0447\u0438\u043c <em>test.map<\/em>. \u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0430\u0432\u0435\u043d 4 \u0431\u0430\u0439\u0442\u0430\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 integer \u0440\u0430\u0432\u0435\u043d 4 \u0431\u0430\u0439\u0442\u0430\u043c.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u043e\u0439 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430?<\/b><\/p>\n<div class=\"spoiler_text\">\u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043d\u0430 \u0431\u043b\u043e\u043a\u0438 \u0431\u0430\u0439\u0442\u043e\u0432. \u041e\u043d\u0438 \u043d\u0435 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b. \u0422\u0430\u043a \u043a\u0430\u043a <em>test.map<\/em> \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430, \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0431\u043b\u043e\u043a \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043d\u0430\u043a\u043e\u043f\u0438\u0442\u0435\u043b\u044f.<\/div>\n<\/div>\n<p>  \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0430 \u043d\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0442\u0435\u043a\u0441\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u043c\u044b \u043e\u0442\u043a\u0440\u043e\u0435\u043c \u0444\u0430\u0439\u043b \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0430\u0431\u043e\u0440 \u043d\u0435\u0432\u043d\u044f\u0442\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0441\u0438\u043c\u0432\u043e\u043b <em>{<\/em>, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u0438\u043b\u0438 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432-\u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0432 hex-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c <em>7b 00 00 00<\/em>. \u042d\u0442\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430\u0448\u0435\u0433\u043e integer, \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0435 \u0432 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0412 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445 \u044d\u0442\u043e <em>123 0 0 0<\/em>. \u0412 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a <em>01111011<\/em>.<\/p>\n<p>  ASCII-\u043a\u043e\u0434 \u0434\u043b\u044f <em>{<\/em> \u0440\u0430\u0432\u0435\u043d 123, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0442 \u0441\u0438\u043c\u0432\u043e\u043b. ASCII 0 \u2014 \u044d\u0442\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043d\u0438\u043a\u0430\u043a\u0438\u043c \u0432\u0438\u0434\u0438\u043c\u044b\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c.<\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u0431\u0430\u0439\u0442\u0430 \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0447\u0438\u0441\u043b\u043e \u043c\u0435\u043d\u044c\u0448\u0435 256. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 256, \u0442\u043e \u0432 hex-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0443\u0432\u0438\u0434\u0435\u043b\u0438 \u0431\u044b <em>00 01 00 00<\/em>.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 123 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a 00 00 00 7b?<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b <code>BinaryWriter<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 little-endian. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0435 \u0431\u0430\u0439\u0442\u044b. \u042d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430 Microsoft \u043f\u0440\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 .Net. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043e\u043d \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 \u0426\u041f Intel \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430\u0442 little-endian.<\/p>\n<p>  \u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043e\u0439 \u0435\u043c\u0443 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f big-endian, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0432\u044b\u043c\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441\u0430\u043c\u044b\u0435 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0435 \u0431\u0430\u0439\u0442\u044b. \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u043c\u0443 \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0446\u0438\u0444\u0440 \u0432 \u0447\u0438\u0441\u043b\u0430\u0445. 123 \u2014 \u044d\u0442\u043e \u0441\u0442\u043e \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u0442\u0440\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044c big-endian. \u0415\u0441\u043b\u0438 \u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u0430 little-endian, \u0442\u043e 123 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u043b\u043e \u0431\u044b \u0442\u0440\u0438\u0441\u0442\u0430 \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u044c \u043e\u0434\u0438\u043d.<\/p><\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0414\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u043b\u0438\u0441\u044c<\/h3>\n<p>  \u0412\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u043b\u0438 writer. \u041f\u043e\u043a\u0430 \u043e\u043d \u043e\u0442\u043a\u0440\u044b\u0442, \u0444\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b, \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043d\u0435\u0433\u043e. \u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0431\u0443\u0434\u0435\u043c \u0435\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c, \u0442\u043e \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u043c \u0438 \u0441\u0435\u0431\u044f \u0442\u043e\u0436\u0435. \u0415\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0436\u043c\u0451\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0432\u0430\u0436\u0434\u044b, \u0442\u043e \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0442\u043e\u043a.<\/p>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f writer \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u043b\u043e\u043a <code>using<\/code>. \u041e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 writer \u0432\u0430\u043b\u0438\u0434\u0435\u043d. \u041a\u043e\u0433\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u044d\u0442\u0443 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, writer \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">\t\tusing ( \t\t\tBinaryWriter writer = \t\t\t\tnew BinaryWriter(File.Open(path, FileMode.Create)) \t\t) { \t\t\twriter.Write(123); \t\t} \/\/\t\twriter.Close();<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u044b writer \u0438 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>IDisposable<\/code>. \u042d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u043c\u0435\u0442\u043e\u0434 <code>Dispose<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u0441\u0432\u0435\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f <code>using<\/code>.<\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e <code>using<\/code> \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0420\u0430\u043d\u043d\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u044b, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0435\u043c\u0443 \u043d\u0435 \u043c\u0435\u0448\u0430\u044e\u0442. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0439.<\/p>\n<h3>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u0432 \u043c\u0435\u0442\u043e\u0434 <code>Load<\/code>. \u041a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435, \u0430 \u043d\u0435 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c. \u0418 \u0432\u043c\u0435\u0441\u0442\u043e writer \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <code>BinaryReader<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void Load () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing ( \t\t\tBinaryReader reader = \t\t\t\tnew BinaryReader(File.Open(path, FileMode.Open)) \t\t) { \t\t} \t}<\/code><\/pre>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>File.OpenRead<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0446\u0435\u043b\u044c\u044e \u0435\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 File.OpenWrite?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u043e\u0442\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0444\u0430\u0439\u043b\u0430\u043c, \u0430 \u043d\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0438\u0445.<\/div>\n<\/div>\n<p>  \u041f\u0440\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0427\u0442\u043e\u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u0430 integer, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>BinaryReader.ReadInt32<\/code>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 32-\u0431\u0438\u0442\u043d\u044b\u0439 integer, \u0442\u043e \u0435\u0441\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t\tDebug.Log(reader.ReadInt32()); \t\t}<\/code><\/pre>\n<p>  \u041d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 <em>123<\/em> \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442. \u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043f\u043e\u0442\u043e\u043a\u0435 \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0442\u0440\u0438 \u0431\u0430\u0439\u0442\u0430, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u044d\u0442\u043e\u043c\u0443 integer. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0434\u043b\u044f \u0447\u0438\u0441\u0435\u043b \u0432\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 0\u2013255. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a.<\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-12\/storing-data-a-file\/storing-data-in-a-file.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0417\u0430\u043f\u0438\u0441\u044c \u0438 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u044b<\/h2>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\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, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f JSON, XML \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 ASCII \u0441 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439. \u0422\u0430\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430\u0445. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d\u0438 \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442 \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0443 \u0442\u0430\u043a\u0438\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f. \u0424\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0441\u0442\u0430 (\u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435), \u0447\u0435\u043c \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0422\u0430\u043a\u0436\u0435 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043f\u0440\u0438 \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0438 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b \u0438 \u0431\u044b\u0441\u0442\u0440\u044b. \u042d\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0445\u043e\u0434\u0435 \u0438\u0433\u0440\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 <br \/>  \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u0415\u0441\u043b\u0438 \u0432\u044b \u0441 \u044d\u0442\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u0435\u0441\u044c, \u0442\u043e \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u043c\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0410 \u043a\u0430\u043a \u043d\u0430\u0441\u0447\u0451\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 Unity \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0432 \u043f\u043e\u0442\u043e\u043a. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043a\u0440\u044b\u0442\u044b \u043e\u0442 \u043d\u0430\u0441. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438. \u041e\u043d\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 <code>MonoBehaviour<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0442\u0430\u043a \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043e\u043d\u0430 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 \u043d\u0430\u0441 \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u0414\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCell<\/code> \u043c\u0435\u0442\u043e\u0434\u044b <code>Save<\/code> \u0438 <code>Load<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u043c \u043d\u0443\u0436\u0435\u043d writer \u0438\u043b\u0438 reader, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0445 \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b.<\/p>\n<pre><code class=\"cs\">using UnityEngine; using System.IO;  public class HexCell : MonoBehaviour { \t \t\u2026 \t \tpublic void Save (BinaryWriter writer) { \t}  \tpublic void Load (BinaryReader reader) { \t} }<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u044b <code>Save<\/code> \u0438 <code>Load<\/code> \u0438 \u0432 <code>HexGrid<\/code>. \u042d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u044f \u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u044b <code>Load<\/code> \u0438 <code>Save<\/code>.<\/p>\n<pre><code class=\"cs\">using UnityEngine; using UnityEngine.UI; using System.IO;  public class HexGrid : MonoBehaviour {  \t\u2026  \tpublic void Save (BinaryWriter writer) { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Save(writer); \t\t} \t}  \tpublic void Load (BinaryReader reader) { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Load(reader); \t\t} \t} }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043a\u0430\u0440\u0442\u0443, \u0435\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u0431\u044b\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u0432\u0441\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader) { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Load(reader); \t\t} \t\tfor (int i = 0; i &lt; chunks.Length; i++) { \t\t\tchunks[i].Refresh(); \t\t} \t}<\/code><\/pre>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043d\u0430\u0448 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0432 <code>HexMapEditor<\/code> \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>Save<\/code> \u0438 <code>Load<\/code> \u0441\u0435\u0442\u043a\u0438, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0441 \u043d\u0438\u043c\u0438 writer \u0438\u043b\u0438 reader.<\/p>\n<pre><code class=\"cs\">\tpublic void Save () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing ( \t\t\tBinaryWriter writer = \t\t\t\tnew BinaryWriter(File.Open(path, FileMode.Create)) \t\t) { \t\t\thexGrid.Save(writer); \t\t} \t}  \tpublic void Load () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t\thexGrid.Load(reader); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430<\/h3>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b, \u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0438\u0447\u0435\u0433\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e, \u0441 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 <code>HexCell<\/code>.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044e <code>terrainTypeIndex<\/code>. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u0432\u0441\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b, \u0432\u044b\u0437\u043e\u0432\u044b <code>Refresh<\/code> \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u0442\u043e\u0436\u0435 \u0432\u0435\u0440\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u0430 \u043b\u0438 \u0440\u0435\u043a\u0430 \u0438\u043b\u0438 \u0434\u043e\u0440\u043e\u0433\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic void Save (BinaryWriter writer) { \t\twriter.Write(terrainTypeIndex); \t} \t \tpublic void Load (BinaryReader reader) { \t\tterrainTypeIndex = reader.ReadInt32(); \t}<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043e\u0434\u0438\u043d \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a. \u0422\u0430\u043a \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f integer, \u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0430\u0432\u0435\u043d \u0447\u0435\u0442\u044b\u0440\u0451\u043c \u0431\u0430\u0439\u0442\u0430\u043c. \u041c\u043e\u044f \u043a\u0430\u0440\u0442\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 300 \u044f\u0447\u0435\u0435\u043a, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c 1200 \u0431\u0430\u0439\u0442.<\/p>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432 \u043a\u0430\u043a\u043e\u043c \u043e\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b. \u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0438 \u0446\u0432\u0435\u0442\u0430 \u044f\u0447\u0435\u0435\u043a \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u044b \u0432\u0435\u0440\u043d\u0451\u0442 \u0446\u0432\u0435\u0442\u0430 \u043a \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a \u043e\u0441\u0442\u0430\u043d\u0443\u0442\u0441\u044f \u0442\u0435\u043c\u0438 \u0436\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0438\u043f \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043d\u043e \u043d\u0435 \u0435\u0433\u043e \u0432\u044b\u0441\u043e\u0442\u0443, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0438 \u0442.\u0434.<\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 Integer<\/h3>\n<p>  \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043d\u0430\u043c \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041d\u0443\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441\u043e \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u0435\u0439 integer. \u042d\u0442\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u0432\u044b\u0441\u043e\u0442\u0430 \u044f\u0447\u0435\u0439\u043a\u0438, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432\u043e\u0434\u044b, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0433\u043e\u0440\u043e\u0434\u043e\u0432, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0444\u0435\u0440\u043c, \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0440\u0430\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441 \u043e\u0441\u043e\u0431\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432 \u043a\u0430\u043a\u043e\u043c \u043e\u043d\u0438 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<pre><code class=\"cs\">\tpublic void Save (BinaryWriter writer) { \t\twriter.Write(terrainTypeIndex); \t\twriter.Write(elevation); \t\twriter.Write(waterLevel); \t\twriter.Write(urbanLevel); \t\twriter.Write(farmLevel); \t\twriter.Write(plantLevel); \t\twriter.Write(specialIndex); \t}  \tpublic void Load (BinaryReader reader) { \t\tterrainTypeIndex = reader.ReadInt32(); \t\televation = reader.ReadInt32(); \t\twaterLevel = reader.ReadInt32(); \t\turbanLevel = reader.ReadInt32(); \t\tfarmLevel = reader.ReadInt32(); \t\tplantLevel = reader.ReadInt32(); \t\tspecialIndex = reader.ReadInt32(); \t}<\/code><\/pre>\n<p>  \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0443, \u0432\u043d\u0435\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412\u0441\u0451, \u0447\u0442\u043e \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u043e\u0441\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c\u043d\u0443\u0436\u043d\u043e, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0443\u0440\u043e\u0432\u043d\u044f \u0432\u044b\u0441\u043e\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0432 \u0435\u0451 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443, \u0430 \u043d\u0435 \u043f\u043e\u043b\u044e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0441\u043e\u0442\u044b. \u041d\u043e \u044d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043c \u0438\u0437 \u0441\u0435\u0442\u0442\u0435\u0440\u0430 <code>Elevation<\/code> \u043a\u043e\u0434, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u044f\u0447\u0435\u0439\u043a\u0438 \u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>RefreshPosition<\/code>. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u043d\u0443\u0436\u043d\u043e \u0432\u043d\u0435\u0441\u0442\u0438 \u2014 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c <code>value<\/code> \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u043f\u043e\u043b\u0435 <code>elevation<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid RefreshPosition () { \t\tVector3 position = transform.localPosition; \t\tposition.y = elevation * HexMetrics.elevationStep; \t\tposition.y += \t\t\t(HexMetrics.SampleNoise(position).y * 2f - 1f) * \t\t\tHexMetrics.elevationPerturbStrength; \t\ttransform.localPosition = position;  \t\tVector3 uiPosition = uiRect.localPosition; \t\tuiPosition.z = -position.y; \t\tuiRect.localPosition = uiPosition; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u0438 \u0437\u0430\u0434\u0430\u043d\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0441\u043e\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic int Elevation { \t\t\u2026 \t\tset { \t\t\tif (elevation == value) { \t\t\t\treturn; \t\t\t} \t\t\televation = value; \t\t\tRefreshPosition(); \t\t\tValidateRivers(); \t\t\t \t\t\t\u2026 \t\t} \t} \t \t\u2026 \t \tpublic void Load (BinaryReader reader) { \t\tterrainTypeIndex = reader.ReadInt32(); \t\televation = reader.ReadInt32(); \t\tRefreshPosition(); \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044f\u0447\u0435\u0439\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0432\u043e\u044e \u0432\u0438\u0434\u0438\u043c\u0443\u044e \u0432\u044b\u0441\u043e\u0442\u0443.<\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>  \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u044f\u0447\u0435\u0439\u043a\u0435 \u0441\u0442\u0435\u043d \u0438 \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439\/\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0440\u0435\u043a \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u043f\u043e\u043b\u044f\u0445. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u043a integer. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043e\u0440\u043e\u0433 \u2014 \u044d\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0446\u0438\u043a\u043b\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic void Save (BinaryWriter writer) { \t\twriter.Write(terrainTypeIndex); \t\twriter.Write(elevation); \t\twriter.Write(waterLevel); \t\twriter.Write(urbanLevel); \t\twriter.Write(farmLevel); \t\twriter.Write(plantLevel); \t\twriter.Write(specialIndex); \t\twriter.Write(walled);  \t\twriter.Write(hasIncomingRiver); \t\twriter.Write(hasOutgoingRiver);  \t\tfor (int i = 0; i &lt; roads.Length; i++) { \t\t\twriter.Write(roads[i]); \t\t} \t}<\/code><\/pre>\n<p>  \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0438 \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0440\u0435\u043a \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u043e\u043b\u044f\u0445 <code>HexDirection<\/code>. \u0422\u0438\u043f <code>HexDirection<\/code> \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u043d\u0443\u0442\u0440\u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 integer. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0442\u043e\u0436\u0435 \u043a\u0430\u043a integer \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044f\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\t\twriter.Write(hasIncomingRiver); \t\twriter.Write((int)incomingRiver);  \t\twriter.Write(hasOutgoingRiver); \t\twriter.Write((int)outgoingRiver);<\/code><\/pre>\n<p>  \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>BinaryReader.ReadBoolean<\/code>. \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043a \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f integer, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 <code>HexDirection<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader) { \t\tterrainTypeIndex = reader.ReadInt32(); \t\televation = reader.ReadInt32(); \t\tRefreshPosition(); \t\twaterLevel = reader.ReadInt32(); \t\turbanLevel = reader.ReadInt32(); \t\tfarmLevel = reader.ReadInt32(); \t\tplantLevel = reader.ReadInt32(); \t\tspecialIndex = reader.ReadInt32(); \t\twalled = reader.ReadBoolean();  \t\thasIncomingRiver = reader.ReadBoolean(); \t\tincomingRiver = (HexDirection)reader.ReadInt32();  \t\thasOutgoingRiver = reader.ReadBoolean(); \t\toutgoingRiver = (HexDirection)reader.ReadInt32();  \t\tfor (int i = 0; i &lt; roads.Length; i++) { \t\t\troads[i] = reader.ReadBoolean(); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0434\u0435\u0432\u044f\u0442\u044c integer \u0438 \u0434\u0435\u0432\u044f\u0442\u044c \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443. \u041a\u0430\u0436\u0434\u043e\u0435 \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435\u0433\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c 45 \u0431\u0430\u0439\u0442 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u0441 300 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432 \u0446\u0435\u043b\u043e\u043c 13 500 \u0431\u0430\u0439\u0442.<\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-12\/writing-and-reading-map-data\/writing-and-reading-map-data.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430<\/h2>\n<p>  \u0425\u043e\u0442\u044f \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e 13 500 \u0431\u0430\u0439\u0442 \u2014 \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0434\u043b\u044f 300 \u044f\u0447\u0435\u0435\u043a, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c. \u0412 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u0442\u0435\u043c, \u043a\u0430\u043a \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0430\u0439\u0434\u0451\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0445 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h3>\u0421\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430<\/h3>\n<p>  \u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044f\u0447\u0435\u0435\u043a \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u0430\u043a integer. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 0\u2013255. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e integer. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0440\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e. \u041d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u044d\u0442\u0438 \u043f\u0443\u0441\u0442\u044b\u0435 \u0431\u0430\u0439\u0442\u044b. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0445, \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u043f\u043e\u0442\u043e\u043a \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0432 integer \u0432 byte.<\/p>\n<pre><code class=\"cs\">\t\twriter.Write((byte)terrainTypeIndex); \t\twriter.Write((byte)elevation); \t\twriter.Write((byte)waterLevel); \t\twriter.Write((byte)urbanLevel); \t\twriter.Write((byte)farmLevel); \t\twriter.Write((byte)plantLevel); \t\twriter.Write((byte)specialIndex); \t\twriter.Write(walled);  \t\twriter.Write(hasIncomingRiver); \t\twriter.Write((byte)incomingRiver);  \t\twriter.Write(hasOutgoingRiver); \t\twriter.Write((byte)outgoingRiver);<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u044d\u0442\u0438 \u0447\u0438\u0441\u043b\u0430, \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>BinaryReader.ReadByte<\/code>. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 byte \u0432 integer \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u044f\u0432\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044f\u0432\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\t\tterrainTypeIndex = reader.ReadByte(); \t\televation = reader.ReadByte(); \t\tRefreshPosition(); \t\twaterLevel = reader.ReadByte(); \t\turbanLevel = reader.ReadByte(); \t\tfarmLevel = reader.ReadByte(); \t\tplantLevel = reader.ReadByte(); \t\tspecialIndex = reader.ReadByte(); \t\twalled = reader.ReadBoolean();  \t\thasIncomingRiver = reader.ReadBoolean(); \t\tincomingRiver = (HexDirection)reader.ReadByte();  \t\thasOutgoingRiver = reader.ReadBoolean(); \t\toutgoingRiver = (HexDirection)reader.ReadByte();<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043c\u044b \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u0442\u0440\u0451\u0445 \u0431\u0430\u0439\u0442 \u043d\u0430 integer, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044e \u0432 27 \u0431\u0430\u0439\u0442 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0442\u0440\u0430\u0442\u0438\u043c 18 \u0431\u0430\u0439\u0442 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443, \u0438 \u0432\u0441\u0435\u0433\u043e 5 400 \u0431\u0430\u0439\u0442 \u043d\u0430 300 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0430\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0431\u0435\u0441\u0441\u043c\u044b\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438. \u041f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u043c\u0438 \u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0435\u043c \u0440\u0430\u043d\u044c\u0448\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u044b \u043e\u0448\u0438\u0431\u043a\u0443 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043a\u043e\u043d\u0446\u0430 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0442\u0430\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u0441 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u0431\u0443\u0434\u0443\u0449\u0438\u0439 \u043a\u043e\u0434 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0433 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0444\u043e\u0440\u043c\u0430\u0442, \u0442\u043e \u0432 \u0438\u0434\u0435\u0430\u043b\u0435 \u0443 \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438 \u0441\u0442\u0430\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<h3>\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043e\u0432 \u0440\u0435\u043a<\/h3>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u043a \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430, \u043f\u043e \u0434\u0432\u0430 \u043d\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0440\u0435\u043a\u0438 \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0430 \u0442\u0435\u0447\u0451\u0442<\/p>\n<p>  \u041a\u0430\u0436\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043a\u0438, \u0435\u0441\u043b\u0438 \u0435\u0451 \u043d\u0435\u0442. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0430\u043c \u0431\u0435\u0437 \u0440\u0435\u043a\u0438 \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u043c\u0435\u043d\u044c\u0448\u0435. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u0430\u0439\u0442\u0443 \u043d\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u043a\u0438, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0435\u0451 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0448\u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 0\u20135. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0451\u0445 \u0431\u0438\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0447\u0438\u0441\u043b\u0430 \u043e\u0442 0 \u0434\u043e 5 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a 000, 001, 010, 011, 100, 101 \u0438 110. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u0431\u0430\u0439\u0442\u0435 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0435\u0449\u0451 \u043f\u044f\u0442\u044c \u0431\u0438\u0442. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u0434\u043b\u044f \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u043e\u0433\u043e, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438 \u0440\u0435\u043a\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043e\u0441\u044c\u043c\u043e\u0439 \u0431\u0438\u0442, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0447\u0438\u0441\u043b\u0443 128.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u043c \u043f\u0435\u0440\u0435\u0434 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0439\u0442 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043a \u043d\u0435\u043c\u0443 128. \u0422\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u0430, \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043d\u0430 \u0441\u0435\u0432\u0435\u0440\u043e-\u0437\u0430\u043f\u0430\u0434, \u0442\u043e \u043c\u044b \u0437\u0430\u043f\u0438\u0448\u0435\u043c 133, \u0447\u0442\u043e \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u0435 \u0440\u0430\u0432\u043d\u043e 10000101. \u0410 \u0435\u0441\u043b\u0438 \u0440\u0435\u043a\u0438 \u043d\u0435\u0442, \u0442\u043e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0438\u0448\u0435\u043c \u043d\u0443\u043b\u0435\u0432\u043e\u0439 \u0431\u0430\u0439\u0442.<\/p>\n<p>  \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443 \u043d\u0430\u0441 \u043e\u0441\u0442\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0435\u0449\u0451 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0438\u0442\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u043e\u0431\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u043a\u0438 \u0432 \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442, \u043d\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u043e.<\/p>\n<pre><code class=\"cs\">\/\/\t\twriter.Write(hasIncomingRiver); \/\/\t\twriter.Write((byte)incomingRiver); \t\tif (hasIncomingRiver) { \t\t\twriter.Write((byte)(incomingRiver + 128)); \t\t} \t\telse { \t\t\twriter.Write((byte)0); \t\t}  \/\/\t\twriter.Write(hasOutgoingRiver); \/\/\t\twriter.Write((byte)outgoingRiver); \t\tif (hasOutgoingRiver) { \t\t\twriter.Write((byte)(outgoingRiver + 128)); \t\t} \t\telse { \t\t\twriter.Write((byte)0); \t\t}<\/code><\/pre>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u043a\u0438, \u043d\u0430\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0431\u0430\u0439\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 128, \u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0440\u0435\u043a\u0430 \u0435\u0441\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0451 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0432\u044b\u0447\u0442\u0435\u043c 128, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0432 <code>HexDirection<\/code>.<\/p>\n<pre><code class=\"cs\">\/\/\t\thasIncomingRiver = reader.ReadBoolean(); \/\/\t\tincomingRiver = (HexDirection)reader.ReadByte(); \t\tbyte riverData = reader.ReadByte(); \t\tif (riverData &gt;= 128) { \t\t\thasIncomingRiver = true; \t\t\tincomingRiver = (HexDirection)(riverData - 128); \t\t} \t\telse { \t\t\thasIncomingRiver = false; \t\t}  \/\/\t\thasOutgoingRiver = reader.ReadBoolean(); \/\/\t\toutgoingRiver = (HexDirection)reader.ReadByte(); \t\triverData = reader.ReadByte(); \t\tif (riverData &gt;= 128) { \t\t\thasOutgoingRiver = true; \t\t\toutgoingRiver = (HexDirection)(riverData - 128); \t\t} \t\telse { \t\t\thasOutgoingRiver = false; \t\t}<\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 16 \u0431\u0430\u0439\u0442 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443. \u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043d\u043e \u044d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0442\u0435\u0445 \u0442\u0440\u044e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433 \u0432 \u043e\u0434\u043d\u043e\u043c \u0431\u0430\u0439\u0442\u0435<\/h3>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u0442\u0440\u044e\u043a \u0434\u043b\u044f \u0441\u0436\u0430\u0442\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u0440\u043e\u0433. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0448\u0435\u0441\u0442\u044c \u0431\u0443\u043b\u0435\u0432\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0448\u0435\u0441\u0442\u0438 \u0431\u0438\u0442\u0430\u0445 \u0431\u0430\u0439\u0442\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0435 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0447\u0438\u0441\u043b\u043e\u043c, \u044f\u0432\u043b\u044f\u044e\u0449\u0438\u043c\u0441\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e \u0434\u0432\u043e\u0439\u043a\u0438. \u042d\u0442\u043e 1, 2, 4, 8, 16 \u0438 32, \u0438\u043b\u0438 \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435 1, 10, 100, 1000, 10000 \u0438 100000.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0431\u0430\u0439\u0442, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0431\u0438\u0442\u044b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c \u0434\u043e\u0440\u043e\u0433. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>&lt;&lt;<\/code>. \u0417\u0430\u0442\u0435\u043c \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0438\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0418\u041b\u0418. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0430\u044f, \u0432\u0442\u043e\u0440\u0430\u044f, \u0442\u0440\u0435\u0442\u044c\u044f \u0438 \u0448\u0435\u0441\u0442\u0430\u044f \u0434\u043e\u0440\u043e\u0433\u0438, \u0442\u043e \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d 100111.<\/p>\n<pre><code class=\"cs\">\t\tint roadFlags = 0; \t\tfor (int i = 0; i &lt; roads.Length; i++) { \/\/\t\t\twriter.Write(roads[i]); \t\t\tif (roads[i]) { \t\t\t\troadFlags |= 1 &lt;&lt; i; \t\t\t} \t\t} \t\twriter.Write((byte)roadFlags);<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 &lt;&lt;?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430 \u0432\u043b\u0435\u0432\u043e. \u041e\u043d \u0431\u0435\u0440\u0451\u0442 integer \u0441\u043b\u0435\u0432\u0430 \u0438 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0431\u0438\u0442\u044b \u0432\u043b\u0435\u0432\u043e. \u041f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0448\u0430\u0433\u043e\u0432 \u0441\u0434\u0432\u0438\u0433\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f integer \u0441\u043f\u0440\u0430\u0432\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0447\u0438\u0441\u043b\u0430 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435, \u0441\u0434\u0432\u0438\u0433 \u0432\u0441\u0435\u0445 \u0431\u0438\u0442\u043e\u0432 \u043d\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0432\u043b\u0435\u0432\u043e \u0443\u0434\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430. \u0422\u043e \u0435\u0441\u0442\u044c <code>1 &lt;&lt; n<\/code> \u0434\u0430\u0451\u0442 2<sup>n<\/sup>, \u0447\u0442\u043e \u043d\u0430\u043c \u0438 \u043d\u0443\u0436\u043d\u043e.<\/div>\n<\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u0443\u043b\u0435\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0440\u043e\u0433\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e, \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0437\u0430\u0434\u0430\u043d \u043b\u0438 \u0431\u0438\u0442. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u043c\u0430\u0441\u043a\u0438\u0440\u0443\u0435\u043c \u0432\u0441\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u0438\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0431\u0438\u0442\u043e\u0432\u043e\u0433\u043e \u0418 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c. \u0415\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e, \u0442\u043e \u0431\u0438\u0442 \u0437\u0430\u0434\u0430\u043d \u0438 \u0434\u043e\u0440\u043e\u0433\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442.<\/p>\n<pre><code class=\"cs\">\t\tint roadFlags = reader.ReadByte(); \t\tfor (int i = 0; i &lt; roads.Length; i++) { \t\t\troads[i] = (roadFlags &amp; (1 &lt;&lt; i)) != 0; \t\t}<\/code><\/pre>\n<p>  \u0421\u0436\u0430\u0432 \u0448\u0435\u0441\u0442\u044c \u0431\u0430\u0439\u0442 \u0432 \u043e\u0434\u0438\u043d, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 11 \u0431\u0430\u0439\u0442 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443. \u041f\u0440\u0438 300 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e 3 300 \u0431\u0430\u0439\u0442. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0432 \u0441 \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u043c\u044b \u0441\u043d\u0438\u0437\u0438\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 75%.<\/p>\n<h3>\u0413\u043e\u0442\u043e\u0432\u0438\u043c\u0441\u044f \u043a \u0431\u0443\u0434\u0443\u0449\u0435\u043c\u0443<\/h3>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043e\u0431\u044a\u044f\u0432\u0438\u0442\u044c \u043d\u0430\u0448 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u044b\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0434\u0435\u0442\u0430\u043b\u044c. \u041f\u0435\u0440\u0435\u0434 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u0430\u0440\u0442\u044b \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043c <code>HexMapEditor<\/code> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u043e\u043b\u044c.<\/p>\n<pre><code class=\"cs\">\tpublic void Save () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing ( \t\t\tBinaryWriter writer = \t\t\t\tnew BinaryWriter(File.Open(path, FileMode.Create)) \t\t) { \t\t\twriter.Write(0); \t\t\thexGrid.Save(writer); \t\t} \t}<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u043d\u0430\u0448\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0443\u0441\u0442\u044b\u0445 \u0431\u0430\u0439\u0442\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic void Load () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t\treader.ReadInt32(); \t\t\thexGrid.Load(reader); \t\t} \t}<\/code><\/pre>\n<p>  \u0425\u043e\u0442\u044f \u043f\u043e\u043a\u0430 \u044d\u0442\u0438 \u0431\u0430\u0439\u0442\u044b \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b, \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u044d\u0442\u0438 \u043d\u0443\u043b\u0435\u0432\u044b\u0435 \u0431\u0430\u0439\u0442\u044b, \u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u0435\u0440\u0432\u044b\u0445 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0430\u0439\u0442\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0435\u043b\u043e \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a\u0430\u0440\u0442\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0442\u0440\u0443\u0434\u043d\u0435\u0435 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0441 \u043a\u0430\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0431\u0430\u0439\u0442\u0430. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u0443\u0441\u0442\u044b\u0435, \u0442\u043e \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 0. \u0412 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u0447\u0442\u043e-\u0442\u043e \u0435\u0449\u0451.<\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u0435\u043d\u0443\u043b\u0435\u0432\u043e\u0439, \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0441 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t\tint header = reader.ReadInt32(); \t\t\tif (header == 0) { \t\t\t\thexGrid.Load(reader); \t\t\t} \t\t\telse { \t\t\t\tDebug.LogWarning(\"Unknown map format \" + header); \t\t\t} \t\t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-12\/smaller-file-size\/smaller-file-size.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 13: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u0430\u043c\u0438<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u044b\u0435 \u043a\u0430\u0440\u0442\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play.<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442.<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b \u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.<\/li>\n<li>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b.<\/li>\n<li>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0440\u0442.<\/li>\n<\/ul>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044d\u0442\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 Unity 5.5.0.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/abd\/9e2\/1e4\/abd9e21e467d0b291c33f4ad31e96c51.jpg\"><\/div>\n<p>  <i><a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-13\/large-island.map\">\u041d\u0430\u0447\u0430\u043b\u043e<\/a> \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u0430\u0440\u0442.<\/i><\/p>\n<h2>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442<\/h2>\n<p>  \u0414\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0441\u0435\u0442\u043a\u0443 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u2014 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0446\u0435\u043d\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041d\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0443\u044e.<\/p>\n<p>  \u0412 Awake <code>HexGrid<\/code> \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0447\u0435\u0435\u043a \u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0438 \u044f\u0447\u0435\u0439\u043a\u0438. \u0421\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043d\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u044f\u0447\u0435\u0435\u043a, \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c <code>HexGrid.Awake<\/code> \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438 \u2014 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u043e\u0431\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <code>CreateMap<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource; \t\tHexMetrics.InitializeHashGrid(seed); \t\tHexMetrics.colors = colors; \t\tCreateMap(); \t}  \tpublic void CreateMap () { \t\tcellCountX = chunkCountX * HexMetrics.chunkSizeX; \t\tcellCountZ = chunkCountZ * HexMetrics.chunkSizeZ; \t\tCreateChunks(); \t\tCreateCells(); \t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UI \u043a\u043d\u043e\u043f\u043a\u0443 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u0435\u0451 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b \u043f\u043e\u0434 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/203\/c02\/ff4\/203c02ff4ca668836064c72ad770328c.png\"><\/div>\n<p>  <i>\u041a\u043d\u043e\u043f\u043a\u0430 New Map.<\/i><\/p>\n<p>  \u0421\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <em>On Click<\/em> \u044d\u0442\u043e\u0439 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>CreateMap<\/code> \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>HexGrid<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 <em>Hex Map Editor<\/em>, \u0430 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>Hex Grid<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/36a\/d04\/a3e\/36ad04a3ebf94b00faf7aebe8c783b2f.png\"><\/div>\n<p>  <i>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u0430\u0440\u0442\u044b \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e.<\/i><\/p>\n<h3>\u041e\u0447\u0438\u0441\u0442\u043a\u0430 \u0441\u0442\u0430\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 <em>New Map<\/em> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u044f\u0447\u0435\u0435\u043a. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u0430\u0440\u044b\u0435 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u043c\u0435\u0448\u0435\u0439 \u043a\u0430\u0440\u0442\u044b. \u0427\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u044d\u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0441\u0442\u0430\u0440\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u044f \u0432\u0441\u0435 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 <code>CreateMap<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void CreateMap () { \t\tif (chunks != null) { \t\t\tfor (int i = 0; i &lt; chunks.Length; i++) { \t\t\t\tDestroy(chunks[i].gameObject); \t\t\t} \t\t}  \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0437\u0430\u043d\u043e\u0432\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b?<\/b><\/p>\n<div class=\"spoiler_text\">\u042d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u043d\u043e\u0432\u044b\u0445 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u044f\u0447\u0435\u0435\u043a \u043f\u0440\u043e\u0449\u0435 \u0432\u0441\u0435\u0433\u043e. \u042d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u2014 \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u0430.<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0430\u0442\u044c \u0442\u0430\u043a \u0432 \u0446\u0438\u043a\u043b\u0435 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b?<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u043e\u043d\u0435\u0447\u043d\u043e. \u0421\u0430\u043c\u043e \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0444\u0430\u0437\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0434\u0440\u0430.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0423\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432<\/h3>\n<p>  \u041f\u043e\u043a\u0430 \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u044f <code>chunkCountX<\/code> \u0438 <code>chunkCountZ<\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>HexGrid<\/code>. \u041d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b \u0432 \u044f\u0447\u0435\u0439\u043a\u0430\u0445. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0434\u0430\u0436\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u043e\u043b\u044f\u043c\u0438 \u043f\u043e\u043b\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0435\u043a \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic int chunkCountX = 4, chunkCountZ = 3; \tpublic int cellCountX = 20, cellCountZ = 15;  \t\u2026  \/\/\tint cellCountX, cellCountZ; \tint chunkCountX, chunkCountZ;  \t\u2026 \t \tpublic void CreateMap () { \t\t\u2026  \/\/\t\tcellCountX = chunkCountX * HexMetrics.chunkSizeX; \/\/\t\tcellCountZ = chunkCountZ * HexMetrics.chunkSizeZ; \t\tchunkCountX = cellCountX \/ HexMetrics.chunkSizeX; \t\tchunkCountZ = cellCountZ \/ HexMetrics.chunkSizeZ; \t\tCreateChunks(); \t\tCreateCells(); \t}<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043b\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 <code>HexMapCamera<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>HexMapCamera.ClampPosition<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0447\u0435\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<pre><code class=\"cs\">\tVector3 ClampPosition (Vector3 position) { \t\tfloat xMax = (grid.cellCountX - 0.5f) * (2f * HexMetrics.innerRadius); \t\tposition.x = Mathf.Clamp(position.x, 0f, xMax);  \t\tfloat zMax = (grid.cellCountZ - 1) * (1.5f * HexMetrics.outerRadius); \t\tposition.z = Mathf.Clamp(position.z, 0f, zMax);  \t\treturn position; \t}<\/code><\/pre>\n<p>  \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 5 \u043d\u0430 5 \u044f\u0447\u0435\u0435\u043a, \u0430 \u043a\u0430\u0440\u0442\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 4 \u043d\u0430 3 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0440\u0442\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435, \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 20 \u043d\u0430 15 \u044f\u0447\u0435\u0435\u043a. \u0418 \u0445\u043e\u0442\u044f \u043c\u044b \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u043a\u043e\u0434\u0435, \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0435\u0442\u043a\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043b\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/399\/2e3\/da6\/3992e3da66fb278c396e15a3d339707a.png\"><\/div>\n<p>  <i>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043a\u0430\u0440\u0442\u0430 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 20 \u043d\u0430 15.<\/i><\/p>\n<h3>\u041f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043a\u0430\u0440\u0442<\/h3>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>HexGrid.CreateMap<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b X \u0438 Z. \u041e\u043d\u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0435\u043a. \u0412\u043d\u0443\u0442\u0440\u0438 <code>Awake<\/code> \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0445 \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource; \t\tHexMetrics.InitializeHashGrid(seed); \t\tHexMetrics.colors = colors; \t\tCreateMap(cellCountX, cellCountZ); \t}  \tpublic void CreateMap (int x, int z) { \t\t\u2026  \t\tcellCountX = x; \t\tcellCountZ = z; \t\tchunkCountX = cellCountX \/ HexMetrics.chunkSizeX; \t\tchunkCountZ = cellCountZ \/ HexMetrics.chunkSizeZ; \t\tCreateChunks(); \t\tCreateCells(); \t}<\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u044f\u0447\u0435\u0435\u043a, \u043a\u0440\u0430\u0442\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0430\u043b\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0440\u0435\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b, \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430\u043c.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>%<\/code> \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u0441\u0442\u0430\u0442\u043a\u0430 \u043e\u0442 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044f\u0447\u0435\u0435\u043a \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e, \u0442\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0438 \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u0418 \u043f\u043e\u043a\u0430 \u043c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f \u044d\u0442\u0438\u043c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tpublic void CreateMap (int x, int z) { \t\tif ( \t\t\tx &lt;= 0 || x % HexMetrics.chunkSizeX != 0 || \t\t\tz &lt;= 0 || z % HexMetrics.chunkSizeZ != 0 \t\t) { \t\t\tDebug.LogError(\"Unsupported map size.\"); \t\t\treturn; \t\t} \t\t \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041c\u0435\u043d\u044e \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442<\/h3>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u043a\u043d\u043e\u043f\u043a\u0430 <em>New Map<\/em> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 <code>HexGrid.CreateMap<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f Unity \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043a\u0430\u0440\u0442 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043d\u043e\u043f\u043e\u043a. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 UI, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u0446\u0435\u043d\u0443 \u043d\u043e\u0432\u044b\u0439 canvas (<em>GameObject \/ UI \/ Canvas<\/em>). \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0442\u0435\u043c\u0438 \u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438, \u0447\u0442\u043e \u0438 \u0443 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e canvas, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0435\u0433\u043e <em>Sort Order<\/em> \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d 1. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043e\u043d \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0435\u0440\u0445 UI \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. \u042f \u0441\u0434\u0435\u043b\u0430\u043b \u043e\u0431\u0430 canvas \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 UI, \u0447\u0442\u043e\u0431\u044b \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0441\u0446\u0435\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0430\u0441\u044c \u0447\u0438\u0441\u0442\u043e\u0439.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c91\/6c5\/c2c\/c916c5c2cee3f58576b12ac1a052bd64.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3be\/a8b\/79b\/3bea8b79bae11a493aea43590394b0a3.png\"><\/div>\n<p>  <i>Canvas \u043c\u0435\u043d\u044e New Map.<\/i><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a <em>New Map Menu<\/em> \u043f\u0430\u043d\u0435\u043b\u044c, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d. \u041e\u043d\u0430 \u043d\u0443\u0436\u043d\u0430, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0442\u0435\u043c\u043d\u0438\u0442\u044c \u0444\u043e\u043d \u0438 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u043a\u0443\u0440\u0441\u043e\u0440\u0443 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u0435\u043d\u044e \u043e\u0442\u043a\u0440\u044b\u0442\u043e. \u042f \u043f\u0440\u0438\u0434\u0430\u043b \u0435\u0439 \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u0446\u0432\u0435\u0442, \u043e\u0447\u0438\u0441\u0442\u0438\u0432 \u0435\u0451 <em>Source Image<\/em>, \u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 <em>Color<\/em> \u0437\u0430\u0434\u0430\u043b (0, 0, 0, 200).<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/16c\/1f0\/a4f\/16c1f0a4f31e0769099b845794a83b4a.png\"><\/div>\n<p>  <i>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0444\u043e\u043d\u043e\u0432\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/i><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0446\u0435\u043d\u0442\u0440 canvas \u043f\u0430\u043d\u0435\u043b\u044c \u043c\u0435\u043d\u044e, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u0430\u043d\u0435\u043b\u044f\u043c <em>Hex Map Editor<\/em>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0439 \u043f\u043e\u043d\u044f\u0442\u043d\u0443\u044e \u043c\u0435\u0442\u043a\u0443 \u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043b\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439, \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0430\u0440\u0442. \u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0439 \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0442\u043c\u0435\u043d\u044b \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439, \u0435\u0441\u043b\u0438 \u0438\u0433\u0440\u043e\u043a \u043f\u0435\u0440\u0435\u0434\u0443\u043c\u0430\u0435\u0442. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u0432\u0435\u0441\u044c <em>New Map Menu<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c0a\/0d9\/584\/c0a0d95847337d91b97a823312c98a43.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/917\/3a1\/7c3\/9173a17c38f4c6e35f258c407b44d710.png\"><\/div>\n<p>  <i>\u041c\u0435\u043d\u044e New Map.<\/i><\/p>\n<p>  \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u043d\u044e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>NewMapMenu<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 canvas <em>New Map Menu<\/em>. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 <em>Hex Grid<\/em>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u043c\u0443 \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043b\u0435 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"cs\">using UnityEngine;  public class NewMapMenu : MonoBehaviour {  \tpublic HexGrid hexGrid; }<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f7d\/a25\/c3e\/f7da25c3ed3ebf12ba9f4785b19ec8e1.png\"><\/div>\n<p>  <i>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 New Map Menu.<\/i><\/p>\n<h3>\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435<\/h3>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e, \u043f\u0440\u043e\u0441\u0442\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044f \u0438 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u044f \u043e\u0431\u044a\u0435\u043a\u0442 canvas. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>NewMapMenu<\/code> \u0434\u0432\u0430 \u043e\u0431\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u0438\u043c \u0437\u0430\u0439\u043c\u0443\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic void Open () { \t\tgameObject.SetActive(true); \t}  \tpublic void Close () { \t\tgameObject.SetActive(false); \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 <em>New Map<\/em> UI \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 <code>Open<\/code> \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <em>New Map Menu<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b84\/100\/590\/b841005902c164f5eb1dcab4f39c4221.png\"><\/div>\n<p>  <i>\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043c\u0435\u043d\u044e \u043f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e.<\/i><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 <em>Cancel<\/em> \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>Close<\/code>. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442<\/h3>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 <em>Hex Grid<\/em> \u043c\u0435\u0442\u043e\u0434 <code>CreateMap<\/code>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a <code>NewMapMenu<\/code> \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0439\u043c\u0451\u0442\u0441\u044f \u044d\u0442\u0438\u043c \u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid CreateMap (int x, int z) { \t\thexGrid.CreateMap(x, z); \t\tClose(); \t}<\/code><\/pre>\n<p>  \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0431\u0449\u0438\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 \u043a\u043d\u043e\u043f\u043e\u043a. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c <code>CreateMap<\/code> \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c. \u0414\u043b\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0440\u0430\u0437\u043c\u0435\u0440 20 \u043d\u0430 15, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u0430\u0440\u0442\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0414\u043b\u044f \u0441\u0440\u0435\u0434\u043d\u0435\u0439 \u043a\u0430\u0440\u0442\u044b \u044f \u0440\u0435\u0448\u0438\u043b \u0443\u0434\u0432\u043e\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u043e\u043b\u0443\u0447\u0438\u0432 40 \u043d\u0430 30, \u0438 \u0441\u043d\u043e\u0432\u0430 \u0443\u0434\u0432\u043e\u0438\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u0430\u0440\u0442\u044b. \u0421\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0438 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void CreateSmallMap () { \t\tCreateMap(20, 15); \t}  \tpublic void CreateMediumMap () { \t\tCreateMap(40, 30); \t}  \tpublic void CreateLargeMap () { \t\tCreateMap(80, 60); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0411\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0430 \u043a\u0430\u043c\u0435\u0440\u044b<\/h3>\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 \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442 \u0441 \u0442\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438! \u0412\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0434\u0435\u0442\u0430\u043b\u0438. \u041a\u043e\u0433\u0434\u0430 <em>New Map Menu<\/em> \u0430\u043a\u0442\u0438\u0432\u043d\u043e, \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441 UI \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u043e\u0439. \u0412 \u0438\u0434\u0435\u0430\u043b\u0435 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u043c\u0435\u043d\u044e \u043a\u0430\u043c\u0435\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u043c\u0435\u0440\u0430 \u0443 \u043d\u0430\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430, \u0431\u044b\u0441\u0442\u0440\u044b\u043c \u0438 \u043f\u0440\u0430\u0433\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Locked<\/code>. \u0414\u043b\u044f \u0448\u0438\u0440\u043e\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u043d\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0432\u043d\u0443\u0442\u0440\u0438 <code>HexMapCamera<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438 Awake \u043a\u0430\u043c\u0435\u0440\u044b.<\/p>\n<pre><code class=\"cs\">\tstatic HexMapCamera instance; \t \t\u2026 \t \tvoid Awake () { \t\tinstance = this; \t\tswivel = transform.GetChild(0); \t\tstick = swivel.GetChild(0); \t}<\/code><\/pre>\n<p>  \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>Locked<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0431\u0443\u043b\u0435\u0432\u044b\u043c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0441\u0435\u0442\u0442\u0435\u0440\u043e\u043c. \u0412\u0441\u0451, \u0447\u0442\u043e \u043e\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u2014 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 <code>HexMapCamera<\/code>, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0435\u0433\u043e, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic static bool Locked { \t\tset { \t\t\tinstance.enabled = !value; \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>NewMapMenu.Open<\/code> \u043c\u043e\u0436\u0435\u0442 \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443, \u0430 <code>NewMapMenu.Close<\/code> \u2014 \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451.<\/p>\n<pre><code class=\"cs\">\tpublic void Open () { \t\tgameObject.SetActive(true); \t\tHexMapCamera.Locked = true; \t}  \tpublic void Close () { \t\tgameObject.SetActive(false); \t\tHexMapCamera.Locked = false; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b<\/h3>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0441 \u043a\u0430\u043c\u0435\u0440\u043e\u0439. \u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439, \u043a\u0430\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0437\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438 \u043a\u0430\u0440\u0442\u044b. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043c \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 \u0438\u0433\u0440\u043e\u043a \u043d\u0435 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043a\u0430\u043c\u0435\u0440\u0443. \u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>HexMapCamera<\/code> \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <code>ValidatePosition<\/code>. \u0412\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 <code>AdjustPosition<\/code> \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442 \u043a\u0430\u043c\u0435\u0440\u0443 \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043a\u0430\u0440\u0442\u044b. \u0415\u0441\u043b\u0438 \u043a\u0430\u043c\u0435\u0440\u0430 \u0443\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u0433\u0440\u0430\u043d\u0438\u0446 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u0442\u043e \u043e\u043d\u0430 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic static void ValidatePosition () { \t\tinstance.AdjustPosition(0f, 0f); \t}<\/code><\/pre>\n<p>  \u0412\u044b\u0437\u043e\u0432\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u0432\u043d\u0443\u0442\u0440\u0438 <code>NewMapMenu.CreateMap<\/code> \u043f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tvoid CreateMap (int x, int z) { \t\thexGrid.CreateMap(x, z); \t\tHexMapCamera.ValidatePosition(); \t\tClose(); \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-13\/creating-new-maps\/creating-new-maps.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b<\/h2>\n<p>  \u0425\u043e\u0442\u044c \u043c\u044b \u0438 \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u043f\u0440\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043e\u043d \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043a\u0430\u0440\u0442\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u0438\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0435, \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u0430\u0440\u0442\u044b \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0451\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0430\u044f \u043a\u0430\u0440\u0442\u0430. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 <code>HexGrid.Load<\/code> \u043a\u0430\u0440\u0442\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 20 \u043d\u0430 15.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader) { \t\tCreateMap(20, 15);  \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Load(reader); \t\t} \t\tfor (int i = 0; i &lt; chunks.Length; i++) { \t\t\tchunks[i].Refresh(); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u043f\u0435\u0440\u0435\u0434 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tpublic void Save (BinaryWriter writer) { \t\twriter.Write(cellCountX); \t\twriter.Write(cellCountZ); \t\t \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Save(writer); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader) { \t\tCreateMap(reader.ReadInt32(), reader.ReadInt32());  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0442\u043e \u0441\u043d\u043e\u0432\u0430 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a\u0430\u043c\u0435\u0440\u044b. \u0420\u0435\u0448\u0438\u043c \u0435\u0451, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u0435\u0451 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 <code>HexMapEditor.Load<\/code> \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void Load () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t\tint header = reader.ReadInt32(); \t\t\tif (header == 0) { \t\t\t\thexGrid.Load(reader, header); \t\t\t\tHexMapCamera.ValidatePosition(); \t\t\t} \t\t\telse { \t\t\t\tDebug.LogWarning(\"Unknown map format \" + header); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041d\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u043e\u0432<\/h3>\n<p>  \u0425\u043e\u0442\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043a\u0430\u0440\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u0441\u043e \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442. \u0418 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 \u2014 \u043a\u043e\u0434 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043a\u0430\u0440\u0442. \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u044b\u0435 \u0438 \u043d\u043e\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b, \u043c\u044b \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 integer \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430. \u0421\u0442\u0430\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u0438\u043c\u0435\u043b \u0432\u0435\u0440\u0441\u0438\u044e 0. \u041d\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u043a\u0430\u0440\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e 1. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 <code>HexMapEditor.Save<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u043c\u0435\u0441\u0442\u043e 0 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c 1.<\/p>\n<pre><code class=\"cs\">\tpublic void Save () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing ( \t\t\tBinaryWriter writer = \t\t\t\tnew BinaryWriter(File.Open(path, FileMode.Create)) \t\t) { \t\t\twriter.Write(1); \t\t\thexGrid.Save(writer); \t\t} \t}<\/code><\/pre>\n<p>  \u0421 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u0430\u0440\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0432\u0435\u0440\u0441\u0438\u044f 1. \u0415\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0438\u0445 \u0432 \u0441\u0431\u043e\u0440\u043a\u0435 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430, \u043e\u043d\u0438 \u043e\u0442\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0442 \u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043a\u0430\u0440\u0442. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0451\u0442, \u0435\u0441\u043b\u0438 \u043c\u044b \u0443\u0436\u0435 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0443. \u041d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>HexMapEditor.Load<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<pre><code class=\"cs\">\tpublic void Load () { \t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t\tint header = reader.ReadInt32(); \t\t\tif (header == 1) { \t\t\t\thexGrid.Load(reader); \t\t\t\tHexMapCamera.ValidatePosition(); \t\t\t} \t\t\telse { \t\t\t\tDebug.LogWarning(\"Unknown map format \" + header); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c<\/h3>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u043c, \u043c\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u0432\u0435\u0440\u0441\u0438\u0438 0, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u043d\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 20 \u043d\u0430 15. \u0422\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d 1, \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 \u043d\u0443\u043b\u0451\u043c. \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430, <code>HexMapEditor.Load<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043c\u0435\u0442\u043e\u0434\u0443 <code>HexGrid.Load<\/code>.<\/p>\n<pre><code class=\"cs\">\t\t\tif (header &lt;= 1) { \t\t\t\thexGrid.Load(reader, header); \t\t\t\tHexMapCamera.ValidatePosition(); \t\t\t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexGrid.Load<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u0445. \u0415\u0441\u043b\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 1, \u0442\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u043d\u0443\u0436\u043d\u043e. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u0440\u044b\u0439 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0430\u0440\u0442\u044b 20 \u043d\u0430 15 \u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader, int header) { \t\tint x = 20, z = 15; \t\tif (header &gt;= 1) { \t\t\tx = reader.ReadInt32(); \t\t\tz = reader.ReadInt32(); \t\t} \t\tCreateMap(x, z);  \t\t\u2026 \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-13\/saving-map-size\/test.map\" rel=\"nofollow\">\u0444\u0430\u0439\u043b \u043a\u0430\u0440\u0442\u044b \u0432\u0435\u0440\u0441\u0438\u0438 0<\/a><\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  \u041a\u0430\u043a \u0438 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443, \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0443\u044e \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430. \u041a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043a\u0430\u0440\u0442\u044b. <code>HexGrid.CreateMap<\/code> \u0443\u0436\u0435 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u043e\u0448\u0438\u0431\u043a\u0443. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u044d\u0442\u043e \u0442\u043e\u043c\u0443, \u043a\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c bool, \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0449\u0438\u0439 \u043e \u0442\u043e\u043c, \u0431\u044b\u043b\u0430 \u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043a\u0430\u0440\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic bool CreateMap (int x, int z) { \t\tif ( \t\t\tx &lt;= 0 || x % HexMetrics.chunkSizeX != 0 || \t\t\tz &lt;= 0 || z % HexMetrics.chunkSizeZ != 0 \t\t) { \t\t\tDebug.LogError(\"Unsupported map size.\"); \t\t\treturn false; \t\t}  \t\t\u2026 \t\treturn true; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c <code>HexGrid.Load<\/code> \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0438 \u0441\u0431\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader, int header) { \t\tint x = 20, z = 15; \t\tif (header &gt;= 1) { \t\t\tx = reader.ReadInt32(); \t\t\tz = reader.ReadInt32(); \t\t} \t\tif (!CreateMap(x, z)) { \t\t\treturn; \t\t}  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u044f\u0447\u0435\u0439\u043a\u0430\u0445, \u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0443, \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0440\u0442\u0430 \u0442\u0430\u043a\u043e\u0433\u043e \u0436\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e\u0442 \u044d\u0442\u0430\u043f \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\t\tif (x != cellCountX || z != cellCountZ) { \t\t\tif (!CreateMap(x, z)) { \t\t\t\treturn; \t\t\t} \t\t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-13\/saving-map-size\/saving-map-size.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430\u043c\u0438<\/h2>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u043d\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c <em>test.map<\/em>. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  \u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u0430\u0440\u0442\u044b \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d canvas, \u043a\u0430\u043a \u0432 <em>New Map Menu<\/em>, \u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043d\u0430\u0437\u043e\u0432\u0451\u043c \u0435\u0433\u043e <em>Save Load Menu<\/em>. \u042d\u0442\u043e \u043c\u0435\u043d\u044e \u0437\u0430\u0439\u043c\u0451\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u043a\u0430\u0440\u0442, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043a\u043d\u043e\u043f\u043a\u0438, \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u0434\u043b\u044f \u0435\u0433\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f.<\/p>\n<p>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u0438\u0437\u0430\u0439\u043d <em>Save Load Menu<\/em> \u0442\u0430\u043a\u0438\u043c, \u043a\u0430\u043a \u0431\u0443\u0434\u0442\u043e \u044d\u0442\u043e \u043c\u0435\u043d\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u0437\u0436\u0435 \u043c\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043c\u0435\u043d\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u041a\u0430\u043a \u0438 \u0443 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043c\u0435\u043d\u044e, \u0443 \u043d\u0435\u0433\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0444\u043e\u043d \u0438 \u043f\u0430\u043d\u0435\u043b\u044c \u043c\u0435\u043d\u044e, \u043c\u0435\u0442\u043a\u0430 \u043c\u0435\u043d\u044e \u0438 \u043a\u043d\u043e\u043f\u043a\u0430 \u043e\u0442\u043c\u0435\u043d\u044b. \u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u043c\u0435\u043d\u044e scroll view (<em>GameObject \/ UI \/ Scroll View<\/em>) \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432. \u041d\u0438\u0436\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430 (<em>GameObject \/ UI \/ Input Field<\/em>) \u0434\u043b\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0438\u043c\u0451\u043d \u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0440\u0442. \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b. \u0418, \u043d\u0430\u043a\u043e\u043d\u0435\u0446. \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 <em>Delete<\/em> \u0434\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u043a\u0430\u0440\u0442.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c73\/279\/198\/c732791989e1eb6fa53e73ec3435bc74.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/176\/485\/3da\/1764853da66092443c0327638dc1803a.png\"><\/div>\n<p>  <i>\u0414\u0438\u0437\u0430\u0439\u043d Save Load Menu.<\/i><\/p>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e scroll view \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e, \u0438 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0443, \u043d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0443 <em>Horizontal<\/em> \u0438 \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u043b\u043e\u0441\u0443 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f <em>Movement Type<\/em> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 clamped \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c <em>Inertia<\/em>, \u0447\u0442\u043e\u0431\u044b \u0441\u043f\u0438\u0441\u043e\u043a \u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/43f\/3a9\/e36\/43f3a9e36202f436772f54eedcd96c76.png\"><\/div>\n<p>  <i>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b File List.<\/i><\/p>\n<p>  \u0423\u0434\u0430\u043b\u0438\u043c \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 <em>Scrollbar Horizontal<\/em> \u0438\u0437 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>File List<\/em>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d \u043d\u0430\u043c \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f. \u0417\u0430\u0442\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0438\u043c \u0440\u0430\u0437\u043c\u0435\u0440 <em>Scrollbar Vertical<\/em> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b \u043d\u0438\u0437\u0430 \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<p>  \u0422\u0435\u043a\u0441\u0442-\u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>Name Input<\/em> \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u0435\u0433\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 <em>Placeholder<\/em>. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u043f\u0443\u0441\u0442\u044b\u043c \u0438 \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ed5\/7d5\/d17\/ed57d5d17dfb0695fc4b2f5f3f9dc8a5.png\"><\/div>\n<p>  <i>\u0418\u0437\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0439\u043d \u043c\u0435\u043d\u044e.<\/i><\/p>\n<p>  \u041c\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438 \u0441 \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u0443\u0435\u043c \u043c\u0435\u043d\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u043a\u0440\u044b\u0442\u043e.<\/p>\n<h3>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0435\u043d\u044e<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043c\u0435\u043d\u044e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 <code>SaveLoadMenu<\/code>. \u041a\u0430\u043a \u0438 <code>NewMapMenu<\/code>, \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0441\u0435\u0442\u043a\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u044b <code>Open<\/code> \u0438 <code>Close<\/code>.<\/p>\n<pre><code class=\"cs\">using UnityEngine;  public class SaveLoadMenu : MonoBehaviour {  \tpublic HexGrid hexGrid;  \tpublic void Open () { \t\tgameObject.SetActive(true); \t\tHexMapCamera.Locked = true; \t}  \tpublic void Close () { \t\tgameObject.SetActive(false); \t\tHexMapCamera.Locked = false; \t} }<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a <em>SaveLoadMenu<\/em> \u0438 \u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u0435\u0442\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/974\/86f\/440\/97486f440f44d4db9c744cfa9b6acec0.png\"><\/div>\n<p>  <i>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 SaveLoadMenu.<\/i><\/p>\n<p>  \u041c\u0435\u043d\u044e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u0414\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043c\u0435\u0442\u043e\u0434 <code>Open<\/code> \u0431\u0443\u043b\u0435\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440. \u041e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u0434\u043e\u043b\u0436\u043d\u043e \u043b\u0438 \u043c\u0435\u043d\u044e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0411\u0443\u0434\u0435\u043c \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0432 \u043f\u043e\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<pre><code class=\"cs\">\tbool saveMode;  \tpublic void Open (bool saveMode) { \t\tthis.saveMode = saveMode; \t\tgameObject.SetActive(true); \t\tHexMapCamera.Locked = true; \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0438 <em>Save<\/em> \u0438 <em>Load<\/em> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>Hex Map Editor<\/em> \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>Open<\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>Save Load Menu<\/em>. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0431\u0443\u043b\u0435\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 <em>Save<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/38c\/59c\/44f\/38c59c44fa001e97128532d7c7d92168.png\"><\/div>\n<p>  <i>\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043c\u0435\u043d\u044e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/i><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u044d\u0442\u043e\u0433\u043e \u0435\u0449\u0451 \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438, \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0442\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 <em>Cancel<\/em> \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>Close<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c <em>Save Load Menu<\/em> \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h3>\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0432\u0438\u0434\u0430<\/h3>\n<p>  \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043c\u0435\u043d\u044e \u043a\u0430\u043a \u043c\u0435\u043d\u044e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u043d\u043e \u0435\u0433\u043e \u0440\u0435\u0436\u0438\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0436\u0430\u0442\u043e\u0439 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043a\u043e\u0439. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043c\u0435\u043d\u044e \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0440\u0435\u0436\u0438\u043c\u0430. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0442\u043a\u0443 \u043c\u0435\u043d\u044e \u0438 \u043c\u0435\u0442\u043a\u0443 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u044d\u0442\u0438 \u043c\u0435\u0442\u043a\u0438.<\/p>\n<pre><code class=\"cs\">using UnityEngine; using UnityEngine.UI;  public class SaveLoadMenu : MonoBehaviour {  \tpublic Text menuLabel, actionButtonLabel; \t \t\u2026 }<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e7c\/4d3\/b8d\/e7c4d3b8d55ce8c333d38be996a3ebc1.png\"><\/div>\n<p>  <i>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u043c\u0435\u0442\u043a\u0430\u043c\u0438.<\/i><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u0435\u043d\u044e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c <em>Save Map<\/em> \u0434\u043b\u044f \u043c\u0435\u043d\u044e \u0438 <em>Save<\/em> \u0434\u043b\u044f \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <em>Load Map<\/em> \u0438 <em>Load<\/em>.<\/p>\n<pre><code class=\"cs\">\tpublic void Open (bool saveMode) { \t\tthis.saveMode = saveMode; \t\tif (saveMode) { \t\t\tmenuLabel.text = \"Save Map\"; \t\t\tactionButtonLabel.text = \"Save\"; \t\t} \t\telse { \t\t\tmenuLabel.text = \"Load Map\"; \t\t\tactionButtonLabel.text = \"Load\"; \t\t} \t\tgameObject.SetActive(true); \t\tHexMapCamera.Locked = true; \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0412\u0432\u043e\u0434 \u0438\u043c\u0435\u043d\u0438 \u043a\u0430\u0440\u0442\u044b<\/h3>\n<p>  \u041e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043e\u043a\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0439 \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432\u0432\u043e\u0434\u044f \u0438\u043c\u044f \u043a\u0430\u0440\u0442\u044b \u0432 \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>InputField<\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>Name Input<\/em>.<\/p>\n<pre><code class=\"cs\">\tpublic InputField nameInput;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/e49\/8e0\/021\/e498e002162a42103571cfac7cf91221.png\"><\/div>\n<p>  <i>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043b\u0435\u043c \u0432\u0432\u043e\u0434\u0430.<\/i><\/p>\n<p>  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u0432\u043e\u0434\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u043a\u0430\u0440\u0442\u044b. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u0435\u043d\u0438 \u043a\u0430\u0440\u0442\u044b \u0431\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <em>.map<\/em>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043c\u0435\u0442\u043e\u0434, \u0431\u0435\u0440\u0443\u0449\u0438\u0439 \u0432\u0432\u043e\u0434 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u042d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u0432\u043e\u0434 \u043f\u0443\u0441\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c <code>null<\/code>.<\/p>\n<pre><code class=\"cs\">using UnityEngine; using UnityEngine.UI; using System.IO;  public class SaveLoadMenu : MonoBehaviour {  \t\u2026  \tstring GetSelectedPath () { \t\tstring mapName = nameInput.text; \t\tif (mapName.Length == 0) { \t\t\treturn null; \t\t} \t\treturn Path.Combine(Application.persistentDataPath, mapName + \".map\"); \t} }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0427\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0432\u0435\u0434\u0451\u0442 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b?<\/b><\/p>\n<div class=\"spoiler_text\">\u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u0432\u0435\u0434\u0451\u0442 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0442\u043e \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0443\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u0432\u0432\u0435\u0441\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0438, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0435\u043c\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u043d\u0435\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043c\u0435\u0441\u0442.<\/p>\n<p>  \u0414\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u0430 \u0432\u0432\u043e\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <em>Content Type<\/em> \u043f\u043e\u043b\u0435\u0439 \u0432\u0432\u043e\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0440\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u043e-\u0446\u0438\u0444\u0440\u043e\u0432\u044b\u043c\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u043c\u0438, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u0433\u043e. \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e \u0438 \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e.<\/div>\n<\/div>\n<p>  <\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 <code>SaveLoadMenu<\/code>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u043c \u043c\u0435\u0442\u043e\u0434\u044b <code>Save<\/code> \u0438 <code>Load<\/code> \u0438\u0437 <code>HexMapEditor<\/code> \u0432 <code>SaveLoadMenu<\/code>. \u0411\u043e\u043b\u044c\u0448\u0435 \u043e\u043d\u0438 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0431\u0449\u0438\u043c\u0438, \u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043f\u0443\u0442\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid Save (string path) { \/\/\t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing ( \t\t\tBinaryWriter writer = \t\t\tnew BinaryWriter(File.Open(path, FileMode.Create)) \t\t) { \t\t\twriter.Write(1); \t\t\thexGrid.Save(writer); \t\t} \t}  \tvoid Load (string path) { \/\/\t\tstring path = Path.Combine(Application.persistentDataPath, \"test.map\"); \t\tusing (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { \t\t\tint header = reader.ReadInt32(); \t\t\tif (header &lt;= 1) { \t\t\t\thexGrid.Load(reader, header); \t\t\t\tHexMapCamera.ValidatePosition(); \t\t\t} \t\t\telse { \t\t\t\tDebug.LogWarning(\"Unknown map format \" + header); \t\t\t} \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0430 \u0443\u0436\u0435 \u043f\u043e\u0442\u043e\u043c \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0433\u043e. \u0415\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442, \u0442\u043e \u043c\u044b \u0432\u044b\u0434\u0430\u0451\u043c \u043e\u0448\u0438\u0431\u043a\u0443 \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<pre><code class=\"cs\">\tvoid Load (string path) { \t\tif (!File.Exists(path)) { \t\t\tDebug.LogError(\"File does not exist \" + path); \t\t\treturn; \t\t} \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0431\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <code>Action<\/code>. \u041e\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043f\u0443\u0442\u0438. \u0415\u0441\u043b\u0438 \u043f\u0443\u0442\u044c \u0435\u0441\u0442\u044c, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043f\u043e \u043d\u0435\u043c\u0443 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u0417\u0430\u0442\u0435\u043c \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u043d\u044e.<\/p>\n<pre><code class=\"cs\">\tpublic void Action () { \t\tstring path = GetSelectedPath(); \t\tif (path == null) { \t\t\treturn; \t\t} \t\tif (saveMode) { \t\t\tSave(path); \t\t} \t\telse { \t\t\tLoad(path); \t\t} \t\tClose(); \t}<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432 \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <em>Action Button<\/em>, \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043a\u0430\u0440\u0442. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u043b\u0435 \u0432\u0432\u043e\u0434\u0430, \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u043f\u043e\u0434\u0440\u044f\u0434, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u043c\u0435\u043d\u044f\u0442\u044c.<\/p>\n<h3>\u041f\u0443\u043d\u043a\u0442\u044b \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u0430\u0440\u0442<\/h3>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u0432\u0441\u0435\u043c\u0438 \u043a\u0430\u0440\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e \u043f\u0443\u0442\u0438 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043e\u0434\u0438\u043d \u0438\u0437 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0442\u0435\u043a\u0441\u0442 \u0432 <em>Name Input<\/em>. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>SaveLoadMenu<\/code> \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434.<\/p>\n<pre><code class=\"cs\">\tpublic void SelectItem (string name) { \t\tnameInput.text = name; \t}<\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0441\u043e\u0431\u043e\u0439 \u043f\u0443\u043d\u043a\u0442 \u0441\u043f\u0438\u0441\u043a\u0430. \u041f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u043a\u043d\u043e\u043f\u043a\u0430. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0435\u0451 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u0432\u044b\u0441\u043e\u0442\u0443 \u0434\u043e 20 \u0435\u0434\u0438\u043d\u0438\u0446, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0430 \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438. \u041e\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a \u043a\u043d\u043e\u043f\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0447\u0438\u0441\u0442\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0443 <em>Source Image<\/em> \u0435\u0451 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 <em>Image<\/em>. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u0435\u043b\u043e\u0439. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u0442\u043a\u0430 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043b\u0430\u0441\u044c \u043f\u043e \u043b\u0435\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e \u0438 \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043a\u0441\u0442\u043e\u043c \u0438 \u043b\u0435\u0432\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u043d\u043e\u043f\u043a\u0438 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e. \u0417\u0430\u043a\u043e\u043d\u0447\u0438\u0432 \u0441 \u0434\u0438\u0437\u0430\u0439\u043d\u043e\u043c \u043a\u043d\u043e\u043f\u043a\u0438, \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u0435\u0451 \u0432 \u043f\u0440\u0435\u0444\u0430\u0431.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/501\/0f0\/6e5\/5010f06e5b380440bca024ffb8c0e307.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/67b\/60b\/21f\/67b60b21f34e4ae69846c35ed5583fae.png\"><\/div>\n<p>  <i>\u041a\u043d\u043e\u043f\u043a\u0430-\u043f\u0443\u043d\u043a\u0442 \u0441\u043f\u0438\u0441\u043a\u0430.<\/i><\/p>\n<p>  \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043a\u0438 \u043a <em>New Map Menu<\/em>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0440\u0435\u0444\u0430\u0431 \u0438 \u0432 \u0441\u0446\u0435\u043d\u0435 \u043e\u043d \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0443\u043d\u043a\u0442\u0443 \u043c\u0435\u043d\u044e \u043d\u0443\u0436\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043c\u0435\u043d\u044e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 <code>SelectItem<\/code>. \u0422\u0430\u043a\u0436\u0435 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u0435 \u0438\u043c \u0438\u043c\u044f \u043a\u0430\u0440\u0442\u044b, \u0438 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u0435\u043a\u0441\u0442. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <code>SaveLoadItem<\/code>.<\/p>\n<pre><code class=\"cs\">using UnityEngine; using UnityEngine.UI;  public class SaveLoadItem : MonoBehaviour {  \tpublic SaveLoadMenu menu; \t \tpublic string MapName { \t\tget { \t\t\treturn mapName; \t\t} \t\tset { \t\t\tmapName = value; \t\t\ttransform.GetChild(0).GetComponent&lt;Text&gt;().text = value; \t\t} \t} \t \tstring mapName; \t \tpublic void Select () { \t\tmenu.SelectItem(mapName); \t} }<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043a \u043f\u0443\u043d\u043a\u0442\u0443 \u043c\u0435\u043d\u044e \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u043d\u043e\u043f\u043a\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0430 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434 <code>Select<\/code>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/249\/172\/7a0\/2491727a0c07b0b92e89db0e3c02fe67.png\"><\/div>\n<p>  <i>\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043f\u0443\u043d\u043a\u0442\u0430.<\/i><\/p>\n<h3>\u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a, <code>SaveLoadMenu<\/code> \u043d\u0443\u0436\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 <em>Content<\/em> \u0432\u043d\u0443\u0442\u0440\u0438 <em>Viewport<\/em> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>File List<\/em>. \u0422\u0430\u043a\u0436\u0435 \u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043f\u0440\u0435\u0444\u0430\u0431 \u043f\u0443\u043d\u043a\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic RectTransform listContent; \t \tpublic SaveLoadItem itemPrefab;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4b6\/22a\/0eb\/4b622a0eb5cf47422ce591dcd5c120e8.png\"><\/div>\n<p>  <i>\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0438 \u043f\u0440\u0435\u0444\u0430\u0431\u0430.<\/i><\/p>\n<p>  \u0414\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u041f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u0430\u0440\u0442. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u0441\u0435\u0445 \u043f\u0443\u0442\u0435\u0439 \u043a \u0444\u0430\u0439\u043b\u0430\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>Directory.GetFiles<\/code>. \u0423 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0435\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u044b, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0430\u0441\u043a\u0435 <em>*.map<\/em>.<\/p>\n<pre><code class=\"cs\">\tvoid FillList () { \t\tstring[] paths = \t\t\tDirectory.GetFiles(Application.persistentDataPath, \"*.map\"); \t}<\/code><\/pre>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d. \u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0445 \u0432 \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>System.Array.Sort<\/code>.<\/p>\n<pre><code class=\"cs\">using UnityEngine; using UnityEngine.UI; using System; using System.IO;  public class SaveLoadMenu : MonoBehaviour {  \t\u2026  \tvoid FillList () { \t\tstring[] paths = \t\t\tDirectory.GetFiles(Application.persistentDataPath, \"*.map\"); \t\tArray.Sort(paths); \t}  \t\u2026 }<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043f\u0440\u0435\u0444\u0430\u0431\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u041f\u0440\u0438\u0432\u044f\u0436\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a \u043c\u0435\u043d\u044e, \u0437\u0430\u0434\u0430\u0434\u0438\u043c \u0435\u0433\u043e \u0438\u043c\u044f \u043a\u0430\u0440\u0442\u044b \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0433\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\t\tArray.Sort(paths); \t\tfor (int i = 0; i &lt; paths.Length; i++) { \t\t\tSaveLoadItem item = Instantiate(itemPrefab); \t\t\titem.menu = this; \t\t\titem.MapName = paths[i]; \t\t\titem.transform.SetParent(listContent, false); \t\t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a <code>Directory.GetFiles<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u043a \u0444\u0430\u0439\u043b\u0430\u043c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>Path.GetFileNameWithoutExtension<\/code>.<\/p>\n<pre><code class=\"cs\">\t\t\titem.MapName = Path.GetFileNameWithoutExtension(paths[i]);<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043c\u0435\u043d\u044e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a. \u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u0444\u0430\u0439\u043b\u044b \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043c\u0435\u043d\u044e.<\/p>\n<pre><code class=\"cs\">\tpublic void Open (bool saveMode) { \t\t\u2026 \t\tFillList(); \t\tgameObject.SetActive(true); \t\tHexMapCamera.Locked = true; \t}<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u0432\u044b\u0445 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u0443\u0434\u0430\u043b\u044f\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u0441\u0442\u0430\u0440\u044b\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid FillList () { \t\tfor (int i = 0; i &lt; listContent.childCount; i++) { \t\t\tDestroy(listContent.GetChild(i).gameObject); \t\t} \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c83\/4ff\/fc3\/c834fffc34b03b0d39de0056796fa199.png\"><\/div>\n<p>  <i>\u041f\u0443\u043d\u043a\u0442\u044b \u0431\u0435\u0437 \u0440\u0430\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438.<\/i><\/p>\n<h3>\u0420\u0430\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0443\u043d\u043a\u0442\u043e\u0432<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u0443\u043d\u043a\u0442\u044b, \u043d\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433 \u043d\u0430 \u0434\u0440\u0443\u0433\u0430 \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043f\u043b\u043e\u0445\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438. \u0427\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0432 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 <em>Content<\/em> \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <em>Vertical Layout Group<\/em> (<em>Component \/ Layout \/ Vertical Layout Group<\/em>).<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0432\u043a\u043b\u044e\u0447\u0438\u043c <em>Width<\/em> of both <em>Child Control Size<\/em> \u0438 <em>Child Force Expand<\/em>. \u041e\u0431\u0435 \u043e\u043f\u0446\u0438\u0438 <em>Height<\/em> \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/392\/32e\/aac\/39232eaac1c1741718d8993aae992bb4.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7dd\/aba\/ce4\/7ddabace4df7d61a274544889de9a3c2.png\"><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 vertical layout group.<\/i><\/p>\n<p>  \u0423 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0443\u043d\u043a\u0442\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0443\u043d\u043a\u0442\u043e\u0432. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u043e\u0441\u0430 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c <em>Content<\/em> \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043a \u043d\u0435\u043c\u0443 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 <em>Content Size Fitter<\/em> (<em>Component \/ Layout \/ Content Size Fitter<\/em>). \u0415\u0433\u043e \u0440\u0435\u0436\u0438\u043c <em>Vertical Fit<\/em> \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <em>Preferred Size<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/34e\/c56\/fdb\/34ec56fdb61e1d3a2bc71989333a7a8a.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/acb\/a17\/bf1\/acba17bf1387ddb89b00ea48c9e31035.png\"><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 content size fitter.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u043c\u0430\u043b\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0443\u043d\u043a\u0442\u043e\u0432 \u043f\u043e\u043b\u043e\u0441\u0430 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u0447\u0435\u0437\u0430\u0442\u044c. \u0410 \u043a\u043e\u0433\u0434\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u043e\u0432, \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u043e\u043a\u043d\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430, \u0442\u043e \u043f\u043e\u043b\u043e\u0441\u0430 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/327\/460\/6d8\/3274606d8e5831f783d282d5122e55cc.png\"><\/div>\n<p>  <i>\u041f\u043e\u043b\u043e\u0441\u0430 \u043f\u0440\u043e\u043a\u0440\u0443\u0442\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/i><\/p>\n<h3>\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u0440\u0442<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u0430\u0440\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0430\u0440\u0442. \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 \u043a\u043d\u043e\u043f\u043a\u0443 <em>Delete<\/em>. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434 \u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u0435\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>File.Delete<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void Delete () { \t\tstring path = GetSelectedPath(); \t\tif (path == null) { \t\t\treturn; \t\t} \t\tFile.Delete(path); \t}<\/code><\/pre>\n<p>  \u0422\u0443\u0442 \u043d\u0430\u043c \u0442\u043e\u0436\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0442\u043e \u043c\u044b \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0435\u0433\u043e, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<pre><code class=\"cs\">\t\tif (File.Exists(path)) { \t\t\tFile.Delete(path); \t\t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044e. \u0422\u0430\u043a \u043b\u0435\u0433\u0447\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0437\u0430 \u0440\u0430\u0437. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c <em>Name Input<\/em>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\t\tif (File.Exists(path)) { \t\t\tFile.Delete(path); \t\t} \t\tnameInput.text = \"\"; \t\tFillList();<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-13\/file-management\/file-management.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 14: \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0446\u0432\u0435\u0442\u0430 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f splat map.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0430\u0441\u0441\u0435\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440.<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043a \u043c\u0435\u0448\u0430\u043c.<\/li>\n<li>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/li>\n<\/ul>\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 \u0434\u043b\u044f \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442 \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430. \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/4da\/9e8\/4fa\/4da9e84faf824fdcf3933310de58ff9c.jpg\"><\/div>\n<p>  <i>\u0420\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438.<\/i><\/p>\n<h2>\u0421\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0440\u0451\u0445 \u0442\u0438\u043f\u043e\u0432<\/h2>\n<p>  \u0425\u043e\u0442\u044f \u043e\u0434\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 \u0447\u0451\u0442\u043a\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u043c\u044b \u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439, \u043e\u043d\u0438 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0440\u0442. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0446\u0432\u0435\u0442\u0430. \u0412 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/rendering\/part-3\/\">Rendering 3, Combining Textures<\/a> \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e splat map. \u0412 \u043d\u0430\u0448\u0438\u0445 \u043a\u0430\u0440\u0442\u0430\u0445 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>  \u0412 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/rendering\/part-3\/\">Rendering 3<\/a> \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0442\u044b\u0440\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0439 splat map \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u043e \u043f\u044f\u0442\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u044f\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0432\u0435\u0442\u043e\u0432, \u0442\u0430\u043a \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0430\u043c \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0437\u0436\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u0438\u043f\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u041f\u043e\u0437\u0436\u0435 \u043c\u044b \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c.<\/p>\n<p>  \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430\u043c \u043a\u0430\u043a-\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u0443, \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043d\u0430\u0434\u043e \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f \u0443\u0433\u043b\u043e\u0432\u044b\u0445 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u043c\u044f \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u043c\u044f \u0442\u0438\u043f\u0430\u043c\u0438 \u043d\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a.<\/p>\n<h3>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u043e\u0432 \u0432\u0435\u0440\u0448\u0438\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 Splat Maps<\/h3>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0432, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u0448\u0430\u0442\u044c, \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0432\u0435\u0440\u0448\u0438\u043d \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f splat map \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0442\u0440\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438 \u043a\u0430\u043d\u0430\u043b\u0430 \u0446\u0432\u0435\u0442\u0430. \u041a\u0440\u0430\u0441\u043d\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u2014 \u0432\u0442\u043e\u0440\u0443\u044e, \u0430 \u0441\u0438\u043d\u0438\u0439 \u2014 \u0442\u0440\u0435\u0442\u044c\u044e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/cf1\/3fb\/603\/cf13fb603f1d7ab8e83d9290b483b9ee.png\"><\/div>\n<p>  <i>\u0422\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a Splat map.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u0441\u0435\u0433\u0434\u0430 \u043b\u0438 \u0441\u0443\u043c\u043c\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 splat map \u0440\u0430\u0432\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u0435?<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0430. \u0422\u0440\u0438 \u0446\u0432\u0435\u0442\u043e\u0432\u044b\u0445 \u043a\u0430\u043d\u0430\u043b\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0442\u0440\u0438\u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u043f\u043e \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430. \u041e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0431\u0430\u0440\u0438\u0446\u0435\u043d\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0443 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0440\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 (1, 0, 0) \u0432 \u0443\u0433\u043b\u0430\u0445, \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b (\u00bd, \u00bd, 0) \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430\u0445 \u0440\u0451\u0431\u0435\u0440 \u0438 (&amp;frac13;, &amp;frac13;, &amp;frac13;) \u0432 \u0446\u0435\u043d\u0442\u0440\u0435.<\/div>\n<\/div>\n<p>  \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0430\u043d\u0430\u043b. \u0422\u043e \u0435\u0441\u0442\u044c \u0435\u0433\u043e \u0446\u0432\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u0440\u0430\u0441\u043d\u044b\u043c. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u043d\u0430\u043b\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u0446\u0432\u0435\u0442 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0438 \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e. \u0410 \u043a\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0442\u0440\u0438 \u0442\u0438\u043f\u0430, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e, \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e \u0438 \u0441\u0438\u043d\u0435\u0433\u043e.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/aa3\/364\/890\/aa33648906f62a94be8a45aba4bd80de.png\"><\/div>\n<p>  <i>\u0422\u0440\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 splat map.<\/i><\/p>\n<p>  \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 splat map \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435. \u0422\u043e \u0435\u0441\u0442\u044c splat map \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439. \u041c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c <code>HexGridChunk<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u044d\u0442\u0438 splat maps, \u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0446\u0432\u0435\u0442\u0430 \u044f\u0447\u0435\u0435\u043a. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0447\u0430\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0438 \u0446\u0432\u0435\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u043d\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043b\u044f.<\/p>\n<pre><code class=\"cs\">\tstatic Color color1 = new Color(1f, 0f, 0f); \tstatic Color color2 = new Color(0f, 1f, 0f); \tstatic Color color3 = new Color(0f, 0f, 1f);<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0426\u0435\u043d\u0442\u0440\u044b \u044f\u0447\u0435\u0435\u043a<\/h3>\n<p>  \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0437\u0430\u043c\u0435\u043d\u044b \u0446\u0432\u0435\u0442\u0430 \u0446\u0435\u043d\u0442\u0440\u043e\u0432 \u044f\u0447\u0435\u0435\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0417\u0434\u0435\u0441\u044c \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0446\u0432\u0435\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0440\u0430\u0441\u043d\u044b\u0439.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithoutRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\tTriangulateEdgeFan(center, e, color1);  \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3e9\/44b\/f10\/3e944bf109bb387ab6a620ea680c2772.png\"><\/div>\n<p>  <i>\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0446\u0435\u043d\u0442\u0440\u044b \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<p>  \u0426\u0435\u043d\u0442\u0440\u044b \u044f\u0447\u0435\u0435\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u043b\u0438 \u043a\u0440\u0430\u0441\u043d\u044b\u043c\u0438. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043f\u0435\u0440\u0432\u0443\u044e \u0438\u0437 \u0442\u0440\u0451\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0430\u044f \u044d\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430. \u0418\u0445 splat maps \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0446\u0432\u0435\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<h3>\u0421\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u043e \u0441 \u0440\u0435\u043a\u0430\u043c\u0438<\/h3>\n<p>  \u041c\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0447\u0435\u0435\u043a \u0431\u0435\u0437 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u043f\u043e \u043d\u0438\u043c \u0440\u0435\u043a. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0441 \u0440\u0435\u043a\u0430\u043c\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043e\u0432. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0438 \u043f\u043e\u043b\u043e\u0441\u0430 \u0440\u0435\u0431\u0440\u0430, \u0438 \u0432\u0435\u0435\u0440 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0440\u0435\u0431\u0440\u0430. \u0417\u0434\u0435\u0441\u044c \u043d\u0430\u043c \u0442\u043e\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateAdjacentToRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t\u2026  \t\tTriangulateEdgeStrip(m, color1, e, color1); \t\tTriangulateEdgeFan(center, m, color1);  \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/b7c\/846\/a8a\/b7c846a8a2a4b5a2670b77359d55f9f6.png\"><\/div>\n<p>  <i>\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u043e \u0441\u043e\u0441\u0435\u0434\u0441\u0442\u0432\u0443 \u0441 \u0440\u0435\u043a\u0430\u043c\u0438.<\/i><\/p>\n<h3>\u0420\u0435\u043a\u0438<\/h3>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0438 \u0440\u0435\u043a \u0432\u043d\u0443\u0442\u0440\u0438 \u044f\u0447\u0435\u0435\u043a. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0442\u043e\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u0442\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u043d\u044b\u043c\u0438. \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0439\u043c\u0451\u043c\u0441\u044f \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0438 \u043a\u043e\u043d\u0446\u043e\u043c \u0440\u0435\u043a.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiverBeginOrEnd ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t\u2026  \t\tTriangulateEdgeStrip(m, color1, e, color1); \t\tTriangulateEdgeFan(center, m, color1);  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0410 \u0437\u0430\u0442\u0435\u043c \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0431\u0435\u0440\u0435\u0433\u0430 \u0438 \u0440\u0443\u0441\u043b\u043e \u0440\u0435\u043a\u0438. \u042f \u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u043b \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u0430 \u0446\u0432\u0435\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0434 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435 \u0447\u0438\u0442\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t\u2026  \t\tTriangulateEdgeStrip(m, color1, e, color1);  \t\tterrain.AddTriangle(centerL, m.v1, m.v2); \/\/\t\tterrain.AddTriangleColor(cell.Color); \t\tterrain.AddQuad(centerL, center, m.v2, m.v3); \/\/\t\tterrain.AddQuadColor(cell.Color); \t\tterrain.AddQuad(center, centerR, m.v3, m.v4); \/\/\t\tterrain.AddQuadColor(cell.Color); \t\tterrain.AddTriangle(centerR, m.v4, m.v5); \/\/\t\tterrain.AddTriangleColor(cell.Color); \t\t \t\tterrain.AddTriangleColor(color1); \t\tterrain.AddQuadColor(color1); \t\tterrain.AddQuadColor(color1); \t\tterrain.AddTriangleColor(color1);  \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/da8\/46a\/455\/da846a455aa262ddff54429faa207267.png\"><\/div>\n<p>  <i>\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0440\u0435\u043a\u0438 \u0432\u0434\u043e\u043b\u044c \u044f\u0447\u0435\u0435\u043a.<\/i><\/p>\n<h3>\u0420\u0451\u0431\u0440\u0430<\/h3>\n<p>  \u0412\u0441\u0435 \u0440\u0451\u0431\u0440\u0430 \u0440\u0430\u0437\u043d\u044b\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u0442\u0438\u043f\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0446\u0432\u0435\u0442, \u0430 \u0434\u043b\u044f \u0442\u0438\u043f\u0430 \u0441\u043e\u0441\u0435\u0434\u0430 \u2014 \u0432\u0442\u043e\u0440\u043e\u0439 \u0446\u0432\u0435\u0442. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 splat map \u0441\u0442\u0430\u043d\u0435\u0442 \u043a\u0440\u0430\u0441\u043d\u043e-\u0437\u0435\u043b\u0451\u043d\u044b\u043c \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u043e\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u0431\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0442\u0438\u043f. \u0415\u0441\u043b\u0438 \u043e\u0431\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443, \u0442\u043e \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0442\u0430\u043d\u0435\u0442 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateConnection ( \t\tHexDirection direction, HexCell cell, EdgeVertices e1 \t) { \t\t\u2026  \t\tif (cell.GetEdgeType(direction) == HexEdgeType.Slope) { \t\t\tTriangulateEdgeTerraces(e1, cell, e2, neighbor, hasRoad); \t\t} \t\telse { \t\t\tTriangulateEdgeStrip(e1, color1, e2, color2, hasRoad); \t\t}  \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/368\/42b\/88c\/36842b88cd626359ef4adfd4c3b99b13.png\"><\/div>\n<p>  <i>\u041a\u0440\u0430\u0441\u043d\u043e-\u0437\u0435\u043b\u0451\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u0441\u0442\u0443\u043f\u043e\u0432.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 \u0440\u0435\u0437\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u043a\u0440\u0430\u0441\u043d\u044b\u043c \u0438 \u0437\u0435\u043b\u0451\u043d\u044b\u043c \u043d\u0435 \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c?<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0440\u0435\u0431\u0440\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u0434\u043e \u0437\u0435\u043b\u0451\u043d\u043e\u0433\u043e, \u0446\u0435\u043d\u0442\u0440\u044b \u044f\u0447\u0435\u0435\u043a \u0441 \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d \u043a\u0440\u0430\u0441\u043d\u044b\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0440\u0435\u0431\u0440\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u044b\u0432. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c splat map, \u0446\u0432\u0435\u0442\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0437\u0435\u043b\u0451\u043d\u043e\u043c\u0443 \u0441 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u043c\u0443 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>  \u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u0445 \u0441 \u043e\u0431\u0449\u0438\u043c\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u0430\u043c\u0438.<\/p><\/div>\n<\/div>\n<p>  \u0420\u0451\u0431\u0440\u0430 \u0441 \u0443\u0441\u0442\u0443\u043f\u0430\u043c\u0438 \u0447\u0443\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0446\u0432\u0435\u0442\u0430\u043c\u0438 splat map. \u041f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0446\u0432\u0435\u0442\u0430, \u0430 \u043d\u0435 \u0446\u0432\u0435\u0442\u0430 \u044f\u0447\u0435\u0435\u043a \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430.<\/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(color1, color2, 1);  \t\tTriangulateEdgeStrip(begin, color1, 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(color1, color2, i); \t\t\tTriangulateEdgeStrip(e1, c1, e2, c2, hasRoad); \t\t}  \t\tTriangulateEdgeStrip(e2, c2, end, color2, hasRoad); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/450\/635\/fe1\/450635fe13e41a888046f2f7e0cce830.png\"><\/div>\n<p>  <i>\u041a\u0440\u0430\u0441\u043d\u043e-\u0437\u0435\u043b\u0451\u043d\u044b\u0435 \u0443\u0441\u0442\u0443\u043f\u044b \u0440\u0451\u0431\u0435\u0440.<\/i><\/p>\n<h3>\u0423\u0433\u043b\u044b<\/h3>\n<p>  \u0423\u0433\u043b\u044b \u044f\u0447\u0435\u0435\u043a \u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0442\u044c \u0442\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0434\u043b\u044f \u043d\u0438\u0436\u043d\u0435\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0439 \u0438 \u0441\u0438\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u043e\u0439. \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0443\u0433\u043b\u043e\u0432 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCorner ( \t\tVector3 bottom, HexCell bottomCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\t\u2026 \t\telse { \t\t\tterrain.AddTriangle(bottom, left, right); \t\t\tterrain.AddTriangleColor(color1, color2, color3); \t\t}  \t\tfeatures.AddWall(bottom, bottomCell, left, leftCell, right, rightCell); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/10a\/d9c\/218\/10ad9c21858e48e059c92bbed08c779f.png\"><\/div>\n<p>  <i>\u041a\u0440\u0430\u0441\u043d\u043e-\u0437\u0435\u043b\u0451\u043d\u043e-\u0441\u0438\u043d\u0438\u0435 \u0443\u0433\u043b\u044b, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u0441\u0442\u0443\u043f\u043e\u0432.<\/i><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043a\u043e\u0434 \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u0438 \u0446\u0432\u0435\u0442\u043e\u0432 \u0434\u043b\u044f \u0443\u0433\u043b\u043e\u0432 \u0441 \u0443\u0441\u0442\u0443\u043f\u0430\u043c\u0438. \u041f\u0440\u043e\u0441\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0442\u0440\u0435\u043c\u044f, \u0430 \u043d\u0435 \u0434\u0432\u0443\u043c\u044f \u0446\u0432\u0435\u0442\u0430\u043c\u0438. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0443\u0441\u0442\u0443\u043f\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0440\u044f\u0434\u043e\u043c \u0441 \u043e\u0431\u0440\u044b\u0432\u0430\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerTerraces ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\tVector3 v3 = HexMetrics.TerraceLerp(begin, left, 1); \t\tVector3 v4 = HexMetrics.TerraceLerp(begin, right, 1); \t\tColor c3 = HexMetrics.TerraceLerp(color1, color2, 1); \t\tColor c4 = HexMetrics.TerraceLerp(color1, color3, 1);  \t\tterrain.AddTriangle(begin, v3, v4); \t\tterrain.AddTriangleColor(color1, c3, c4);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tVector3 v1 = v3; \t\t\tVector3 v2 = v4; \t\t\tColor c1 = c3; \t\t\tColor c2 = c4; \t\t\tv3 = HexMetrics.TerraceLerp(begin, left, i); \t\t\tv4 = HexMetrics.TerraceLerp(begin, right, i); \t\t\tc3 = HexMetrics.TerraceLerp(color1, color2, i); \t\t\tc4 = HexMetrics.TerraceLerp(color1, color3, i); \t\t\tterrain.AddQuad(v1, v2, v3, v4); \t\t\tterrain.AddQuadColor(c1, c2, c3, c4); \t\t}  \t\tterrain.AddQuad(v3, v4, left, right); \t\tterrain.AddQuadColor(c3, c4, color2, color3); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/504\/d1d\/6b3\/504d1d6b3997b321e0a6e7bf5aa253f2.png\"><\/div>\n<p>  <i>\u041a\u0440\u0430\u0441\u043d\u043e-\u0437\u0435\u043b\u0451\u043d\u043e-\u0441\u0438\u043d\u0438\u0435 \u0443\u0433\u043b\u043e\u0432\u044b\u0435 \u0443\u0441\u0442\u0443\u043f\u044b, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0443\u0441\u0442\u0443\u043f\u043e\u0432 \u0432\u0434\u043e\u043b\u044c \u043e\u0431\u0440\u044b\u0432\u043e\u0432.<\/i><\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u0440\u044b\u0432\u043e\u0432, \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>TriangulateBoundaryTriangle<\/code>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0443\u044e \u0438 \u043b\u0435\u0432\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 splat, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u044d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430 \u0446\u0432\u0435\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateBoundaryTriangle ( \t\tVector3 begin, Color beginColor, \t\tVector3 left, Color leftColor, \t\tVector3 boundary, Color boundaryColor \t) { \t\tVector3 v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, 1)); \t\tColor c2 = HexMetrics.TerraceLerp(beginColor, leftColor, 1);  \t\tterrain.AddTriangleUnperturbed(HexMetrics.Perturb(begin), v2, boundary); \t\tterrain.AddTriangleColor(beginColor, 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.Perturb(HexMetrics.TerraceLerp(begin, left, i)); \t\t\tc2 = HexMetrics.TerraceLerp(beginColor, leftColor, i); \t\t\tterrain.AddTriangleUnperturbed(v1, v2, boundary); \t\t\tterrain.AddTriangleColor(c1, c2, boundaryColor); \t\t}  \t\tterrain.AddTriangleUnperturbed(v2, HexMetrics.Perturb(left), boundary); \t\tterrain.AddTriangleColor(c2, leftColor, boundaryColor); \t}<\/code><\/pre>\n<p>  \u0418\u0437\u043c\u0435\u043d\u0438\u043c <code>TriangulateCornerTerracesCliff<\/code> \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerTerracesCliff ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\t\u2026 \t\tColor boundaryColor = Color.Lerp(color1, color3, b);  \t\tTriangulateBoundaryTriangle( \t\t\tbegin, color1, left, color2, boundary, boundaryColor \t\t);  \t\tif (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { \t\t\tTriangulateBoundaryTriangle( \t\t\t\tleft, color2, right, color3, boundary, boundaryColor \t\t\t); \t\t} \t\telse { \t\t\tterrain.AddTriangleUnperturbed( \t\t\t\tHexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary \t\t\t); \t\t\tterrain.AddTriangleColor(color2, color3, boundaryColor); \t\t} \t}<\/code><\/pre>\n<p>  \u0418 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0434\u043b\u044f <code>TriangulateCornerCliffTerraces<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerCliffTerraces ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\t\u2026 \t\tColor boundaryColor = Color.Lerp(color1, color2, b);  \t\tTriangulateBoundaryTriangle( \t\t\tright, color3, begin, color1, boundary, boundaryColor \t\t);  \t\tif (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { \t\t\tTriangulateBoundaryTriangle( \t\t\t\tleft, color2, right, color3, boundary, boundaryColor \t\t\t); \t\t} \t\telse { \t\t\tterrain.AddTriangleUnperturbed( \t\t\t\tHexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary \t\t\t); \t\t\tterrain.AddTriangleColor(color2, color3, boundaryColor); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f89\/7e0\/e40\/f897e0e408335e1e7b198ced5e1dc8ad.png\"><\/div>\n<p>  <i>\u041f\u043e\u043b\u043d\u0430\u044f splat map \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-14\/blending-three-types\/blending-three-types.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u041c\u0430\u0441\u0441\u0438\u0432\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0435\u0441\u0442\u044c splat map, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u0443 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u0443 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 C#, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 GPU \u043a\u0430\u043a \u0435\u0434\u0438\u043d\u0430\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044c. \u041d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Texture2DArray<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 Unity \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 5.4.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u0441\u0435 \u043b\u0438 GPU \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440?<\/b><\/p>\n<div class=\"spoiler_text\">\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 GPU \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442, \u043d\u043e \u0441\u0442\u0430\u0440\u044b\u0435 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c. \u0412\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"https:\/\/docs.unity3d.com\/Manual\/SL-TextureArrays.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Unity<\/a>.  <\/p>\n<ul>\n<li>Direct3D 11\/12 (Windows, Xbox One)<\/li>\n<li>OpenGL Core (Mac OS X, Linux)<\/li>\n<li>Metal (iOS, Mac OS X)<\/li>\n<li>OpenGL ES 3.0 (Android, iOS, WebGL 2.0)<\/li>\n<li>PlayStation 4<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<h3>\u041c\u0430\u0441\u0442\u0435\u0440<\/h3>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c Unity \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 5.5 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0435\u043c\u0443 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u041d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play, \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u0442 \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0430\u0441\u0441\u0435\u0442.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u0447\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u0442?<\/b><\/p>\n<div class=\"spoiler_text\">\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 \u0430\u0441\u0441\u0435\u0442\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u041d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432 \u0441\u0431\u043e\u0440\u043a\u0438, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0430\u0441\u0441\u0435\u0442 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d. Unity \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0441\u0431\u043e\u0440\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0430\u0441\u0441\u0435\u0442 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0444\u043e\u0440\u043c\u0430\u0442. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p><\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043c\u044b \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0430\u0441\u0442\u0435\u0440. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442 <code>TextureArrayWizard<\/code> \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043c \u0435\u0433\u043e \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 <em>Editor<\/em>. \u0412\u043c\u0435\u0441\u0442\u043e <code>MonoBehaviour<\/code> \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0442\u0438\u043f <code>ScriptableWizard<\/code> \u0438\u0437 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d <code>UnityEditor<\/code>.<\/p>\n<pre><code class=\"cs\">using UnityEditor; using UnityEngine;  public class TextureArrayWizard : ScriptableWizard { }<\/code><\/pre>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043c\u0430\u0441\u0442\u0435\u0440 \u0447\u0435\u0440\u0435\u0437 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <code>ScriptableWizard.DisplayWizard<\/code>. \u0415\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043e\u043a\u043d\u0430 \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0435\u0433\u043e \u043a\u043d\u043e\u043f\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f. \u0411\u0443\u0434\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435 <code>CreateWizard<\/code>.<\/p>\n<pre><code class=\"cs\">\tstatic void CreateWizard () { \t\tScriptableWizard.DisplayWizard&lt;TextureArrayWizard&gt;( \t\t\t\"Create Texture Array\", \"Create\" \t\t); \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043c\u0430\u0441\u0442\u0435\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432 \u043c\u0435\u043d\u044e Unity. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 <code>MenuItem<\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a \u043c\u0435\u043d\u044e <em>Assets<\/em>, \u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435 \u0432 <em>Assets \/ Create \/ Texture Array<\/em>.<\/p>\n<pre><code class=\"cs\">\t[MenuItem(\"Assets\/Create\/Texture Array\")] \tstatic void CreateWizard () { \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f7d\/2b4\/433\/f7d2b44333870be6838dcd48ea3a697f.png\"><\/div>\n<p>  <i>\u041d\u0430\u0448 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043c\u0430\u0441\u0442\u0435\u0440.<\/i><\/p>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u043c\u0435\u043d\u044e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0441\u043f\u043b\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u043c\u0435\u043d\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043c\u0430\u0441\u0442\u0435\u0440\u0430. \u041e\u043d\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435, \u043d\u043e \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u043e \u043f\u043e\u043a\u0430 \u0435\u0449\u0451 \u043f\u0443\u0441\u0442\u043e\u0435. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0432 \u043c\u0430\u0441\u0442\u0435\u0440 \u043e\u0431\u0449\u0435\u0435 \u043f\u043e\u043b\u0435. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 GUI \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442 \u0435\u0433\u043e, \u043a\u0430\u043a \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440.<\/p>\n<pre><code class=\"cs\">\tpublic Texture2D[] textures;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/beb\/aa7\/d6d\/bebaa7d6dd8e0d995ea485d670ea5a0a.png\"><\/div>\n<p>  <i>\u041c\u0430\u0441\u0442\u0435\u0440 \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438.<\/i><\/p>\n<h3>\u0427\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c<\/h3>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 <em>Create<\/em> \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u043e\u043d\u0430 \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, Unity \u043f\u043e\u0436\u0430\u043b\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u0430 <code>OnWizardCreate<\/code>. \u042d\u0442\u043e \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043c\u0430\u0441\u0442\u0435\u0440.<\/p>\n<pre><code class=\"cs\">\tvoid OnWizardCreate () { \t}<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0430\u0448 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043c\u0430\u0441\u0442\u0435\u0440 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0415\u0441\u043b\u0438 \u043d\u0435\u0442, \u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tvoid OnWizardCreate () { \t\tif (textures.Length == 0) { \t\t\treturn; \t\t} \t}<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u0435\u0441\u0442\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0430\u0441\u0441\u0435\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u041f\u0430\u043d\u0435\u043b\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>EditorUtility.SaveFilePanelInProject<\/code>. \u0415\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0438\u043c\u044f \u043f\u0430\u043d\u0435\u043b\u0438, \u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435. \u0414\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0449\u0435\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 <em>asset<\/em>.<\/p>\n<pre><code class=\"cs\">\t\tif (textures.Length == 0) { \t\t\treturn; \t\t} \t\tEditorUtility.SaveFilePanelInProject( \t\t\t\"Save Texture Array\", \"Texture Array\", \"asset\", \"Save Texture Array\" \t\t);<\/code><\/pre>\n<p>  <code>SaveFilePanelInProject<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443. \u0415\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0436\u0430\u043b \u043d\u0430 \u044d\u0442\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u043e\u0442\u043c\u0435\u043d\u0443, \u0442\u043e \u043f\u0443\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0435\u0440\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443.<\/p>\n<pre><code class=\"cs\">\t\tstring path = EditorUtility.SaveFilePanelInProject( \t\t\t\"Save Texture Array\", \"Texture Array\", \"asset\", \"Save Texture Array\" \t\t); \t\tif (path.Length == 0) { \t\t\treturn; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440<\/h3>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Texture2DArray<\/code>. \u0415\u0433\u043e \u043c\u0435\u0442\u043e\u0434-\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0448\u0438\u0440\u0438\u043d\u044b \u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0434\u043b\u0438\u043d\u044b \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 mip-\u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0414\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0430\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442.<\/p>\n<pre><code class=\"cs\">\t\tif (path.Length == 0) { \t\t\treturn; \t\t}  \t\tTexture2D t = textures[0]; \t\tTexture2DArray textureArray = new Texture2DArray( \t\t\tt.width, t.height, textures.Length, t.format, t.mipmapCount &gt; 1 \t\t);<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u2014 \u044d\u0442\u043e \u0435\u0434\u0438\u043d\u044b\u0439 \u0440\u0435\u0441\u0443\u0440\u0441 GPU, \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0440\u0435\u0436\u0438\u043c\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u0417\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043d\u043e\u0432\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0432\u0443\u044e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443.<\/p>\n<pre><code class=\"cs\">\t\tTexture2DArray textureArray = new Texture2DArray( \t\t\tt.width, t.height, textures.Length, t.format, t.mipmapCount &gt; 1 \t\t); \t\ttextureArray.anisoLevel = t.anisoLevel; \t\ttextureArray.filterMode = t.filterMode; \t\ttextureArray.wrapMode = t.wrapMode;<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u0430 <code>Graphics.CopyTexture<\/code>. \u041c\u0435\u0442\u043e\u0434 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0441\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 mip-\u0443\u0440\u043e\u0432\u043d\u044e \u0437\u0430 \u0440\u0430\u0437. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432\u0441\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0438 \u0438\u0445 mip-\u0443\u0440\u043e\u0432\u043d\u0438. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0438\u0437 \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0438 mip-\u0443\u0440\u043e\u0432\u043d\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438, \u0438\u0445 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e.<\/p>\n<pre><code class=\"cs\">\t\ttextureArray.wrapMode = t.wrapMode;  \t\tfor (int i = 0; i &lt; textures.Length; i++) { \t\t\tfor (int m = 0; m &lt; t.mipmapCount; m++) { \t\t\t\tGraphics.CopyTexture(textures[i], 0, m, textureArray, i, m); \t\t\t} \t\t}<\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u043d\u043e \u043e\u043d \u043f\u043e\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0441\u0441\u0435\u0442\u043e\u043c. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 <code>AssetDatabase.CreateAsset<\/code> \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0438 \u0435\u0433\u043e \u043f\u0443\u0442\u0451\u043c. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0438 \u043e\u043d \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u043e\u043a\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\t\tfor (int i = 0; i &lt; textures.Length; i++) { \t\t\t\u2026 \t\t}  \t\tAssetDatabase.CreateAsset(textureArray, path);<\/code><\/pre>\n<h3>\u0422\u0435\u043a\u0441\u0442\u0443\u0440\u044b<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b. \u0412\u043e\u0442 \u043f\u044f\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0446\u0432\u0435\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430. \u0416\u0451\u043b\u0442\u044b\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u0435\u0441\u043a\u043e\u043c, \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u2014 \u0442\u0440\u0430\u0432\u043e\u0439, \u0441\u0438\u043d\u0438\u0439 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0437\u0435\u043c\u043b\u0451\u0439, \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u0439 \u2014 \u043a\u0430\u043c\u043d\u0435\u043c, \u0430 \u0431\u0435\u043b\u044b\u0439 \u2014 \u0441\u043d\u0435\u0433\u043e\u043c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/195\/104\/a40\/195104a4070bfa42e6c4e0eaff218d42.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0d7\/777\/f86\/0d7777f865b086c46a1c95a06380c66a.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/0f8\/30b\/55f\/0f830b55ffdbc729bc02d013805bb2c3.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/347\/4eb\/37b\/3474eb37b3a5404866a6fd384e9c6352.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6de\/0eb\/fa3\/6de0ebfa32b5b0b04c8c082e6cce0c01.png\"><\/div>\n<p>  <i>\u0422\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043f\u0435\u0441\u043a\u0430, \u0442\u0440\u0430\u0432\u044b, \u0437\u0435\u043c\u043b\u0438, \u043a\u0430\u043c\u043d\u044f \u0438 \u0441\u043d\u0435\u0433\u0430.<\/i><\/p>\n<p>  \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044f\u043c\u0438 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0433\u043e \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u042d\u0442\u043e \u043b\u0451\u0433\u043a\u0438\u0435 \u043f\u0441\u0435\u0432\u0434\u043e\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0441\u043e\u0437\u0434\u0430\u043b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/catlikecoding.com\/numberflow\/\">NumberFlow<\/a>. \u042f \u0441\u0442\u0440\u0435\u043c\u0438\u043b\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0442\u0438\u043f\u044b \u0438 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043d\u0435 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0443\u044e\u0449\u0438\u0435 \u0441 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u043c \u043f\u043e\u043b\u0438\u0433\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u043b\u044c\u0435\u0444\u043e\u043c. \u0424\u043e\u0442\u043e\u0440\u0435\u0430\u043b\u0438\u0437\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0432 \u043d\u0438\u0445 \u043c\u0430\u043b\u043e \u043e\u0442\u0447\u0451\u0442\u043b\u0438\u0432\u044b\u0445 \u0447\u0435\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0431\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u044d\u0442\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u043c\u0430\u0441\u0442\u0435\u0440\u0430, \u0443\u0431\u0435\u0434\u0438\u0432\u0448\u0438\u0441\u044c, \u0447\u0442\u043e \u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0446\u0432\u0435\u0442\u0430\u043c. \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0441\u043e\u043a, \u0437\u0430\u0442\u0435\u043c \u0442\u0440\u0430\u0432\u0430, \u0437\u0435\u043c\u043b\u044f, \u043a\u0430\u043c\u0435\u043d\u044c \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0441\u043d\u0435\u0433.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/5ec\/511\/2a1\/5ec5112a1bdaa4f170ec382b2549ad9d.png\"><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/a54\/4e8\/1f0\/a544e81f0c74fa36290553a6c6a328df.png\"><\/div>\n<p>  <i>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440.<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0441\u0441\u0435\u0442\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0435\u0433\u043e \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0438\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6e1\/8f3\/8d6\/6e18f38d6682f71b3c8a999823642cd4.png\"><\/div>\n<p>  <i>\u0418\u043d\u0441\u043f\u0435\u043a\u0442\u043e\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440.<\/i><\/p>\n<p>  \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u0417\u0430\u043c\u0435\u0442\u044c\u0442\u0435, \u0447\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c <em>Is Readable<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0438\u043a\u0441\u0435\u043b\u0435\u0439, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0433\u043e. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u043c\u0430\u0441\u0442\u0435\u0440\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 <code>Texture2DArray<\/code> \u043d\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0443.<\/p>\n<p>  (\u0412 Unity 5.6 \u0435\u0441\u0442\u044c \u0431\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0440\u0442\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0432 \u0441\u0431\u043e\u0440\u043a\u0430\u0445 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445. \u041e\u0431\u043e\u0439\u0442\u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e, \u043d\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044f <em>Is Readable<\/em>.)<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0443\u0442 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u0435 <em>Color Space<\/em>, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438\u0441\u044f \u0432 \u0433\u0430\u043c\u043c\u0430-\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u043e. \u0415\u0441\u043b\u0438 \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u043b\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0442\u043e \u043f\u043e\u043b\u044e \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 <code>Texture2DArray<\/code> \u0435\u0441\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u043e\u0434\u043d\u0430\u043a\u043e <code>Texture2D<\/code> \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u043e\u043d\u043e \u0432 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0438\u043b\u0438 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043b\u044e\u0431\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<h3>\u0428\u0435\u0439\u0434\u0435\u0440<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c. \u041f\u043e\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0448\u0435\u0439\u0434\u0435\u0440 <em>VertexColors<\/em>. \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u0443\u0435\u043c \u0435\u0433\u043e \u0432 <em>Terrain<\/em>. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043c \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <em>_MainTex<\/em> \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0435\u043c\u0443 \u0430\u0441\u0441\u0435\u0442.<\/p>\n<pre><code>Shader \"Custom\/Terrain\" { \tProperties { \t\t_Color (\"Color\", Color) = (1,1,1,1) \t\t_MainTex (\"Terrain Texture Array\", 2DArray) = \"white\" {} \t\t_Glossiness (\"Smoothness\", Range(0,1)) = 0.5 \t\t_Metallic (\"Metallic\", Range(0,1)) = 0.0 \t} \t\u2026 }<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/878\/0b2\/3de\/8780b23ded3ced3ab980a039d0f5753d.png\"><\/div>\n<p>  <i>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430 \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 \u0438\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445, \u043d\u0443\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c target level \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u0441 3.0 \u0434\u043e 3.5.<\/p>\n<pre><code>\t\t#pragma target 3.5<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>_MainTex<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0442\u0438\u043f. \u0422\u0438\u043f \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u0441\u044f \u043c\u0430\u043a\u0440\u043e\u0441 <code>UNITY_DECLARE_TEX2DARRAY<\/code>.<\/p>\n<pre><code>\/\/\t\tsampler2D _MainTex; \t\tUNITY_DECLARE_TEX2DARRAY(_MainTex);<\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0448\u0435\u0439\u0434\u0435\u0440\u0430\u0445, \u0434\u043b\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b XZ \u043c\u0438\u0440\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432\u0432\u043e\u0434\u0430 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e\u0433\u043e \u0448\u0435\u0439\u0434\u0435\u0440\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0432 \u043c\u0438\u0440\u0435. \u0423\u0434\u0430\u043b\u0438\u043c \u0442\u0430\u043a\u0436\u0435 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<pre><code>\t\tstruct Input { \/\/\t\t\tfloat2 uv_MainTex; \t\t\tfloat4 color : COLOR; \t\t\tfloat3 worldPos; \t\t};<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441 <code>UNITY_SAMPLE_TEX2DARRAY<\/code>. \u0414\u043b\u044f \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0435\u043c\u0443 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0442\u0440\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0435 \u2014 \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u041c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 XZ \u043c\u0438\u0440\u0430, \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043d\u0430 0.02. \u0422\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043f\u0440\u0438 \u043f\u043e\u043b\u043d\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438. \u0422\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<p>  \u0422\u0440\u0435\u0442\u044c\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u043a\u0430\u043a \u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435. \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f float, \u043f\u0435\u0440\u0435\u0434 \u0438\u043d\u0434\u0435\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 GPU \u043e\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u0442 \u0438\u0445. \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043a\u0430 \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a\u0430\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u043d\u0443\u0436\u043d\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e. \u0422\u0430\u043a\u0436\u0435 \u043d\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043b\u0438\u044f\u0442\u044c \u0446\u0432\u0435\u0442 \u0432\u0435\u0440\u0448\u0438\u043d\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e splat map.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfloat2 uv = IN.worldPos.xz * 0.02; \t\t\tfixed4 c = UNITY_SAMPLE_TEX2DARRAY(_MainTex, float3(uv, 0)); \t\t\tAlbedo = c.rgb * _Color; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/c08\/a19\/df0\/c08a19df0f6c0674406e4922b6595585.png\"><\/div>\n<p>  <i>\u0412\u0441\u0451 \u0441\u0442\u0430\u043b\u043e \u043f\u0435\u0441\u043a\u043e\u043c.<\/i><\/p>\n<p>  <a href=\"http:\/\/texture-arrays\/texture-arrays.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0412\u044b\u0431\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u0443\u0440<\/h2>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 splat map \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u0442\u0440\u0438 \u0442\u0438\u043f\u0430 \u043d\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440, \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440. \u041d\u043e \u043f\u043e\u043a\u0430 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440\u0443, \u043a\u0430\u043a\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u043e \u0442\u0440\u0451\u0445 \u0442\u0438\u043f\u043e\u0432, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c \u0442\u0440\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0434\u043b\u044f \u0432\u0435\u0440\u0448\u0438\u043d. \u0412\u0441\u0435 \u0442\u0440\u0438 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0435 \u0436\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u043c \u0446\u0432\u0435\u0442\u043e\u043c.<\/p>\n<h3>\u0414\u0430\u043d\u043d\u044b\u0435 \u043c\u0435\u0448\u0435\u0439<\/h3>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 UV \u043c\u0435\u0448\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u043e \u0442\u0440\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430, \u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 2D-\u043d\u0430\u0431\u043e\u0440\u043e\u0432 UV \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u043d\u0430\u0431\u043e\u0440\u044b UV \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexMesh<\/code> \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a <code>Vector3<\/code>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043d\u0430 \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic bool useCollider, useColors, useUVCoordinates, useUV2Coordinates; \tpublic bool useTerrainTypes;  \t[NonSerialized] List&lt;Vector3&gt; vertices, terrainTypes;<\/code><\/pre>\n<p>  \u0412\u043a\u043b\u044e\u0447\u0438\u043c \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0434\u043b\u044f \u0434\u043e\u0447\u0435\u0440\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <em>Terrain<\/em> \u043f\u0440\u0435\u0444\u0430\u0431\u0430 <em>Hex Grid Chunk<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/728\/0c5\/4eb\/7280c54ebcd1a6063fb3df9f0328cc5b.png\"><\/div>\n<p>  <i>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/i><\/p>\n<p>  \u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0431\u0443\u0434\u0435\u043c \u0431\u0440\u0430\u0442\u044c \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0441\u043f\u0438\u0441\u043e\u043a <code>Vector3<\/code> \u0434\u043b\u044f \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u043c\u0435\u0448\u0430.<\/p>\n<pre><code class=\"cs\">\tpublic void Clear () { \t\t\u2026 \t\tif (useTerrainTypes) { \t\t\tterrainTypes = ListPool&lt;Vector3&gt;.Get(); \t\t} \t\ttriangles = ListPool&lt;int&gt;.Get(); \t}<\/code><\/pre>\n<p>  \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0448\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043d\u0430\u0431\u043e\u0440\u0435 UV. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u043e\u0432\u0430\u0442\u044c \u0441 \u0434\u0432\u0443\u043c\u044f \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043d\u0430\u0431\u043e\u0440\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u043c\u044b \u043a\u043e\u0433\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432\u043c\u0435\u0441\u0442\u0435.<\/p>\n<pre><code class=\"cs\">\tpublic void Apply () { \t\t\u2026 \t\tif (useTerrainTypes) { \t\t\thexMesh.SetUVs(2, terrainTypes); \t\t\tListPool&lt;Vector3&gt;.Add(terrainTypes); \t\t} \t\thexMesh.SetTriangles(triangles, 0); \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f <code>Vector3<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430 \u043e\u0434\u043d\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0442\u0440\u0438\u0436\u0434\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void AddTriangleTerrainTypes (Vector3 types) { \t\tterrainTypes.Add(types); \t\tterrainTypes.Add(types); \t\tterrainTypes.Add(types); \t}<\/code><\/pre>\n<p>  \u0421\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 quad-\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e. \u0412\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void AddQuadTerrainTypes (Vector3 types) { \t\tterrainTypes.Add(types); \t\tterrainTypes.Add(types); \t\tterrainTypes.Add(types); \t\tterrainTypes.Add(types); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0412\u0435\u0435\u0440\u044b \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0440\u0451\u0431\u0435\u0440<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0438\u043f\u044b \u043a \u0434\u0430\u043d\u043d\u044b\u043c \u043c\u0435\u0448\u0435\u0439 \u0432 <code>HexGridChunk<\/code>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0441 <code>TriangulateEdgeFan<\/code>. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0434\u0438 \u043b\u0443\u0447\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0432\u0435\u0440\u0448\u0438\u043d \u0438 \u0446\u0432\u0435\u0442\u043e\u0432. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0435\u043c\u0443 <code>color1<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0446\u0432\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0430 \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeFan (Vector3 center, EdgeVertices edge, Color color) { \t\tterrain.AddTriangle(center, edge.v1, edge.v2); \/\/\t\tterrain.AddTriangleColor(color); \t\tterrain.AddTriangle(center, edge.v2, edge.v3); \/\/\t\tterrain.AddTriangleColor(color); \t\tterrain.AddTriangle(center, edge.v3, edge.v4); \/\/\t\tterrain.AddTriangleColor(color); \t\tterrain.AddTriangle(center, edge.v4, edge.v5); \/\/\t\tterrain.AddTriangleColor(color); \t\t \t\tterrain.AddTriangleColor(color1); \t\tterrain.AddTriangleColor(color1); \t\tterrain.AddTriangleColor(color1); \t\tterrain.AddTriangleColor(color1); \t}<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0446\u0432\u0435\u0442\u043e\u0432 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0442\u0438\u043f\u044b \u0432 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c\u0438, \u044d\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0439 \u0446\u0432\u0435\u0442. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>Vector3<\/code>. \u041d\u0430\u043c \u0432\u0430\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043a\u0430\u043d\u0430\u043b\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 splat map \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u0440\u0430\u0441\u043d\u0430\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435\u043c \u0442\u0440\u0451\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u0441\u0432\u043e\u0438\u043c \u0438\u043c \u043e\u0434\u0438\u043d \u0442\u0438\u043f.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeFan (Vector3 center, EdgeVertices edge, float type) { \t\t\u2026  \t\tVector3 types; \t\ttypes.x = types.y = types.z = type; \t\tterrain.AddTriangleTerrainTypes(types); \t\tterrain.AddTriangleTerrainTypes(types); \t\tterrain.AddTriangleTerrainTypes(types); \t\tterrain.AddTriangleTerrainTypes(types); \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0446\u0432\u0435\u0442\u0430 \u043d\u0430 \u0438\u043d\u0434\u0435\u043a\u0441 \u0442\u0438\u043f\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u044f\u0447\u0435\u0439\u043a\u0438. \u0412\u043d\u0435\u0441\u0451\u043c \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 <code>TriangulateWithoutRiver<\/code>, <code>TriangulateAdjacentToRiver<\/code> \u0438 <code>TriangulateWithRiverBeginOrEnd<\/code>.<\/p>\n<pre><code class=\"cs\">\/\/\t\tTriangulateEdgeFan(center, e, color1); \t\tTriangulateEdgeFan(center, e, cell.TerrainTypeIndex);<\/code><\/pre>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 Play \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u0438, \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0449\u0438\u0435, \u0447\u0442\u043e \u0442\u0440\u0435\u0442\u044c\u0438 \u043d\u0430\u0431\u043e\u0440\u044b UV \u043c\u0435\u0448\u0435\u0439 \u0432\u044b\u0445\u043e\u0434\u044f\u0442 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u044b. \u0422\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443 \u0438 quad. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u043c \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c <code>HexGridChunk<\/code>.<\/p>\n<h3>\u041f\u043e\u043b\u043e\u0441\u044b \u0440\u0451\u0431\u0435\u0440<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u043e\u043b\u043e\u0441\u044b \u0440\u0435\u0431\u0440\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0438\u043f\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0435\u0441\u0442\u044c \u043f\u043e \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0438\u0445 \u043a\u0430\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0442\u0438\u043f\u043e\u0432, \u0434\u0432\u0443\u043c \u043a\u0430\u043d\u0430\u043b\u0430\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u044b \u044d\u0442\u0438 \u0442\u0438\u043f\u044b. \u0422\u0440\u0435\u0442\u0438\u0439 \u043a\u0430\u043d\u0430\u043b \u043d\u0435 \u0432\u0430\u0436\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0440\u0430\u0432\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443. \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0446\u0432\u0435\u0442\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a quad-\u0430\u043c \u0442\u0438\u043f\u044b.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateEdgeStrip ( \t\tEdgeVertices e1, Color c1, float type1, \t\tEdgeVertices e2, Color c2, float type2, \t\tbool hasRoad = false \t) { \t\tterrain.AddQuad(e1.v1, e1.v2, e2.v1, e2.v2); \t\tterrain.AddQuad(e1.v2, e1.v3, e2.v2, e2.v3); \t\tterrain.AddQuad(e1.v3, e1.v4, e2.v3, e2.v4); \t\tterrain.AddQuad(e1.v4, e1.v5, e2.v4, e2.v5);  \t\tterrain.AddQuadColor(c1, c2); \t\tterrain.AddQuadColor(c1, c2); \t\tterrain.AddQuadColor(c1, c2); \t\tterrain.AddQuadColor(c1, c2);  \t\tVector3 types; \t\ttypes.x = types.z = type1; \t\ttypes.y = type2; \t\tterrain.AddQuadTerrainTypes(types); \t\tterrain.AddQuadTerrainTypes(types); \t\tterrain.AddQuadTerrainTypes(types); \t\tterrain.AddQuadTerrainTypes(types);  \t\tif (hasRoad) { \t\t\tTriangulateRoadSegment(e1.v2, e1.v3, e1.v4, e2.v2, e2.v3, e2.v4); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b <code>TriangulateEdgeStrip<\/code>. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 <code>TriangulateAdjacentToRiver<\/code>, <code>TriangulateWithRiverBeginOrEnd<\/code> \u0438 <code>TriangulateWithRiver<\/code> \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u0435\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d \u043f\u043e\u043b\u043e\u0441\u044b \u0440\u0435\u0431\u0440\u0430.<\/p>\n<pre><code class=\"cs\">\/\/\t\tTriangulateEdgeStrip(m, color1, e, color1); \t\tTriangulateEdgeStrip( \t\t\tm, color1, cell.TerrainTypeIndex, \t\t\te, color1, cell.TerrainTypeIndex \t\t);<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0440\u0435\u0431\u0440\u0430 <code>TriangulateConnection<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043b\u044f \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0438 \u0442\u0438\u043f \u0441\u043e\u0441\u0435\u0434\u0430 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0433\u043e \u0440\u0435\u0431\u0440\u0430. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0438\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateConnection ( \t\tHexDirection direction, HexCell cell, EdgeVertices e1 \t) { \t\t\u2026 \t\tif (cell.GetEdgeType(direction) == HexEdgeType.Slope) { \t\t\tTriangulateEdgeTerraces(e1, cell, e2, neighbor, hasRoad); \t\t} \t\telse { \/\/\t\t\tTriangulateEdgeStrip(e1, color1, e2, color2, hasRoad); \t\t\tTriangulateEdgeStrip( \t\t\t\te1, color1, cell.TerrainTypeIndex, \t\t\t\te2, color2, neighbor.TerrainTypeIndex, hasRoad \t\t\t); \t\t} \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a <code>TriangulateEdgeTerraces<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0438\u0436\u0434\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>TriangulateEdgeStrip<\/code>. \u0422\u0438\u043f\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0443\u043f\u043e\u0432 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438.<\/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(color1, color2, 1); \t\tfloat t1 = beginCell.TerrainTypeIndex; \t\tfloat t2 = endCell.TerrainTypeIndex;  \t\tTriangulateEdgeStrip(begin, color1, t1, e2, c2, t2, 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(color1, color2, i); \t\t\tTriangulateEdgeStrip(e1, c1, t1, e2, c2, t2, hasRoad); \t\t}  \t\tTriangulateEdgeStrip(e2, c2, t1, end, color2, t2, hasRoad); \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0423\u0433\u043b\u044b<\/h3>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0443\u0433\u043b\u0430 \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a. \u041d\u0438\u0436\u043d\u044f\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0442\u0438\u043f, \u043b\u0435\u0432\u0430\u044f \u2014 \u0432\u0442\u043e\u0440\u043e\u0439, \u0430 \u043f\u0440\u0430\u0432\u0430\u044f \u2014 \u0442\u0440\u0435\u0442\u0438\u0439. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441 \u0438\u0445 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0435\u043a\u0442\u043e\u0440 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCorner ( \t\tVector3 bottom, HexCell bottomCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\t\u2026 \t\telse { \t\t\tterrain.AddTriangle(bottom, left, right); \t\t\tterrain.AddTriangleColor(color1, color2, color3); \t\t\tVector3 types; \t\t\ttypes.x = bottomCell.TerrainTypeIndex; \t\t\ttypes.y = leftCell.TerrainTypeIndex; \t\t\ttypes.z = rightCell.TerrainTypeIndex; \t\t\tterrain.AddTriangleTerrainTypes(types); \t\t}  \t\tfeatures.AddWall(bottom, bottomCell, left, leftCell, right, rightCell); \t}<\/code><\/pre>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432 <code>TriangulateCornerTerraces<\/code>, \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438 \u0433\u0440\u0443\u043f\u043f\u0443 quad-\u043e\u0432.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerTerraces ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\tVector3 v3 = HexMetrics.TerraceLerp(begin, left, 1); \t\tVector3 v4 = HexMetrics.TerraceLerp(begin, right, 1); \t\tColor c3 = HexMetrics.TerraceLerp(color1, color2, 1); \t\tColor c4 = HexMetrics.TerraceLerp(color1, color3, 1); \t\tVector3 types; \t\ttypes.x = beginCell.TerrainTypeIndex; \t\ttypes.y = leftCell.TerrainTypeIndex; \t\ttypes.z = rightCell.TerrainTypeIndex;  \t\tterrain.AddTriangle(begin, v3, v4); \t\tterrain.AddTriangleColor(color1, c3, c4); \t\tterrain.AddTriangleTerrainTypes(types);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tVector3 v1 = v3; \t\t\tVector3 v2 = v4; \t\t\tColor c1 = c3; \t\t\tColor c2 = c4; \t\t\tv3 = HexMetrics.TerraceLerp(begin, left, i); \t\t\tv4 = HexMetrics.TerraceLerp(begin, right, i); \t\t\tc3 = HexMetrics.TerraceLerp(color1, color2, i); \t\t\tc4 = HexMetrics.TerraceLerp(color1, color3, i); \t\t\tterrain.AddQuad(v1, v2, v3, v4); \t\t\tterrain.AddQuadColor(c1, c2, c3, c4); \t\t\tterrain.AddQuadTerrainTypes(types); \t\t}  \t\tterrain.AddQuad(v3, v4, left, right); \t\tterrain.AddQuadColor(c3, c4, color2, color3); \t\tterrain.AddQuadTerrainTypes(types); \t}<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0441\u043c\u0435\u0448\u0435\u043d\u0438\u0438 \u0443\u0441\u0442\u0443\u043f\u043e\u0432 \u0438 \u043e\u0431\u0440\u044b\u0432\u043e\u0432 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>TriangulateBoundaryTriangle<\/code>. \u041f\u0440\u043e\u0441\u0442\u043e \u0434\u0430\u0434\u0438\u043c \u0435\u043c\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0442\u0438\u043f\u043e\u0432 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a\u043e \u0432\u0441\u0435\u043c \u0435\u0433\u043e \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateBoundaryTriangle ( \t\tVector3 begin, Color beginColor, \t\tVector3 left, Color leftColor, \t\tVector3 boundary, Color boundaryColor, Vector3 types \t) { \t\tVector3 v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, 1)); \t\tColor c2 = HexMetrics.TerraceLerp(beginColor, leftColor, 1);  \t\tterrain.AddTriangleUnperturbed(HexMetrics.Perturb(begin), v2, boundary); \t\tterrain.AddTriangleColor(beginColor, c2, boundaryColor); \t\tterrain.AddTriangleTerrainTypes(types);  \t\tfor (int i = 2; i &lt; HexMetrics.terraceSteps; i++) { \t\t\tVector3 v1 = v2; \t\t\tColor c1 = c2; \t\t\tv2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, i)); \t\t\tc2 = HexMetrics.TerraceLerp(beginColor, leftColor, i); \t\t\tterrain.AddTriangleUnperturbed(v1, v2, boundary); \t\t\tterrain.AddTriangleColor(c1, c2, boundaryColor); \t\t\tterrain.AddTriangleTerrainTypes(types); \t\t}  \t\tterrain.AddTriangleUnperturbed(v2, HexMetrics.Perturb(left), boundary); \t\tterrain.AddTriangleColor(c2, leftColor, boundaryColor); \t\tterrain.AddTriangleTerrainTypes(types); \t}<\/code><\/pre>\n<p>  \u0412 <code>TriangulateCornerTerracesCliff<\/code> \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0442\u0438\u043f\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a. \u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0438\u043c \u0432 <code>TriangulateBoundaryTriangle<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerTerracesCliff ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\tfloat b = 1f \/ (rightCell.Elevation - beginCell.Elevation); \t\tif (b &lt; 0) { \t\t\tb = -b; \t\t} \t\tVector3 boundary = Vector3.Lerp( \t\t\tHexMetrics.Perturb(begin), HexMetrics.Perturb(right), b \t\t); \t\tColor boundaryColor = Color.Lerp(color1, color3, b); \t\tVector3 types; \t\ttypes.x = beginCell.TerrainTypeIndex; \t\ttypes.y = leftCell.TerrainTypeIndex; \t\ttypes.z = rightCell.TerrainTypeIndex;  \t\tTriangulateBoundaryTriangle( \t\t\tbegin, color1, left, color2, boundary, boundaryColor, types \t\t);  \t\tif (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { \t\t\tTriangulateBoundaryTriangle( \t\t\t\tleft, color2, right, color3, boundary, boundaryColor, types \t\t\t); \t\t} \t\telse { \t\t\tterrain.AddTriangleUnperturbed( \t\t\t\tHexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary \t\t\t); \t\t\tterrain.AddTriangleColor(color2, color3, boundaryColor); \t\t\tterrain.AddTriangleTerrainTypes(types); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a <code>TriangulateCornerCliffTerraces<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateCornerCliffTerraces ( \t\tVector3 begin, HexCell beginCell, \t\tVector3 left, HexCell leftCell, \t\tVector3 right, HexCell rightCell \t) { \t\tfloat b = 1f \/ (leftCell.Elevation - beginCell.Elevation); \t\tif (b &lt; 0) { \t\t\tb = -b; \t\t} \t\tVector3 boundary = Vector3.Lerp( \t\t\tHexMetrics.Perturb(begin), HexMetrics.Perturb(left), b \t\t); \t\tColor boundaryColor = Color.Lerp(color1, color2, b); \t\tVector3 types; \t\ttypes.x = beginCell.TerrainTypeIndex; \t\ttypes.y = leftCell.TerrainTypeIndex; \t\ttypes.z = rightCell.TerrainTypeIndex;  \t\tTriangulateBoundaryTriangle( \t\t\tright, color3, begin, color1, boundary, boundaryColor, types \t\t);  \t\tif (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { \t\t\tTriangulateBoundaryTriangle( \t\t\t\tleft, color2, right, color3, boundary, boundaryColor, types \t\t\t); \t\t} \t\telse { \t\t\tterrain.AddTriangleUnperturbed( \t\t\t\tHexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary \t\t\t); \t\t\tterrain.AddTriangleColor(color2, color3, boundaryColor); \t\t\tterrain.AddTriangleTerrainTypes(types); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0420\u0435\u043a\u0438<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e <code>TriangulateWithRiver<\/code>. \u0422\u0430\u043a \u043a\u0430\u043a \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 \u0446\u0435\u043d\u0442\u0440\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u0442\u043e \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0442\u0438\u043f\u043e\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u043a \u0442\u0440\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u0430\u043c \u0438 quad-\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\tvoid TriangulateWithRiver ( \t\tHexDirection direction, HexCell cell, Vector3 center, EdgeVertices e \t) { \t\t\u2026  \t\tterrain.AddTriangleColor(color1); \t\tterrain.AddQuadColor(color1); \t\tterrain.AddQuadColor(color1); \t\tterrain.AddTriangleColor(color1);  \t\tVector3 types; \t\ttypes.x = types.y = types.z = cell.TerrainTypeIndex; \t\tterrain.AddTriangleTerrainTypes(types); \t\tterrain.AddQuadTerrainTypes(types); \t\tterrain.AddQuadTerrainTypes(types); \t\tterrain.AddTriangleTerrainTypes(types);  \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043c\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432<\/h3>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u0435\u0448\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u0412\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u2014 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0448\u0435\u0439\u0434\u0435\u0440 <em>Terrain<\/em> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445. \u0427\u0442\u043e\u0431\u044b \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u043f\u043e\u043f\u0430\u043b\u0438 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u0445 \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u044b\u0439 \u0448\u0435\u0439\u0434\u0435\u0440. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u0430\u043a \u043c\u044b \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u0438 \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 <em>Estuary<\/em>. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0432\u0432\u043e\u0434\u0430 \u043f\u043e\u043b\u0435 <code>float3 terrain<\/code> \u0438 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0432 \u043d\u0435\u0433\u043e <code>v.texcoord2.xyz<\/code>.<\/p>\n<pre><code>\t\t#pragma surface surf Standard fullforwardshadows vertex:vert \t\t#pragma target 3.5  \t\t\u2026  \t\tstruct Input { \t\t\tfloat4 color : COLOR; \t\t\tfloat3 worldPos; \t\t\tfloat3 terrain; \t\t}; \t\t \t\tvoid vert (inout appdata_full v, out Input data) { \t\t\tUNITY_INITIALIZE_OUTPUT(Input, data); \t\t\tdata.terrain = v.texcoord2.xyz; \t\t}<\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043f\u043e \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 \u043d\u0430 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u0435\u043a\u0441\u0442\u0443\u0440, \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043c\u043e\u0434\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u044d\u043c\u043f\u043b\u0430 \u0441\u043e splat map \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430.<\/p>\n<pre><code>\t\tfloat4 GetTerrainColor (Input IN, int index) { \t\t\tfloat3 uvw = float3(IN.worldPos.xz * 0.02, IN.terrain[index]); \t\t\tfloat4 c = UNITY_SAMPLE_TEX2DARRAY(_MainTex, uvw); \t\t\treturn c * IN.color[index]; \t\t}  \t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\t\u2026 \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c, \u043a\u0430\u043a \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c?<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0430. \u041f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u0430-\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b <code>color[0]<\/code> \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e <code>color.r<\/code>. \u0410 <code>color[1]<\/code> \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e <code>color.g<\/code>, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/div>\n<\/div>\n<p>  \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430 \u0438 \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<pre><code>\t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \/\/\t\t\tfloat2 uv = IN.worldPos.xz * 0.02; \t\t\tfixed4 c = \t\t\t\tGetTerrainColor(IN, 0) + \t\t\t\tGetTerrainColor(IN, 1) + \t\t\t\tGetTerrainColor(IN, 2); \t\t\to.Albedo = c.rgb * _Color; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/da9\/2fa\/577\/da92fa577510b38d4d0cdb99db83aea0.png\"><\/div>\n<p>  <i>\u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u043b\u044c\u0435\u0444.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043b\u044c\u0435\u0444 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438. \u041e\u043d\u0438 \u0441\u043c\u0435\u0448\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 UV-\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043c\u0438\u0440\u0430, \u043e\u043d\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0441 \u0432\u044b\u0441\u043e\u0442\u043e\u0439. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u0434\u043e\u043b\u044c \u0440\u0435\u0437\u043a\u0438\u0445 \u043e\u0431\u0440\u044b\u0432\u043e\u0432 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044b\u043c\u0438. \u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0435\u0439\u0442\u0440\u0430\u043b\u044c\u043d\u044b \u0438 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0440\u0438\u0430\u0442\u0438\u0432\u043d\u044b, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u043c\u0438. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043d\u0435\u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 \u0440\u0430\u0441\u0442\u044f\u0436\u043a\u0438. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0435\u0439 \u0438\u043b\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430\u043c\u0438 \u043e\u0431\u0440\u044b\u0432\u043e\u0432, \u043d\u043e \u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 \u043c\u044b \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<h3>\u041f\u043e\u0434\u0447\u0438\u0441\u0442\u043a\u0430<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0432\u0435\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b, \u0431\u0443\u0434\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u0434\u0430\u0436\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043d\u043e \u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u044e\u0441\u044c \u043d\u0430 \u0430\u0431\u0431\u0440\u0435\u0432\u0438\u0430\u0442\u0443\u0440\u0430\u0445, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0438\u043b\u044e \u0438\u043c\u0435\u044e\u0449\u0435\u0439\u0441\u044f \u0441\u0445\u0435\u043c\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/263\/c52\/c81\/263c52c812c97de2b8095b6ca80a8f5d.png\"><\/div>\n<p>  <i>\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432\u044b\u0431\u043e\u0440\u0430 \u0440\u0435\u043b\u044c\u0435\u0444\u0430.<\/i><\/p>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <code>HexCell<\/code> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0446\u0432\u0435\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443\u0434\u0430\u043b\u0438\u043c \u0435\u0433\u043e.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic Color Color { \/\/\t\tget { \/\/\t\t\treturn HexMetrics.colors[terrainTypeIndex]; \/\/\t\t} \/\/\t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0438\u0437 <code>HexGrid<\/code> \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0438\u043c \u043a\u043e\u0434.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic Color[] colors;  \t\u2026  \tvoid Awake () { \t\tHexMetrics.noiseSource = noiseSource; \t\tHexMetrics.InitializeHashGrid(seed); \/\/\t\tHexMetrics.colors = colors; \t\tCreateMap(cellCountX, cellCountZ); \t} \t \t\u2026  \t\u2026  \tvoid OnEnable () { \t\tif (!HexMetrics.noiseSource) { \t\t\tHexMetrics.noiseSource = noiseSource; \t\t\tHexMetrics.InitializeHashGrid(seed); \/\/\t\t\tHexMetrics.colors = colors; \t\t} \t}<\/code><\/pre>\n<p>  \u0418 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043c\u0430\u0441\u0441\u0438\u0432 \u0446\u0432\u0435\u0442\u043e\u0432 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0442\u0430\u043a\u0436\u0435 \u0432 <code>HexMetrics<\/code>.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic static Color[] colors;<\/code><\/pre>\n<p>  <a href=\"http:\/\/selecting-textures\/selecting-textures.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 15: \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u043b\u0438\u043d\u0438\u0438 \u0441\u0435\u0442\u043a\u0438.<\/li>\n<li>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0435\u0436\u0438\u043c\u0430\u043c\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438.<\/li>\n<li>\u0412\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u044f\u0447\u0435\u0439\u043a\u0430\u043c\u0438.<\/li>\n<li>\u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u0443\u0442\u0438 \u0432 \u043e\u0431\u0445\u043e\u0434 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439.<\/li>\n<li>\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435.<\/li>\n<\/ul>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b, \u043c\u044b \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/15b\/b5d\/65d\/15bb5d65de19358da88e581cedad71cb.jpg\"><\/div>\n<p>  <i>\u041a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0439 \u043f\u0443\u0442\u044c \u2014 \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u044f\u043c\u0430\u044f.<\/i><\/p>\n<h2>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u043a\u0438<\/h2>\n<p>  \u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u0430\u0440\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043e\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u043a \u044f\u0447\u0435\u0439\u043a\u0435. \u0427\u0442\u043e\u0431\u044b \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u043e\u043f\u0430\u0441\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0439\u0442\u0438 \u043f\u043e \u0440\u044f\u0434\u0443 \u044f\u0447\u0435\u0435\u043a. \u0427\u0442\u043e\u0431\u044b \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0449\u0435, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u043f\u0446\u0438\u044e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430\u0448\u0430 \u043a\u0430\u0440\u0442\u0430.<\/p>\n<h3>\u0422\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441\u0435\u0442\u043a\u0438<\/h3>\n<p>  \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0448\u0430 \u043a\u0430\u0440\u0442\u044b, \u043b\u0435\u0436\u0430\u0449\u0430\u044f \u0432 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0435\u0442\u043a\u0430 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u0440\u043e\u0432\u043d\u0430\u044f. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u044d\u0442\u043e, \u0441\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u0432 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0441\u0435\u0442\u043a\u0438 \u043d\u0430 \u043a\u0430\u0440\u0442\u0443. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0435\u0439\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0441\u0435\u0442\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/3a7\/74c\/76e\/3a774c76e29b57018450a8e21f5bf1fb.png\"><\/div>\n<p>  <i>\u041f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0430\u044f\u0441\u044f \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u0441\u0435\u0442\u043a\u0438.<\/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 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u0435\u0442\u043a\u0438 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0443\u044e 2 \u043d\u0430 2 \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0430\u044f, \u0430 \u043d\u0435 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u0430\u044f. \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0430\u043c\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u043c, \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044b\u043c. \u041f\u0440\u0438 \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u043a\u043e\u043c\u043f\u0435\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<h3>\u041f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u043a\u0438<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0441\u0435\u0442\u043a\u0438, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0448\u0435\u0439\u0434\u0435\u0440 <em>Terrain<\/em> \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b.<\/p>\n<pre><code>\tProperties { \t\t_Color (\"Color\", Color) = (1,1,1,1) \t\t_MainTex (\"Terrain Texture Array\", 2DArray) = \"white\" {} \t\t_GridTex (\"Grid Texture\", 2D) = \"white\" {} \t\t_Glossiness (\"Smoothness\", Range(0,1)) = 0.5 \t\t_Metallic (\"Metallic\", Range(0,1)) = 0.0 \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/283\/708\/6de\/2837086dedff939d3380396c9146ddfc.png\"><\/div>\n<p>  <i>\u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0441 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u043e\u0439 \u0441\u0435\u0442\u043a\u0438.<\/i><\/p>\n<p>  \u0421\u044d\u043c\u043f\u043b\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 XZ \u043c\u0438\u0440\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0443\u043c\u043d\u043e\u0436\u0438\u043c \u0435\u0451 \u043d\u0430 albedo. \u0422\u0430\u043a \u043a\u0430\u043a \u043b\u0438\u043d\u0438\u0438 \u0441\u0435\u0442\u043a\u0438 \u043d\u0430 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u0435 \u0441\u0435\u0440\u044b\u0435, \u044d\u0442\u043e \u0432\u043f\u043b\u0435\u0442\u0451\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0432 \u0440\u0435\u043b\u044c\u0435\u0444.<\/p>\n<pre><code>\t\tsampler2D _GridTex;  \t\t\u2026  \t\tvoid surf (Input IN, inout SurfaceOutputStandard o) { \t\t\tfixed4 c = \t\t\t\tGetTerrainColor(IN, 0) + \t\t\t\tGetTerrainColor(IN, 1) + \t\t\t\tGetTerrainColor(IN, 2);  \t\t\tfixed4 grid = tex2D(_GridTex, IN.worldPos.xz); \t\t\t \t\t\to.Albedo = c.rgb * grid * _Color; \t\t\to.Metallic = _Metallic; \t\t\to.Smoothness = _Glossiness; \t\t\to.Alpha = c.a; \t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/972\/a3e\/432\/972a3e4323541d1195904c9777a29e07.png\"><\/div>\n<p>  <i>Albedo, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u043c\u0435\u043b\u043a\u0443\u044e \u0441\u0435\u0442\u043a\u0443.<\/i><\/p>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u044f\u0447\u0435\u0439\u043a\u0430\u043c \u043a\u0430\u0440\u0442\u044b. \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0446\u0435\u043d\u0442\u0440\u0430\u043c\u0438 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u044f\u0447\u0435\u0435\u043a \u0440\u0430\u0432\u043d\u043e 15, \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0432\u043e\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0432\u0432\u0435\u0440\u0445 \u043d\u0430 \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b V \u0441\u0435\u0442\u043a\u0438 \u043d\u0430 30. \u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0440\u0430\u0434\u0438\u0443\u0441 \u044f\u0447\u0435\u0435\u043a \u0440\u0430\u0432\u0435\u043d 5\u221a3, \u0430 \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0434\u0432\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432\u043f\u0440\u0430\u0432\u043e, \u043d\u0443\u0436\u043d\u043e \u0432 \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0435. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b U \u0441\u0435\u0442\u043a\u0438 \u043d\u0430 20\u221a3.<\/p>\n<pre><code>\t\t\tfloat2 gridUV = IN.worldPos.xz; \t\t\tgridUV.x *= 1 \/ (4 * 8.66025404); \t\t\tgridUV.y *= 1 \/ (2 * 15.0); \t\t\tfixed4 grid = tex2D(_GridTex, gridUV);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/454\/1ba\/191\/4541ba19123145c27422e2b90b52aa6f.png\"><\/div>\n<p>  <i>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u044f\u0447\u0435\u0435\u043a \u0441\u0435\u0442\u043a\u0438.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043b\u0438\u043d\u0438\u0438 \u0441\u0435\u0442\u043a\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u044f\u0447\u0435\u0439\u043a\u0430\u043c \u043a\u0430\u0440\u0442\u044b. \u041a\u0430\u043a \u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u043e\u043d\u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u044b\u0441\u043e\u0442\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0434\u043e\u043b\u044c \u043e\u0431\u0440\u044b\u0432\u043e\u0432 \u043b\u0438\u043d\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0442\u044f\u043d\u0443\u0442\u044b\u043c\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/98a\/708\/906\/98a7089069b6d04bc708851045c9fe7a.png\"><\/div>\n<p>  <i>\u041f\u0440\u043e\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0432\u044b\u0441\u043e\u0442\u043e\u0439.<\/i><\/p>\n<p>  \u0414\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0441\u0435\u0442\u043a\u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u043f\u043b\u043e\u0445\u0430, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0443 \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/287\/5ac\/690\/2875ac690eb796bf00a86b48d193aec8.png\"><\/div>\n<p>  <i>\u0421\u0435\u0442\u043a\u0430 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438.<\/i><\/p>\n<h3>\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u043a\u0438<\/h3>\n<p>  \u0425\u043e\u0442\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u043a\u0438 \u2014 \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043e\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0451 \u043a\u043e\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u0435\u0448\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0435 \u0432\u0441\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e\u0442 \u0432\u0438\u0434\u0435\u0442\u044c \u0441\u0435\u0442\u043a\u0443 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0435\u0451 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439. \u041c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043a \u0448\u0435\u0439\u0434\u0435\u0440\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 multi_compile, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0441 \u0441\u0435\u0442\u043a\u043e\u0439 \u0438 \u0431\u0435\u0437 \u043d\u0435\u0451. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c <code>GRID_ON<\/code>. \u0423\u0441\u043b\u043e\u0432\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0435 <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/rendering\/part-5\/\">Rendering 5, Multiple Lights<\/a>.<\/p>\n<pre><code>\t\t#pragma surface surf Standard fullforwardshadows vertex:vert \t\t#pragma target 3.5  \t\t#pragma multi_compile _ GRID_ON<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>grid<\/code> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u0435\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 1. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0441\u0435\u0442\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \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 \u0441\u0435\u0442\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u043c \u0441\u043b\u043e\u0432\u043e\u043c <code>GRID_ON<\/code>.<\/p>\n<pre><code>\t\t\tfixed4 grid = 1; \t\t\t#if defined(GRID_ON) \t\t\t\tfloat2 gridUV = IN.worldPos.xz; \t\t\t\tgridUV.x *= 1 \/ (4 * 8.66025404); \t\t\t\tgridUV.y *= 1 \/ (2 * 15.0); \t\t\t\tgrid = tex2D(_GridTex, gridUV); \t\t\t#endif \t\t\t \t\t\to.Albedo = c.rgb * grid * _Color;<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>GRID_ON<\/code> \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043e \u0432 \u0448\u0435\u0439\u0434\u0435\u0440\u0435 \u0440\u0435\u043b\u044c\u0435\u0444\u0430, \u0442\u043e \u0441\u0435\u0442\u043a\u0430 \u043f\u0440\u043e\u043f\u0430\u0434\u0451\u0442. \u0427\u0442\u043e\u0431\u044b \u0441\u043d\u043e\u0432\u0430 \u0435\u0451 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u043c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UI \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u0440\u0442\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, <code>HexMapEditor<\/code> \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b <em>Terrain<\/em> \u0438 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0433\u043e \u0441\u043b\u043e\u0432\u0430<code>GRID_ON<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic Material terrainMaterial; \t \t\u2026 \t \tpublic void ShowGrid (bool visible) { \t\tif (visible) { \t\t\tterrainMaterial.EnableKeyword(\"GRID_ON\"); \t\t} \t\telse { \t\t\tterrainMaterial.DisableKeyword(\"GRID_ON\"); \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7d0\/d53\/873\/7d0d53873a0aace69be804dcbf22d7ce.png\"><\/div>\n<p>  <i>\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043c\u0430\u0440\u0442 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b.<\/i><\/p>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UI \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c <em>Grid<\/em> \u0438 \u0441\u043e\u0435\u0434\u0438\u043d\u0438\u043c \u0435\u0433\u043e \u0441 \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>ShowGrid<\/code>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/56b\/38a\/6b6\/56b38a6b6792eb8b89fb3936a55e9194.png\"><\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0441\u0435\u0442\u043a\u0438.<\/i><\/p>\n<h3>\u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 Play \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u043a\u0438. \u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u0435\u0442\u043a\u0430 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c. \u041f\u0440\u0438 \u0435\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0441\u0435\u0442\u043a\u0430 \u043e\u043f\u044f\u0442\u044c \u0438\u0441\u0447\u0435\u0437\u043d\u0435\u0442. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u044b\u0439\u0434\u0435\u043c \u0438\u0437 \u0440\u0435\u0436\u0438\u043c\u0430 Play, \u043a\u043e\u0433\u0434\u0430 \u0441\u0435\u0442\u043a\u0430 \u0432\u0438\u0434\u0438\u043c\u0430, \u0442\u043e \u043f\u0440\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0440\u0435\u0436\u0438\u043c\u0430 Play \u043e\u043d\u0430 \u0441\u043d\u043e\u0432\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430, \u0445\u043e\u0442\u044f \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0438 \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<p>  \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043c\u044b \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u043e\u0431\u0449\u0435\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 <em>Terrain<\/em>. \u041c\u044b \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0430\u0441\u0441\u0435\u0442 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 Unity. \u0412 \u0441\u0431\u043e\u0440\u043a\u0435 \u043e\u043d\u043e \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u0433\u0440\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u0430\u0441\u044c \u0431\u0435\u0437 \u0441\u0435\u0442\u043a\u0438, \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e <code>GRID_ON<\/code> \u0432 Awake <code>HexMapEditor<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tterrainMaterial.DisableKeyword(\"GRID_ON\"); \t}<\/code><\/pre>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-15\/showing-the-grid\/showing-the-grid.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0420\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u043f\u043e \u043a\u0430\u0440\u0442\u0435, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0441 \u043d\u0435\u0439 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u043b\u0435\u0442\u043a\u0443 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043f\u0443\u0442\u0438. \u041d\u043e \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u043f\u0446\u0438\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u0438\u0441\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u0440\u0442\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439, \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043b\u0438 \u043c\u044b \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<h3>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexMapEditor<\/code> \u0431\u0443\u043b\u0435\u0432\u043e \u043f\u043e\u043b\u0435 <code>editMode<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u0439 \u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434. \u0417\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 UI \u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u0441 \u0440\u0435\u0436\u0438\u043c\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d.<\/p>\n<pre><code class=\"cs\">\tbool editMode; \t \t\u2026  \tpublic void SetEditMode (bool toggle) { \t\teditMode = toggle; \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1bf\/19b\/ace\/1bf19baceed0ecfa766dbe0386ed38d3.png\"><\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0440\u0435\u0436\u0438\u043c\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0437\u043e\u0432 <code>EditCells<\/code> \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c \u043e\u0442 <code>editMode<\/code>.<\/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\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\tif (editMode) { \t\t\t\tEditCells(currentCell); \t\t\t} \t\t\tpreviousCell = currentCell; \t\t} \t\telse { \t\t\tpreviousCell = null; \t\t} \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043a\u0438<\/h3>\n<p>  \u041f\u043e\u043a\u0430 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u0435\u0434\u0438\u043d\u0438\u0446 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u0430\u0440\u0442\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u043c\u044b \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f. \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 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043a\u0438 \u044f\u0447\u0435\u0435\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0445 \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438, \u043a\u043e\u0433\u0434\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<pre><code class=\"cs\">\tpublic void SetEditMode (bool toggle) { \t\teditMode = toggle; \t\thexGrid.ShowUI(!toggle); \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441 \u0440\u0435\u0436\u0438\u043c\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438, \u043c\u0435\u0442\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u044b. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 <code>HexGridChunk.Awake<\/code> \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0445, \u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043d \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<pre><code class=\"cs\">\tvoid Awake () { \t\tgridCanvas = GetComponentInChildren&lt;Canvas&gt;();  \t\tcells = new HexCell[HexMetrics.chunkSizeX * HexMetrics.chunkSizeZ]; \/\/\t\tShowUI(false); \t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/730\/666\/90c\/73066690c998f0715fb22356a0374fed.png\"><\/div>\n<p>  <i>\u041c\u0435\u0442\u043a\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.<\/i><\/p>\n<p>  \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044f\u0447\u0435\u0435\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 Play. \u041d\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u043d\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u0435\u0442\u043a\u0438 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0447\u0438\u0441\u043b\u043e \u043d\u0430 \u044f\u0447\u0435\u0439\u043a\u0443, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u0447\u0438\u0442\u0430\u043b\u0438\u0441\u044c \u043b\u0443\u0447\u0448\u0435. \u0418\u0437\u043c\u0435\u043d\u0438\u043c \u043f\u0440\u0435\u0444\u0430\u0431 <em>Hex Cell Label<\/em>, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0436\u0438\u0440\u043d\u044b\u0439 \u0448\u0440\u0438\u0444\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 8.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8ea\/008\/aa0\/8ea008aa075686891f8815148c70ba06.png\"><\/div>\n<p>  <i>\u041c\u0435\u0442\u043a\u0438 \u0441 \u0436\u0438\u0440\u043d\u044b\u043c \u0448\u0440\u0438\u0444\u0442\u043e\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u0430 8.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 Play \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u0438\u0434\u0435\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u0435\u0442\u043a\u0438. \u0412\u0438\u0434\u0438\u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u044f\u0447\u0435\u0439\u043a\u0438, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432 \u043c\u0435\u0442\u043a\u0443 \u043d\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/745\/baf\/016\/745baf0160c2f9cf8aaae974ff285d16.png\"><\/div>\n<p>  <i>\u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u043c\u0435\u0442\u043a\u0438.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u0443\u0434\u0430\u043b\u0438\u043c \u0432 <code>HexGrid.CreateCell<\/code> \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <code>label.text<\/code>.<\/p>\n<pre><code class=\"cs\">\tvoid CreateCell (int x, int z, int i) { \t\t\u2026  \t\tText label = Instantiate&lt;Text&gt;(cellLabelPrefab); \t\tlabel.rectTransform.anchoredPosition = \t\t\tnew Vector2(position.x, position.z); \/\/\t\tlabel.text = cell.coordinates.ToStringOnSeparateLines(); \t\tcell.uiRect = label.rectTransform;  \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 UI \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c <em>Labels<\/em> \u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 \u043d\u0438\u043c \u043c\u0435\u0442\u043e\u0434 <code>HexMapEditor.ShowUI<\/code>.<\/p>\n<pre><code class=\"cs\">\/\/\tpublic void ShowUI (bool visible) { \/\/\t\thexGrid.ShowUI(visible); \/\/\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/6e0\/4d4\/652\/6e04d46522e65937a9324e0f3498d480.png\"><\/div>\n<p>  <i>\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-15\/edit-mode\/edit-mode.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u041d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439<\/h2>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0440\u0435\u0436\u0438\u043c \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0441 \u043c\u0435\u0442\u043a\u0430\u043c\u0438, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0443, \u0430 \u0437\u0430\u0442\u0435\u043c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0435.<\/p>\n<h3>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439<\/h3>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u044f\u0447\u0435\u0439\u043a\u0438, \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCell<\/code> \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 <code>distance<\/code>. \u041e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u043e\u0439 \u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e, \u0434\u043b\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0435\u0434\u0430 \u0440\u0430\u0432\u043d\u043e 1, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435.<\/p>\n<pre><code class=\"cs\">\tint distance;<\/code><\/pre>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u043e, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0443 \u044f\u0447\u0435\u0439\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. <code>HexCell<\/code> \u0438\u043c\u0435\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 <code>RectTransform<\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 UI. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e <code>GetComponent&lt;Text&gt;<\/code>, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u044f\u0447\u0435\u0439\u043a\u0438. \u0423\u0447\u0442\u0438\u0442\u0435, \u0447\u0442\u043e <code>Text<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d <code>UnityEngine.UI<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0435\u0433\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430.<\/p>\n<pre><code class=\"cs\">\tvoid UpdateDistanceLabel () { \t\tText label = uiRect.GetComponent&lt;Text&gt;(); \t\tlabel.text = distance.ToString(); \t}<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0430\u0437\u0432\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u0443\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 Text?<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0430, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e. \u041d\u043e \u044f \u044d\u0442\u0438\u043c \u043d\u0435 \u0443\u0442\u0440\u0443\u0436\u0434\u0430\u044e\u0441\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u0435\u0442\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0423\u0431\u0435\u0434\u0438\u0432\u0448\u0438\u0441\u044c \u0432 \u044d\u0442\u043e\u043c, \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/div>\n<\/div>\n<p>  \u0417\u0430\u0441\u0442\u0430\u0432\u0438\u043c \u043e\u0431\u0449\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u044f\u0447\u0435\u0439\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0435\u0451 \u043c\u0435\u0442\u043a\u0443.<\/p>\n<pre><code class=\"cs\">\tpublic int Distance { \t\tget { \t\t\treturn distance; \t\t} \t\tset { \t\t\tdistance = value; \t\t\tUpdateDistanceLabel(); \t\t} \t}<\/code><\/pre>\n<p>  \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexGrid<\/code> \u043e\u0431\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 <code>FindDistancesTo<\/code> \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u044f\u0447\u0435\u0439\u043a\u0438. \u041f\u043e\u043a\u0430 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0443\u043b\u0435\u0432\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void FindDistancesTo (HexCell cell) { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Distance = 0; \t\t} \t}<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u043e <code>HexMapEditor.HandleInput<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u044f\u0447\u0435\u0439\u043a\u043e\u0439.<\/p>\n<pre><code class=\"cs\">\t\t\tif (editMode) { \t\t\t\tEditCells(currentCell); \t\t\t} \t\t\telse { \t\t\t\thexGrid.FindDistancesTo(currentCell); \t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438<\/h3>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442 \u043d\u043e\u043b\u044c. \u041d\u043e, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u044f\u0447\u0435\u0439\u043a\u0438. \u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043d\u0438\u0445 \u043c\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\u044b \u044f\u0447\u0435\u0439\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e <code>HexCoordinates<\/code> \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <code>DistanceTo<\/code>, \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0438\u043c \u0432 <code>HexGrid.FindDistancesTo<\/code>.<\/p>\n<pre><code class=\"cs\">\tpublic void FindDistancesTo (HexCell cell) { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Distance = \t\t\t\tcell.coordinates.DistanceTo(cells[i].coordinates); \t\t} \t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 <code>HexCoordinates<\/code> \u043c\u0435\u0442\u043e\u0434 <code>DistanceTo<\/code>. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0447\u043d\u0451\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f X, \u0438 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0440\u0443\u0433 \u0438\u0437 \u0434\u0440\u0443\u0433\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b X.<\/p>\n<pre><code class=\"cs\">\tpublic int DistanceTo (HexCoordinates other) { \t\treturn x - other.x; \t}<\/code><\/pre>\n<p>  \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432\u0434\u043e\u043b\u044c X \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u041d\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 X \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e.<\/p>\n<pre><code class=\"cs\">\t\treturn x &lt; other.x ? other.x - x : x - other.x;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/fdb\/c62\/16c\/fdbc6216c12ae4a38ff7edaba203116e.png\"><\/div>\n<p>  <i>\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043e X.<\/i><\/p>\n<p>  \u0422\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0435\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0435. \u041d\u043e \u0432 \u0441\u0435\u0442\u043a\u0435 \u0448\u0435\u0441\u0442\u0438\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u0432 \u0442\u0440\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u043b\u043e\u0436\u0438\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0442\u0440\u0451\u043c \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u044d\u0442\u043e \u0434\u0430\u0441\u0442.<\/p>\n<pre><code class=\"cs\">\t\treturn \t\t\t(x &lt; other.x ? other.x - x : x - other.x) + \t\t\t(Y &lt; other.Y ? other.Y - Y : Y - other.Y) + \t\t\t(z &lt; other.z ? other.z - z : z - other.z);<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ffd\/170\/ac0\/ffd170ac0b133a9b589e3dea9d6fd2b3.png\"><\/div>\n<p>  <i>\u0421\u0443\u043c\u043c\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043f\u043e XYZ.<\/i><\/p>\n<p>  \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0422\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u044d\u0442\u0443 \u0441\u0443\u043c\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u043f\u043e\u043b\u0430\u043c.<\/p>\n<pre><code class=\"cs\">\t\treturn \t\t\t((x &lt; other.x ? other.x - x : x - other.x) + \t\t\t(Y &lt; other.Y ? other.Y - Y : Y - other.Y) + \t\t\t(z &lt; other.z ? other.z - z : z - other.z)) \/ 2;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/9bd\/37d\/353\/9bd37d3535471f748d31be64ce897c17.png\"><\/div>\n<p>  <i>\u041d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/i><\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0443\u043c\u043c\u0430 \u0440\u0430\u0432\u043d\u0430 \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e?<\/b><\/p>\n<div class=\"spoiler_text\">\u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0441\u0435\u0442\u043a\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b. \u0421\u0443\u043c\u043c\u0430 \u044d\u0442\u0438\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u043d\u0430 \u043d\u0443\u043b\u044e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 (1, \u22123, 2). \u041f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0443\u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0448\u0438\u0432\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. \u0415\u0441\u043b\u0438 \u043c\u044b \u0431\u0435\u0440\u0451\u043c \u0438\u0445 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0441\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0432\u0435\u043d \u0443\u0434\u0432\u043e\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0435. \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e \u0442\u043e\u0447\u043a\u0438 \u043d\u0430\u0447\u0430\u043b\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0440\u0430\u0432\u043d\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e\u0439 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0435\u0439 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/09e\/533\/197\/09e533197dfc487db1c5b91f92fd6ba8.png\"><\/div>\n<p>  <i>\u041a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b.<\/i><\/div>\n<\/div>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-15\/finding-distances\/finding-distances.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f\u043c\u0438<\/h2>\n<p>  \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u043c \u043f\u0443\u0442\u044f\u043c \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0434\u0440\u0443\u0433\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0443\u0442\u044c. \u041d\u043e \u044d\u0442\u0438 \u043f\u0443\u0442\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b, \u0435\u0441\u043b\u0438 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442. \u041e\u0431\u0440\u044b\u0432\u044b, \u0432\u043e\u0434\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0441 \u043f\u043e\u0439\u0442\u0438 \u0432 \u043e\u0431\u0445\u043e\u0434. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0432\u043e\u043e\u0431\u0449\u0435.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u043f\u0443\u0442\u044c \u0432 \u043e\u0431\u0445\u043e\u0434 \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u0439, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u0411\u043e\u043b\u044c\u0448\u0435 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041d\u0430\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u0430\u0440\u0442\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0451\u043c \u043a\u0430\u0436\u0434\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c.<\/p>\n<h3>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430<\/h3>\n<p>  \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u0430\u0440\u0442\u0435 \u2014 \u044d\u0442\u043e \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c, \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u0442\u0430\u043f \u043f\u043e\u0438\u0441\u043a\u0430. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e, \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0432 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u0443, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u043e\u0438\u0441\u043a\u0430 <code>System.Collections<\/code>. \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432 60 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0430 \u043f\u043e\u0438\u0441\u043a \u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<pre><code class=\"cs\">\tpublic void FindDistancesTo (HexCell cell) { \t\tStartCoroutine(Search(cell)); \t}  \tIEnumerator Search (HexCell cell) { \t\tWaitForSeconds delay = new WaitForSeconds(1 \/ 60f); \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tyield return delay; \t\t\tcells[i].Distance = \t\t\t\tcell.coordinates.DistanceTo(cells[i].coordinates); \t\t} \t}<\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0430\u043a\u0442\u0438\u0432\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043f\u043e\u0438\u0441\u043a. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u043a\u043e\u0440\u0443\u0442\u0438\u043d\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void FindDistancesTo (HexCell cell) { \t\tStopAllCoroutines(); \t\tStartCoroutine(Search(cell)); \t}<\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043d\u043e\u0432\u043e\u0439 \u043a\u0430\u0440\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\tpublic void Load (BinaryReader reader, int header) { \t\tStopAllCoroutines(); \t\t\u2026 \t}<\/code><\/pre>\n<p>  <\/p>\n<h3>\u041f\u043e\u0438\u0441\u043a \u0432 \u0448\u0438\u0440\u0438\u043d\u0443 (Breadth-First Search)<\/h3>\n<p>  \u0415\u0449\u0451 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u0430\u0447\u043d\u0451\u043c \u043f\u043e\u0438\u0441\u043a, \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e. \u0418, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0432\u0441\u0435\u0445 \u0435\u0451 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0440\u0430\u0432\u043d\u043e 1, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c. \u0417\u0430\u0442\u0435\u043c \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439. \u0423 \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u0441\u0435\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c, \u0438 \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u044d\u0442\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u043e 2. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 1. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c \u0435\u0433\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 2. \u0418 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0435\u043c \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a.<\/p>\n<p>  \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 1, \u0437\u0430\u0442\u0435\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 2, \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 3, \u0438 \u0442\u0430\u043a \u0434\u0430\u043b\u0435\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043c. \u042d\u0442\u043e \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u043d\u0430\u0439\u0434\u0451\u043c \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438. \u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0432 \u0448\u0438\u0440\u0438\u043d\u0443 (breadth-first search).<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438 \u043b\u0438 \u043c\u044b \u0443\u0436\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u044f\u0447\u0435\u0439\u043a\u0438. \u0427\u0430\u0441\u0442\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442 \u0432 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0438\u043b\u0438 \u0437\u0430\u043c\u043a\u043d\u0443\u0442\u044b\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c. \u041d\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0434\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>int.MaxValue<\/code>, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u0435\u0451 \u0435\u0449\u0451 \u043d\u0435 \u043f\u043e\u0441\u0435\u0442\u0438\u043b\u0438. \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0447\u0435\u0435\u043a \u043f\u0440\u044f\u043c\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0438\u0441\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\tIEnumerator Search (HexCell cell) { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Distance = int.MaxValue; \t\t} \t\t \t\t\u2026 \t}<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u0441\u0435\u0445 \u043d\u0435\u043f\u043e\u0441\u0435\u0449\u0451\u043d\u043d\u044b\u0445 \u044f\u0447\u0435\u0435\u043a, \u0438\u0437\u043c\u0435\u043d\u0438\u0432 <code>HexCell.UpdateDistanceLabel<\/code>. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043d\u0430 \u043f\u0443\u0441\u0442\u043e\u0439 \u043a\u0430\u0440\u0442\u0435.<\/p>\n<pre><code class=\"cs\">\tvoid UpdateDistanceLabel () { \t\tText label = uiRect.GetComponent&lt;Text&gt;(); \t\tlabel.text = distance == int.MaxValue ? \"\" : distance.ToString(); \t}<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u044c, \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u0445 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u044f. \u0422\u0430\u043a\u0443\u044e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0433\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u0438\u043b\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c. \u041d\u0430\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0438\u0445 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\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 \u043e\u0447\u0435\u0440\u0435\u0434\u044c <code>Queue<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u0438\u043c\u0451\u043d <code>System.Collections.Generic<\/code>. \u0412\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0432\u043e\u0439, \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c\u043e\u0439 \u0432 \u044d\u0442\u0443 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 0.<\/p>\n<pre><code class=\"cs\">\tIEnumerator Search (HexCell cell) { \t\tfor (int i = 0; i &lt; cells.Length; i++) { \t\t\tcells[i].Distance = int.MaxValue; \t\t}  \t\tWaitForSeconds delay = new WaitForSeconds(1 \/ 60f); \t\tQueue&lt;HexCell&gt; frontier = new Queue&lt;HexCell&gt;(); \t\tcell.Distance = 0; \t\tfrontier.Enqueue(cell); \/\/\t\tfor (int i = 0; i &lt; cells.Length; i++) { \/\/\t\t\tyield return delay; \/\/\t\t\tcells[i].Distance = \/\/\t\t\t\tcell.coordinates.DistanceTo(cells[i].coordinates); \/\/\t\t} \t}<\/code><\/pre>\n<p>  \u0421 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0446\u0438\u043a\u043b, \u043f\u043e\u043a\u0430 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0447\u0442\u043e-\u0442\u043e \u0435\u0441\u0442\u044c. \u041d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u043d\u044f\u044f \u044f\u0447\u0435\u0439\u043a\u0430.<\/p>\n<pre><code class=\"cs\">\t\tfrontier.Enqueue(cell); \t\twhile (frontier.Count &gt; 0) { \t\t\tyield return delay; \t\t\tHexCell current = frontier.Dequeue(); \t\t}<\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438. \u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u0441\u0435\u0445 \u0435\u0451 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0430 \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0438.<\/p>\n<pre><code class=\"cs\">\t\twhile (frontier.Count &gt; 0) { \t\t\tyield return delay; \t\t\tHexCell current = frontier.Dequeue(); \t\t\tfor (HexDirection d = HexDirection.NE; d &lt;= HexDirection.NW; d++) { \t\t\t\tHexCell neighbor = current.GetNeighbor(d); \t\t\t\tif (neighbor != null) { \t\t\t\t\tneighbor.Distance = current.Distance + 1; \t\t\t\t\tfrontier.Enqueue(neighbor); \t\t\t\t} \t\t\t} \t\t}<\/code><\/pre>\n<p>  \u041d\u043e \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u0430\u0434\u0430\u043b\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\t\t\t\tif (neighbor != null &amp;&amp; neighbor.Distance == int.MaxValue) { \t\t\t\t\tneighbor.Distance = current.Distance + 1; \t\t\t\t\tfrontier.Enqueue(neighbor); \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: 64.704%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/IllinformedPersonalAntbear\" 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\u0438\u0441\u043a \u0432 \u0448\u0438\u0440\u0438\u043d\u0443.<\/i><\/p>\n<h3>\u0418\u0437\u0431\u0435\u0433\u0430\u0435\u043c \u0432\u043e\u0434\u0443<\/h3>\n<p>  \u0423\u0431\u0435\u0434\u0438\u0432\u0448\u0438\u0441\u044c, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u0432 \u0448\u0438\u0440\u0438\u043d\u0443 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0438\u044f. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u044f\u0441\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0435\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f.<\/p>\n<p>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u044b \u0443\u0436\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438: \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442, \u0438 \u0442\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0443\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043b\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043b\u0438 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u044f\u0432\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<pre><code class=\"cs\">\t\t\tfor (HexDirection d = HexDirection.NE; d &lt;= HexDirection.NW; d++) { \t\t\t\tHexCell neighbor = current.GetNeighbor(d); \t\t\t\tif (neighbor == null || neighbor.Distance != int.MaxValue) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\tneighbor.Distance = current.Distance + 1; \t\t\t\tfrontier.Enqueue(neighbor); \t\t\t}<\/code><\/pre>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u043e\u0434 \u0432\u043e\u0434\u043e\u0439. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0437\u0435\u043c\u043b\u0435.<\/p>\n<pre><code class=\"cs\">\t\t\t\tif (neighbor == null || neighbor.Distance != int.MaxValue) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\tif (neighbor.IsUnderwater) { \t\t\t\t\tcontinue; \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: 64.3625%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/AppropriateIllGhostshrimp\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u0432\u043e\u0434\u0435.<\/i><\/p>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043d\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u0437\u0431\u0435\u0433\u0430\u0435\u0442 \u0432\u0441\u0435\u0439 \u0432\u043e\u0434\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0432\u043e\u0434\u043d\u044b\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043a\u0430\u043a \u0438 \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0437\u0435\u043c\u043b\u0438. \u041f\u043e\u0434\u0432\u043e\u0434\u043d\u0430\u044f \u044f\u0447\u0435\u0439\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439.<\/p>\n<h3>\u0418\u0437\u0431\u0435\u0433\u0430\u0435\u043c \u043e\u0431\u0440\u044b\u0432\u043e\u0432<\/h3>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0435\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0438\u043f \u0440\u0435\u0431\u0440\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u044b\u0432\u044b \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0443\u0442\u044c. \u0415\u0441\u043b\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0441\u043a\u043b\u043e\u043d\u0430\u043c, \u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043e\u0431\u0440\u044b\u0432\u0430 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u044f\u043c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445.<\/p>\n<pre><code class=\"cs\">\t\t\t\tif (neighbor.IsUnderwater) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\tif (current.GetEdgeType(neighbor) == HexEdgeType.Cliff) { \t\t\t\t\tcontinue; \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: 65.7765%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/ThreadbareVastGraywolf\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u044b\u0432\u043e\u0432.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-15\/dealing-with-obstacles\/dealing-with-obstacles.unitypackage\" rel=\"nofollow\">unitypackage<\/a><\/p>\n<h2>\u0417\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435<\/h2>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c \u044f\u0447\u0435\u0435\u043a \u0438 \u0440\u0451\u0431\u0435\u0440, \u043d\u043e \u044d\u0442\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0434\u0432\u043e\u0438\u0447\u043d\u044b. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0432 \u0434\u0440\u0443\u0433\u0438\u0445. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u0445 \u0442\u0440\u0443\u0434\u0430 \u0438\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<h3>\u0411\u044b\u0441\u0442\u0440\u044b\u0435 \u0434\u043e\u0440\u043e\u0433\u0438<\/h3>\n<p>  \u0411\u0443\u0434\u0435\u0442 \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0430\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0440\u0451\u0431\u0435\u0440 \u0441 \u0434\u043e\u0440\u043e\u0433\u0430\u043c\u0438 \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u043c. \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e \u0434\u043e\u0440\u043e\u0433\u0430\u043c \u043c\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0440\u0430\u0432\u043d\u044b\u043c\u0438 1, \u0430 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0451\u0431\u0435\u0440 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043c \u0434\u043e 10. \u042d\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043d\u0430\u043c \u0441\u0440\u0430\u0437\u0443 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043b\u0438 \u043c\u044b \u0432\u0435\u0440\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<pre><code class=\"cs\">\t\t\t\tint distance = current.Distance; \t\t\t\tif (current.HasRoadThroughEdge(d)) { \t\t\t\t\tdistance += 1; \t\t\t\t} \t\t\t\telse { \t\t\t\t\tdistance += 10; \t\t\t\t} \t\t\t\tneighbor.Distance = distance;<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/899\/225\/6e3\/8992256e34fef206c7282bc31a72a573.png\"><\/div>\n<p>  <i>\u0414\u043e\u0440\u043e\u0433\u0438 \u0441 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u043c\u0438.<\/i><\/p>\n<h3>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u044b<\/h3>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e\u0438\u0441\u043a \u0432 \u0448\u0438\u0440\u0438\u043d\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u041e\u043d \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442, \u0447\u0442\u043e \u044f\u0447\u0435\u0439\u043a\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u0430 \u0434\u043b\u044f \u043d\u0430\u0441 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e. \u041d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0430\u043c\u0430 \u0441\u0435\u0431\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439 \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435\u043b\u044c\u0437\u044f \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u0438 \u043a\u043e \u0432\u0441\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u043c.<\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043e\u043c, \u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0435\u0451 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0438\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b. \u041f\u043e\u043a\u0430 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043f\u0438\u0441\u043a\u043e\u043c, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <code>Sort<\/code>.<\/p>\n<pre><code class=\"cs\">\t\tList&lt;HexCell&gt; frontier = new List&lt;HexCell&gt;(); \t\tcell.Distance = 0; \t\tfrontier.Add(cell); \t\twhile (frontier.Count &gt; 0) { \t\t\tyield return delay; \t\t\tHexCell current = frontier[0]; \t\t\tfrontier.RemoveAt(0); \t\t\tfor (HexDirection d = HexDirection.NE; d &lt;= HexDirection.NW; d++) { \t\t\t\t\u2026 \t\t\t\tneighbor.Distance = distance; \t\t\t\tfrontier.Add(neighbor); \t\t\t} \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 ListPool&lt;HexCell&gt;?<\/b><\/p>\n<div class=\"spoiler_text\">\u0414\u0430, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435. \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u0443 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u043d\u0443\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/div>\n<\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u044b\u043b\u0430 \u0432\u0435\u0440\u043d\u043e\u0439, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u0451 \u044f\u0447\u0435\u0439\u043a\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043b\u043e\u0436\u0438\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0431\u0443\u0434\u0443\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 \u0441\u043e\u0441\u0435\u0434\u0438 \u044f\u0447\u0435\u0439\u043a\u0438, \u043d\u043e, \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u043f\u043e\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430\u0441 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442.<\/p>\n<p>  \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044f\u0447\u0435\u0439\u043a\u0438 \u043f\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u043e \u0441\u0441\u044b\u043b\u043a\u043e\u0439 \u043d\u0430 \u043c\u0435\u0442\u043e\u0434, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u044d\u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cs\">\t\t\t\tfrontier.Add(neighbor); \t\t\t\tfrontier.Sort((x, y) =&gt; x.Distance.CompareTo(y.Distance));<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 Sort?<\/b><\/p>\n<div class=\"spoiler_text\">\u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u043d\u043e\u043d\u0438\u043c\u043d\u044b\u0439 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u042d\u0442\u043e \u0443\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0447\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443. \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043a\u043e\u0434 \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u044f\u0432\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430.<\/p>\n<pre><code class=\"cs\">\t\t\t\tfrontier.Sort(CompareDistances); \t \t\u2026 \t \tstatic int CompareDistances (HexCell x, HexCell y) { \t\treturn x.Distance.CompareTo(y.Distance); \t}<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/2ca\/f5d\/f85\/2caf5df85335f7997694522b7885d882.png\"><\/div>\n<p>  <i>\u041e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430, \u043f\u043e\u043a\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0435\u0432\u0435\u0440\u043d\u0430\u044f.<\/i><\/p>\n<h3>\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b<\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u043d\u0430\u0447\u0430\u043b\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043c\u044b \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043d\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442. \u0422\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u044f\u0447\u0435\u0439\u043a\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u0443, \u043c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0448\u043b\u0438 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a \u044d\u0442\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0443\u0436\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u043b\u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c, \u043d\u0430\u0448\u043b\u0438 \u043b\u0438 \u043c\u044b \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u043f\u0443\u0442\u044c. \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0442\u0430\u043a, \u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u043e \u0441\u043e\u0441\u0435\u0434\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0435\u0433\u043e \u0432 \u0433\u0440\u0430\u043d\u0438\u0446\u0443.<\/p>\n<pre><code class=\"cs\">\t\t\t\tHexCell neighbor = current.GetNeighbor(d); \t\t\t\tif (neighbor == null) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\tif (neighbor.IsUnderwater) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\tif (current.GetEdgeType(neighbor) == HexEdgeType.Cliff) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\tint distance = current.Distance; \t\t\t\tif (current.HasRoadThroughEdge(d)) { \t\t\t\t\tdistance += 1; \t\t\t\t} \t\t\t\telse { \t\t\t\t\tdistance += 10; \t\t\t\t} \t\t\t\tif (neighbor.Distance == int.MaxValue) { \t\t\t\t\tneighbor.Distance = distance; \t\t\t\t\tfrontier.Add(neighbor); \t\t\t\t} \t\t\t\telse if (distance &lt; neighbor.Distance) { \t\t\t\t\tneighbor.Distance = distance; \t\t\t\t} \t\t\t\tfrontier.Sort((x, y) =&gt; x.Distance.CompareTo(y.Distance));<\/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.1313%;\"><iframe src=\"https:\/\/gfycat.com\/ifr\/PassionatePlushAlbacoretuna\" style=\"border: 0; top: 0; left: 0; width: 100%; height: 100%; position: absolute;\" allowfullscreen><\/iframe><\/div>\n<\/div>\n<\/div>\n<p>  <i>\u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043d\u0430\u0447\u043d\u0451\u043c \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435. \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0434\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044f\u0447\u0435\u0435\u043a \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435, \u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0443\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0433\u0440\u0430\u043d\u0438\u0446\u044b. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0414\u0435\u0439\u043a\u0441\u0442\u0440\u044b, \u043e\u043d \u043d\u0430\u0437\u0432\u0430\u043d \u0432 \u0447\u0435\u0441\u0442\u044c \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0432\u0448\u0435\u0433\u043e \u0435\u0433\u043e \u042d\u0434\u0441\u0433\u0435\u0440\u0430 \u0414\u0435\u0439\u043a\u0441\u0442\u0440\u044b.<\/p>\n<h3>\u0421\u043a\u043b\u043e\u043d\u044b<\/h3>\n<p>  \u041c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u043c\u0438\u0441\u044f \u0437\u0430\u0442\u0440\u0430\u0442\u0430\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0434\u043e\u0440\u043e\u0433. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u043e\u0441\u043a\u0438\u0445 \u0440\u0451\u0431\u0435\u0440 \u0431\u0435\u0437 \u0434\u043e\u0440\u043e\u0433 \u0434\u043e 5, \u043e\u0441\u0442\u0430\u0432\u0438\u0432 \u0441\u043a\u043b\u043e\u043d\u0430\u043c \u0431\u0435\u0437 \u0434\u043e\u0440\u043e\u0433 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 10.<\/p>\n<pre><code class=\"cs\">\t\t\t\tHexEdgeType edgeType = current.GetEdgeType(neighbor); \t\t\t\tif (edgeType == HexEdgeType.Cliff) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\tint distance = current.Distance; \t\t\t\tif (current.HasRoadThroughEdge(d)) { \t\t\t\t\tdistance += 1; \t\t\t\t} \t\t\t\telse { \t\t\t\t\tdistance += edgeType == HexEdgeType.Flat ? 5 : 10; \t\t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/8fd\/8e1\/1b5\/8fd8e11b5a95d0e35ce03d1eb8bc32a0.png\"><\/div>\n<p>  <i>\u0414\u043b\u044f \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u043d\u0438\u044f \u0441\u043a\u043b\u043e\u043d\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0443\u0434\u0430, \u0430 \u0434\u043e\u0440\u043e\u0433\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u0441\u0442\u0440\u044b.<\/i><\/p>\n<h3>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430<\/h3>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0440\u0435\u043b\u044c\u0435\u0444\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0433\u0440\u0430\u0445 \u043f\u043e \u043b\u0435\u0441\u0430\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u0435\u0435. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u0438\u0431\u0430\u0432\u0438\u043c \u043a \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0432\u0441\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0418 \u0437\u0434\u0435\u0441\u044c \u0441\u043d\u043e\u0432\u0430 \u0434\u043e\u0440\u043e\u0433\u0430 \u0432\u0441\u0451 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442.<\/p>\n<pre><code class=\"cs\">\t\t\t\tif (current.HasRoadThroughEdge(d)) { \t\t\t\t\tdistance += 1; \t\t\t\t} \t\t\t\telse { \t\t\t\t\tdistance += edgeType == HexEdgeType.Flat ? 5 : 10; \t\t\t\t\tdistance += neighbor.UrbanLevel + neighbor.FarmLevel + \t\t\t\t\t\tneighbor.PlantLevel; \t\t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/f6e\/ef4\/b2b\/f6eef4b2bba378bd83daf9377f9a1603.png\"><\/div>\n<p>  <i>\u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u044e\u0442 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0434\u043e\u0440\u043e\u0433\u0438.<\/i><\/p>\n<h3>\u0421\u0442\u0435\u043d\u044b<\/h3>\n<p>  \u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0443\u0447\u0442\u0451\u043c \u0438 \u0441\u0442\u0435\u043d\u044b. \u0421\u0442\u0435\u043d\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0445 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e\u0440\u043e\u0433\u0430.<\/p>\n<pre><code class=\"cs\">\t\t\t\tif (current.HasRoadThroughEdge(d)) { \t\t\t\t\tdistance += 1; \t\t\t\t} \t\t\t\telse if (current.Walled != neighbor.Walled) { \t\t\t\t\tcontinue; \t\t\t\t} \t\t\t\telse { \t\t\t\t\tdistance += edgeType == HexEdgeType.Flat ? 5 : 10; \t\t\t\t\tdistance += neighbor.UrbanLevel + neighbor.FarmLevel + \t\t\t\t\t\tneighbor.PlantLevel; \t\t\t\t}<\/code><\/pre>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/1b3\/9cd\/7a9\/1b39cd7a97483749c25474622ed8326b.png\"><\/div>\n<p>  <i>\u0421\u0442\u0435\u043d\u044b \u043d\u0430\u0441 \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442, \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u0432\u043e\u0440\u043e\u0442\u0430.<\/i><\/p>\n<p>  <a href=\"https:\/\/catlikecoding.com\/unity\/tutorials\/hex-map\/part-15\/movement-costs\/movement-costs.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\/425919\/\"> https:\/\/habr.com\/post\/425919\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\"><a href=\"https:\/\/habr.com\/post\/424257\/\">\u0427\u0430\u0441\u0442\u0438 1-3: \u0441\u0435\u0442\u043a\u0430, \u0446\u0432\u0435\u0442\u0430 \u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u044f\u0447\u0435\u0435\u043a.<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/424491\/\">\u0427\u0430\u0441\u0442\u0438 4-7: \u043d\u0435\u0440\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u0440\u0435\u043a\u0438 \u0438 \u0434\u043e\u0440\u043e\u0433\u0438.<\/a><\/p>\n<p>  <a href=\"https:\/\/habr.com\/post\/425463\/\">\u0427\u0430\u0441\u0442\u0438 8-11: \u0432\u043e\u0434\u0430, \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0438 \u043a\u0440\u0435\u043f\u043e\u0441\u0442\u043d\u044b\u0435 \u0441\u0442\u0435\u043d\u044b<\/a><\/p>\n<h1>\u0427\u0430\u0441\u0442\u044c 12: \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430<\/h1>\n<p>  <\/p>\n<ul>\n<li>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u0440\u0435\u043b\u044c\u0435\u0444\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u0446\u0432\u0435\u0442\u0430.<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u0439\u043b.<\/li>\n<li>\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0444\u0430\u0439\u043b, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0435\u0433\u043e.<\/li>\n<li>\u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u044f\u0447\u0435\u0435\u043a.<\/li>\n<li>\u0423\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430.<\/li>\n<\/ul>\n<p>  \u041c\u044b \u0443\u0436\u0435 \u0443\u043c\u0435\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043a\u0430\u0440\u0442\u044b. \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0438\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/7bb\/2ce\/740\/7bb2ce7409d37733e3b6f96c237ce1e9.jpg\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-290869","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/290869","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=290869"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/290869\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=290869"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=290869"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=290869"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}