рднрд╛рдЧ 1-3: рдЬрд╛рд▓, рд░рдВрдЧ рдФрд░ рд╕реЗрд▓ рдКрдБрдЪрд╛рдИрднрд╛рдЧ 4-7: рдзрдХреНрдХреЛрдВ, рдирджрд┐рдпреЛрдВ рдФрд░ рд╕рдбрд╝рдХреЛрдВрднрд╛рдЧ 8-11: рдЬрд▓, рднреВ-рднрд╛рдЧ рдФрд░ рдкреНрд░рд╛рдЪреАрд░рднрд╛рдЧ 12-15: рдмрдЪрдд рдФрд░ рд▓реЛрдбрд┐рдВрдЧ, рдмрдирд╛рд╡рдЯ, рджреВрд░рд┐рдпрд╛рдВрднрд╛рдЧ 16-19: рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдирд╛, рдЦрд┐рд▓рд╛рдбрд╝реА рджрд╕реНрддреЗ, рдПрдирд┐рдореЗрд╢рдирднрд╛рдЧ 20-23: рдХреЛрд╣рд░реЗ рдХреЗ рдпреБрджреНрдз, рдорд╛рдирдЪрд┐рддреНрд░ рдЕрдиреБрд╕рдВрдзрд╛рди, рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реАрднрд╛рдЧ 24-27: рдЬрд▓ рдЪрдХреНрд░, рдЕрдкрд░рджрди, рдмрд╛рдпреЛрдо, рдмреЗрд▓рдирд╛рдХрд╛рд░ рдирдХреНрд╢рд╛рднрд╛рдЧ 12: рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд▓реЛрдб рдХрд░реЗрдВ
- рд░рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рдЗрд▓рд╛рдХреЗ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЯреНрд░реИрдХ рдХрд░реЗрдВред
- рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред
- рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рдкрдврд╝рддреЗ рд╣реИрдВред
- рд╣рдо рд╕реЗрд▓ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред
- рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдХрд░реЗрдВред
рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рдлреА рджрд┐рд▓рдЪрд╕реНрдк рдирдХреНрд╢реЗ рдХреИрд╕реЗ рдмрдирд╛рдПрдВред рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрдЪрд╛рдпрд╛ рдЬрд╛рдПред
Test.map рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ редрдореИрджрд╛рдиреА рдкреНрд░рдХрд╛рд░
рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЙрди рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕реЗрд▓ рдКрдВрдЪрд╛рдИ рд╕реНрддрд░ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреА рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдерд┐рддрд┐ рд╕реНрд╡рдпрдВ рдЗрд╕ рдбреЗрдЯрд╛ рд╕реЗ рд▓реА рдЧрдИ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реИ рдЕрдЧрд░ рд╣рдо рдЗрди рдЧрдгрдирд╛ рдХреА рдЧрдИ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдорд╛рдирдЪрд┐рддреНрд░ рдбреЗрдЯрд╛ рд╕рд╣реА рд░рд╣реЗрдЧрд╛, рднрд▓реЗ рд╣реА рдмрд╛рдж рдореЗрдВ рд╣рдо рдКрдВрдЪрд╛рдИ рдСрдлрд╕реЗрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдВред рдбреЗрдЯрд╛ рдЗрд╕рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рд╕реЗ рдЕрд▓рдЧ рд╣реИред
рдЗрд╕реА рддрд░рд╣, рд╣рдореЗрдВ рд╕реЗрд▓ рдХреЗ рд╕рдЯреАрдХ рд░рдВрдЧ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реЗрд▓ рд╣рд░рд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рд░реЗ рд░рдВрдЧ рдХреА рд╕рдЯреАрдХ рдЫрд╛рдпрд╛ рджреГрд╢реНрдп рд╢реИрд▓реА рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рдВрдЧ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рд╕реНрд╡рдпрдВ рд░рдВрдЧреЛрдВ рдХреЛред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рдВрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдмрд╛рдж рдореЗрдВ рд░рд╛рд╣рдд рдХреЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рджреГрд╢реНрдп рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдЪрд▓рддреА рд╣реИ
рдпрджрд┐ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЕрдм рд░рдВрдЧ рдбреЗрдЯрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
HexMetrics
рдореЗрдВ рдЗрд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рддреЛ рдЪрд▓реЛ рдЗрд╕рдореЗрдВ рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
public static Color[] colors;
рдЕрдиреНрдп рд╕рднреА рд╡реИрд╢реНрд╡рд┐рдХ рдЖрдВрдХрдбрд╝реЛрдВ рдХреА рддрд░рд╣, рдЬреИрд╕реЗ рдХрд┐ рд╢реЛрд░, рд╣рдо рдЗрди рд░рдВрдЧреЛрдВ рдХреЛ
HexGrid
рд╕рд╛рде рдЖрд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
public Color[] colors; тАж void Awake () { HexMetrics.noiseSource = noiseSource; HexMetrics.InitializeHashGrid(seed); HexMetrics.colors = colors; тАж } тАж void OnEnable () { if (!HexMetrics.noiseSource) { HexMetrics.noiseSource = noiseSource; HexMetrics.InitializeHashGrid(seed); HexMetrics.colors = colors; } }
рдФрд░ рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдо рд╕реАрдзреЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд░рдВрдЧ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдВрдЧ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрдВрдЧреЗред
рд╣реЗрдХреНрд╕рд╛рдЧреЛрди рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрдкрд╛рджрдХ рдХреА рд╕рд╛рдорд╛рдиреНрдп рд╕рд░рдгреА рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рд░рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВред
рд░рдВрдЧреЛрдВ рдХреЛ рдЧреНрд░рд┐рдб рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛редрд╕реЗрд▓ рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ
HexCell
рд╕реЗ рд░рдВрдЧ рдХреНрд╖реЗрддреНрд░ рдирд┐рдХрд╛рд▓реЗрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред рдПрдХ рд░рдВрдЧ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд░рдВрдЧ рдЧреБрдг рдХреЗрд╡рд▓ рдЗрд╕реА рд░рдВрдЧ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рдпрд╣ рд╕реАрдзреЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдЬрд▓реНрдж рд╣реА рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗред
public Color Color { get { return HexMetrics.colors[terrainTypeIndex]; }
рдПрдХ рдирдИ рдКрдВрдЪрд╛рдИ рдкреНрд░рдХрд╛рд░ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВред
public int TerrainTypeIndex { get { return terrainTypeIndex; } set { if (terrainTypeIndex != value) { terrainTypeIndex = value; Refresh(); } } }
рд╕рдВрдкрд╛рджрдХ рд░рд┐рдлреИрдХреНрдЯрд┐рдВрдЧ
HexMapEditor
рдЕрдВрджрд░
HexMapEditor
рд░рдВрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдХреЛрдб рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдХрд░реЗрдЧрд╛ред
рдЕрдм рд╕рдХреНрд░рд┐рдп рдКрдВрдЪрд╛рдИ рдкреНрд░рдХрд╛рд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝реАрд▓реНрдб рдФрд░ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред
int activeTerrainTypeIndex; тАж public void SetTerrainTypeIndex (int index) { activeTerrainTypeIndex = index; }
рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдм рд▓рд╛рдкрддрд╛
SelectColor
рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред рдпреВрдЖрдИ рдореЗрдВ рдХрд▓рд░ рд╡рд┐рдЬреЗрдЯреНрд╕ рдХреЛ
SetTerrainTypeIndex
рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдЫреЛрдбрд╝ рджреЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕реВрдЪрдХрд╛рдВрдХ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд░рдВрдЧ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред
EditCell
рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рд╕реЗрд▓ рдХреЛ рдПрдбрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓рд┐рд╡реЗрд╢рди рдЯрд╛рдЗрдк рдЗрдВрдбреЗрдХреНрд╕ рд╕реМрдВрдкрд╛ рдЬрд╛рдПред
void EditCell (HexCell cell) { if (cell) { if (activeTerrainTypeIndex >= 0) { cell.TerrainTypeIndex = activeTerrainTypeIndex; } тАж } }
рдпрджреНрдпрдкрд┐ рд╣рдордиреЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рд░рдВрдЧ рдбреЗрдЯрд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХрдорд╛рддреНрд░ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдВрдЧ рдЕрдм рд╕рд░рдгреА рдореЗрдВ рдкрд╣рд▓рд╛ рд╣реИред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдкреАрд▓рд╛ рд╣реИред
рдкреАрд▓рд╛ рдирдпрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░рдВрдЧ рд╣реИредunitypackageрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬрдирд╛
рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдмрдЪрдд рдФрд░ рд▓реЛрдбрд┐рдВрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
HexMapEditor
рдЙрдкрдпреЛрдЧ
HexMapEditor
ред рд╣рдо рджреЛ рддрд░реАрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдРрд╕рд╛ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЕрдм рдЙрдиреНрд╣реЗрдВ рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗред
public void Save () { } public void Load () { }
UI (
GameObject / UI / Button ) рдореЗрдВ рджреЛ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВред рдЙрдиреНрд╣реЗрдВ рдмрдЯрди рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдЙрдЪрд┐рдд рд▓реЗрдмрд▓ рджреЗрдВред рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рджрд╛рд╣рд┐рдиреЗ рдкреИрдирд▓ рдХреЗ рдиреАрдЪреЗ рд░рдЦрд╛ред
рдмрдЯрди рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд▓реЛрдб рдХрд░реЗрдВредрдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рди
рдХрд╛рд░реНрдб рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рд╕рд╣реЗрдЬрдирд╛ рд╣реЛрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЦреЗрд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╣рд╛рдВ рд░рдЦреЗрдВ? рдЬрд╡рд╛рдм рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЧреЗрдо рдХрд┐рд╕ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ OS рдХреЗ рдЕрдкрдиреЗ рдорд╛рдирдХ рд╣реИрдВред
рд╣рдореЗрдВ рдЗрди рдорд╛рдирдХреЛрдВ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИред рдПрдХрддрд╛
Application.persistentDataPath
рд╕рд╛рде рд╣рдореЗрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рд╕рд╣реА рд░рд╛рд╕реНрддрд╛ рдЬрд╛рдирддрд╛ рд╣реИред рдЖрдк рдпрд╣ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рд╕рд╛рде рдпрд╣ рдХреИрд╕реЗ рд╣реЛрдЧрд╛,
Save
рд╡рд┐рдзрд┐ рдореЗрдВ, рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдФрд░ рдкреНрд▓реЗ рдореЛрдб рдореЗрдВ рдмрдЯрди рджрдмрд╛рдПрдВред
public void Save () { Debug.Log(Application.persistentDataPath); }
рдбреЗрд╕реНрдХрдЯреЙрдк рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдкрде рдореЗрдВ рдХрдВрдкрдиреА рдФрд░ рдЙрддреНрдкрд╛рдж рдХрд╛ рдирд╛рдо рд╣реЛрдЧрд╛ред рдЗрд╕ рдкрде рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдВрдкрд╛рджрдХ рдФрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рджреЛрдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд╛рдо
рд╕рдВрдкрд╛рджрд┐рдд / рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ / рдкреНрд▓реЗрдпрд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдВрдкрдиреА рдФрд░ рдЙрддреНрдкрд╛рдж рдХрд╛ рдирд╛рдоредрдореБрдЭреЗ рдореИрдХ рдкрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ?рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рдЕрдХреНрд╕рд░ рдЫреБрдкрд╛ рд╣реЛрддрд╛ рд╣реИред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд╡рд╣ рдУрдПрд╕ рдПрдХреНрд╕ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдлрд╛рдЗрдВрдбрд░ рдореЗрдВ рд╣реЛрдо рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╢реЛ рд╡реНрдпреВ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЬрд╛рдПрдВ ред рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреЗрдХрдмреЙрдХреНрд╕ рд╣реИред
WebGL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?WebGL рдЧреЗрдореНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдгрд╛рд▓реА рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╕рднреА рдлрд╝рд╛рдЗрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╕реНрдореГрддрд┐ рдореЗрдВ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред рд╡рд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВ рдбрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЗрдм рдкреЗрдЬ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдСрд░реНрдбрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрдорд╛рдг
рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
System.IO
рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо
HexMapEditor
рд╡рд░реНрдЧ рдкрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ
using
рдХрдерди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
using UnityEngine; using UnityEngine.EventSystems; using System.IO; public class HexMapEditor : MonoBehaviour { тАж }
рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкреВрд░реНрдг рдкрде рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдлрд╝рд╛рдЗрд▓
рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ
test.map рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЗ рдкрде рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪрд╛рд╣реЗ рдЖрдкрдХреЛ рдлрд╝реЙрд░рд╡рд░реНрдб рдпрд╛ рдмреИрдХрд╕реНрд▓реИрд╢ рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ (рд╕реНрд▓реИрд╢ рдпрд╛ рдмреИрдХрд╕реНрд▓реИрд╢) рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
Path.Combine
рд╡рд┐рдзрд┐ рдпрд╣ рдХрд░реЗрдЧреАред
public void Save () { string path = Path.Combine(Application.persistentDataPath, "test.map"); }
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо
File.Open
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдмрдирд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╛ рддреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрде рдкрд░ рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреА, рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
string path = Path.Combine(Application.persistentDataPath, "test.map"); File.Open(path, FileMode.Create);
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдЬреБрдбрд╝реА рдПрдХ рдЦреБрд▓реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╣реЛрдЧреАред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рд╣рдореЗрдВ рдЙрд╕ рдзрд╛рд░рд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рднреВрд▓ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
string path = Path.Combine(Application.persistentDataPath, "test.map"); Stream fileStream = File.Open(path, FileMode.Create); fileStream.Close();
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЬрдм рдЖрдк
рд╕рд╣реЗрдЬреЗрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЗ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
test.map рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЦрд╛рд▓реА рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ 0 рдмрд╛рдЗрдЯреНрд╕ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЕрднреА рддрдХ рд╣рдордиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИред
рджрд░реНрдЬ рдХрд░рдирд╛ рд╣реИ
рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛
BinaryWriter
ред рдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрдкрдХреЛ рдХрд┐рд╕реА рднреА рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЖрджрд┐рдо рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдПрдХ рдирдпрд╛
BinaryWriter
рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдБ, рдФрд░ рд╣рдорд╛рд░реА рдлрд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо рдЗрд╕рдХрд╛ рддрд░реНрдХ рд╣реЛрдЧреАред рдмрдВрдж рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓реЗрдЦрдХ рдЙрд╕ рдзрд╛рд░рд╛ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдм рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдбрд╛рдпрд░реЗрдХреНрдЯ рд▓рд┐рдВрдХ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
string path = Path.Combine(Application.persistentDataPath, "test.map"); BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create)); writer.Close();
рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
BinaryWriter.Write
рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рднреА рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП
Write
рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЬреИрд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдлреНрд▓реЛрдЯред рдпрд╣ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рднреА рд░рд┐рдХреЙрд░реНрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдЗрдП рдкреВрд░реНрдгрд╛рдВрдХ 123 рд▓рд┐рдЦрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред
BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create)); writer.Write(123); writer.Close();
Save рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░
test.map рдХреЛ рдлрд┐рд░ рд╕реЗ
рдЬрд╛рдВрдЪреЗрдВ ред рдЕрдм рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рдЖрдХрд╛рд░ 4 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред
рдореЗрд░рд╛ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрдХ рдпрд╣ рдХреНрдпреЛрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рд▓реЗрддреА рд╣реИ?рдХреНрдпреЛрдВрдХрд┐ рдлрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдкреЗрд╕ рдХреЛ рдмрд╛рдЗрдЯ рдмреНрд▓реЙрдХ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ test.map рдЕрднреА рддрдХ рдХреЗрд╡рд▓ рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рдХреЗ рдПрдХ рдмреНрд▓реЙрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ, рдорд╛рдирд╡-рдкрдардиреАрдп рдкрд╛рда рдХреЛ рдирд╣реАрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдлрд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрдВрдбрд┐рд╕реНрдЯрд┐рдХреНрдЯ рдХреИрд░реЗрдХреНрдЯрд░реНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рджреЗрдЦреЗрдВрдЧреЗред рдЖрдк рд╢рд╛рдпрдж рдкреНрд░рддреАрдХ рджреЗрдЦреЗрдВрдЧреЗ
{ рдЙрд╕рдХреЗ рдмрд╛рдж рдХреБрдЫ рдирд╣реАрдВ рдпрд╛ рдХреБрдЫ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░реНрд╕ред
рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо
7 рдмреА 00 00 00 рджреЗрдЦреЗрдВрдЧреЗред рдпреЗ рд╣рдорд╛рд░реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВ, рд╣реЗрдХреНрд╕рд╛рдбреЗрд╕рд┐рдорд▓ рдиреЛрдЯреЗрд╢рди рдореЗрдВ рдореИрдк рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╕рд╛рдзрд╛рд░рдг рджрд╢рдорд▓рд╡ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ, рдпрд╣
123 0 0 0 рд╣реИ ред рдмрд╛рдЗрдирд░реА рдореЗрдВ, рдкрд╣рд▓рд╛ рдмрд╛рдЗрдЯ
01111011 рдХреА рддрд░рд╣
рджрд┐рдЦрддрд╛ рд╣реИ ред
{ рдХреЗ рд▓рд┐рдП ASCII рдХреЛрдб 123 рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЪрд░рд┐рддреНрд░ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред ASCII 0 рдПрдХ рдЕрд╢рдХреНрдд рдЪрд░рд┐рддреНрд░ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рджреГрд╢реНрдпрдорд╛рди рдЕрдХреНрд╖рд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИред
рд╢реЗрд╖ рддреАрди рдмрд╛рдЗрдЯреНрд╕ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдПрдХ рд╕рдВрдЦреНрдпрд╛ 256 рд╕реЗ рдХрдо рд▓рд┐рдЦреА рдереАред рдпрджрд┐ рд╣рдо 256 рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╣реЗрдХреНрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ
00 01 00 00 рджреЗрдЦреЗрдВрдЧреЗред
рдХреНрдпрд╛ 123 рдХреЛ 00 00 00 7b рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?BinaryWriter
рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдмрд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдЗрдЯреНрд╕ рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ Microsoft рджреНрд╡рд╛рд░рд╛ .Net рдврд╛рдВрдЪреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕реЗ рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рдЪреБрдирд╛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрдВрдЯреЗрд▓ рд╕реАрдкреАрдпреВ рдЫреЛрдЯреЗ-рдПрдВрдбрд┐рдпрди рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдмрдбрд╝рд╛-рдПрдВрдбрд┐рдпрди рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред 123 рдПрдХ рд╕реМ рддреЗрдИрд╕ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдереЛрдбрд╝рд╛-рд╕рд╛ рдПрдВрдбрд┐рдпрди рд╣реЛрддрд╛, рддреЛ 123 рдХрд╛ рдорддрд▓рдм рддреАрди рд╕реМ рдЗрдХреНрдХреАрд╕ рд╣реЛрддрд╛ред
рд╣рдо рд╕рдВрд╕рд╛рдзрди рдореБрдХреНрдд рдмрдирд╛рддреЗ рд╣реИрдВ
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╣рдо рд▓реЗрдЦрдХ рдХреЛ рдмрдВрдж рдХрд░реЗрдВред рдЬрдм рдпрд╣ рдЦреБрд▓рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓реЙрдХ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рднреВрд▓ рдЧрдП рддреЛ рд╣рдо рдЦреБрдж рдХреЛ рднреА рдмреНрд▓реЙрдХ рдХрд░ рджреЗрдВрдЧреЗред рдЕрдЧрд░ рд╣рдо рд╕реЗрд╡ рдмрдЯрди рдХреЛ рджреЛ рдмрд╛рд░ рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рджреВрд╕рд░реА рдмрд╛рд░ рд╣рдо рд╕реНрдЯреНрд░реАрдо рдирд╣реАрдВ рдЦреЛрд▓ рдкрд╛рдПрдВрдЧреЗред
рд▓реЗрдЦрдХ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ
using
рдмреНрд▓реЙрдХ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЙрд╕ рджрд╛рдпрд░реЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рд▓реЗрдЦрдХ рд╡реИрдз рд╣реИред рдЬрдм рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдЗрд╕ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд▓реЗрдЦрдХ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдереНрд░реЗрдб рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
using ( BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create)) ) { writer.Write(123); }
рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд▓реЗрдЦрдХ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо рдХреНрд▓рд╛рд╕реЗрд╕
IDisposable
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрди рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдПрдХ
Dispose
рд╡рд┐рдзрд┐ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╡реЗ
using
рдХрд░рдиреЗ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдкрд░реЗ рдЬрд╛рддреЗ рд╣реИрдВред
using
рдХрд╛ рдмрдбрд╝рд╛ рдлрд╛рдпрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреИрд╕реЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред рд╢реБрд░реБрдЖрддреА рд░рд┐рдЯрд░реНрди, рдЕрдкрд╡рд╛рдж рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЙрд╕реЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рдмрд╣реБрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИред
рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐
рдкрд╣рд▓реЗ рд╕реЗ рд▓рд┐рдЦреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
Load
рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЛрдб рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрдЪрдд рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдкрде рдмрдирд╛рдиреЗ рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕реНрдЯреНрд░реАрдо рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдФрд░ рд▓реЗрдЦрдХ рдХреЗ рдмрдЬрд╛рдп рд╣рдореЗрдВ
BinaryReader
рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
public void Load () { string path = Path.Combine(Application.persistentDataPath, "test.map"); using ( BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)) ) { } }
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП
File.OpenRead
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
using (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { }
рд▓рд┐рдЦрддреЗ рд╕рдордп рд╣рдо File.OpenWrite рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?рдпрд╣ рдкрджреНрдзрддрд┐ рдПрдХ рдРрд╕реА рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рддреА рд╣реИ рдЬреЛ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдбреЗрдЯрд╛ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред
рдкрдврд╝рддреЗ рд╕рдордп, рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрд┐рд╕реА рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ
BinaryReader.ReadInt32
рдХрд╛ рдЙрдкрдпреЛрдЧ
BinaryReader.ReadInt32
ред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ 32-рдмрд┐рдЯ рдкреВрд░реНрдгрд╛рдВрдХ, рдпрд╛рдиреА рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдкрдврд╝рддреА рд╣реИред
using (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { Debug.Log(reader.ReadInt32()); }
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐
123 рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп
, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдЗрдЯ рдкрдврд╝рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЗрд╕ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддреАрди рдмрд╛рдЗрдЯреНрд╕ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд░рд╣реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ 0-255 рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдмрд╛рд╣рд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдРрд╕рд╛ рди рдХрд░реЗрдВред
unitypackageрдорд╛рдирдЪрд┐рддреНрд░ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдирд╛ рдФрд░ рдкрдврд╝рдирд╛
рдбреЗрдЯрд╛ рдХреА рдмрдЪрдд рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рд╢реНрди рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдорд╛рдирд╡-рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдЖрдорддреМрд░ рдкрд░, рдорд╛рдирд╡-рдкрдардиреАрдп рдкреНрд░рд╛рд░реВрдк рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде JSON, XML рдФрд░ рд╕рд╛рджреЗ ASCII рд╣реИрдВред рдРрд╕реА рдлрд╛рдЗрд▓реЗрдВ рдкрд╛рда рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ рдЦреЛрд▓реА, рд╡реНрдпрд╛рдЦреНрдпрд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡реЗ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреА рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВред рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди (рдХрднреА-рдХрднреА рдЕрдзрд┐рдХ) рд▓реЗрдЧреАред рд╡реЗ рд░рдирдЯрд╛рдЗрдо рдФрд░ рдореЗрдореЛрд░реА рдлреБрдЯрдкреНрд░рд┐рдВрдЯ рджреЛрдиреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдФрд░ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдбреЗрдЯрд╛ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдмрд╣реБрдд рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдбреЗрдЯрд╛ рдХреЙрдореНрдкреИрдХреНрдЯ рдФрд░ рддреЗрдЬ рд╣реИред рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЦреЗрд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдореЛрдбрд╝ рдореЗрдВ рдПрдХ рдмрдбрд╝реЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╕реНрд╡рддрдГ рд╕рд╣реЗрдЬрдирд╛ред рдЗрд╕рд▓рд┐рдпреЗ
рд╣рдо рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?рдПрдХрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рд╣рдо рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХреЛрдВ рдХреЛ рд╕реАрдзреЗ рдзрд╛рд░рд╛ рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣рдорд╕реЗ рдЫрд┐рдкрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рд╕реАрдзреЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ MonoBehaviour
рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдбреЗрдЯрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рдкрджрд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреНрд░рдорд╛рдВрдХрди рдХреА рд╕рд╛рджрдЧреА рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд╡рд┐рд╖реНрдп рдХреЗ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдореИрдиреБрдЕрд▓ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рдмрдирд╛рдП рд░рдЦреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭрд╛рдПрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред
рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдПрдХрд▓ рдХрдХреНрд╖ рдХреЛ
Save
рдФрд░
Load
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
HexCell
рдореЗрдВ
Save
рдФрд░
Load
рд╡рд┐рдзрд┐рдпрд╛рдБ
HexCell
ред рдЪреВрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрдХ рдпрд╛ рдкрд╛рдардХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред
using UnityEngine; using System.IO; public class HexCell : MonoBehaviour { тАж public void Save (BinaryWriter writer) { } public void Load (BinaryReader reader) { } }
HexGrid
Save
рдФрд░
Load
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ
HexGrid
ред рдпреЗ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХреЗрд╡рд▓ рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ
Load
рдФрд░
Save
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рддреА рд╣реИрдВред
using UnityEngine; using UnityEngine.UI; using System.IO; public class HexGrid : MonoBehaviour { тАж public void Save (BinaryWriter writer) { for (int i = 0; i < cells.Length; i++) { cells[i].Save(writer); } } public void Load (BinaryReader reader) { for (int i = 0; i < cells.Length; i++) { cells[i].Load(reader); } } }
рдпрджрд┐ рд╣рдо рдХреЛрдИ рдореИрдк рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реЗрд▓ рдбреЗрдЯрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
public void Load (BinaryReader reader) { for (int i = 0; i < cells.Length; i++) { cells[i].Load(reader); } for (int i = 0; i < chunks.Length; i++) { chunks[i].Refresh(); } }
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рдЯреЗрд╕реНрдЯ рдХреЛрдб рдХреЛ
HexMapEditor
рдореЗрдВ рдЧреНрд░рд┐рдб рдХреЗ
Save
рдФрд░
Load
рддрд░реАрдХреЛрдВ рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд╕рд╛рде рд▓реЗрдЦрдХ рдпрд╛ рдкрд╛рдардХ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред
public void Save () { string path = Path.Combine(Application.persistentDataPath, "test.map"); using ( BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create)) ) { hexGrid.Save(writer); } } public void Load () { string path = Path.Combine(Application.persistentDataPath, "test.map"); using (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { hexGrid.Load(reader); } }
рдПрдХ рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░ рдХреА рдмрдЪрдд
рд╡рд░реНрддрдорд╛рди рдЪрд░рдг рдореЗрдВ, рдкреБрди: рдмрдЪрдд рдПрдХ рдЦрд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреА рд╣реИ, рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдЪрд▓реЛ рдзреАрд░реЗ-рдзреАрд░реЗ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рдХреЗрд╡рд▓
HexCell
рдКрдВрдЪрд╛рдИ рдкреНрд░рдХрд╛рд░ рд╕реВрдЪрдХрд╛рдВрдХ рд▓реЛрдб рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдорд╛рди рдХреЛ рд╕реАрдзреЗ terrainTypeIndex рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред рд╣рдо рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЪреВрдВрдХрд┐ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП
Refresh
рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдБрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рд╕рд╣реА рдирдХреНрд╢реЗ рд╣реА рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдорд╛рди рд▓реЗрдВрдЧреЗ рдХрд┐ рд╕рднреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдирдХреНрд╢реЗ рднреА рд╕рд╣реА рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдирджреА рдпрд╛ рд╕рдбрд╝рдХ рдЕрдиреБрдордиреНрдп рд╣реИ рдпрд╛ рдирд╣реАрдВред
public void Save (BinaryWriter writer) { writer.Write(terrainTypeIndex); } public void Load (BinaryReader reader) { terrainTypeIndex = reader.ReadInt32(); }
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп, рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд░рд╛рд╣рдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЪреВрдВрдХрд┐ рдЗрдВрдбреЗрдХреНрд╕ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЖрдХрд╛рд░ рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдореЗрд░реЗ рдХрд╛рд░реНрдб рдореЗрдВ 300 рд╕реЗрд▓ рд╣реИрдВ, рдпрд╛рдиреА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 1200 рдмрд╛рдЗрдЯ рд╣реЛрдЧрд╛ред
рд▓реЛрдб рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкрдврд╝рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдпрджрд┐ рдЖрдкрдиреЗ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рдХрдХреНрд╖реЛрдВ рдХреЗ рд░рдВрдЧ рдмрджрд▓ рджрд┐рдП рд╣реИрдВ, рддреЛ рдореИрдк рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рд╕рд╣реЗрдЬрддреЗ рд╕рдордп рд░рдВрдЧ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдВрдЧреЗред рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдЪрд╛рддреЗ рд╣реИрдВ, рдмрд╛рдХреА рд╕реЗрд▓ рдбреЗрдЯрд╛ рд╕рдорд╛рди рд░рд╣реЗрдЧрд╛ред рдпрд╣реА рд╣реИ, рд▓реЛрдбрд┐рдВрдЧ рд╕реЗ рдЗрд▓рд╛рдХреЗ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдКрдВрдЪрд╛рдИ, рдЬрд▓ рд╕реНрддрд░, рдЗрд▓рд╛рдХреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдЖрджрд┐ рдирд╣реАрдВред
рд╕реЗрд╡рд┐рдВрдЧ рдСрд▓ рдЗрдВрдЯреЗрдЧрд░
рдПрдХ рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдЕрдиреНрдп рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЖрдЗрдП рд╕рднреА рдкреВрд░реНрдгрд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣ рд░рд╛рд╣рдд рдХреЗ рдкреНрд░рдХрд╛рд░, рд╕реЗрд▓ рдКрдВрдЪрд╛рдИ, рдЬрд▓ рд╕реНрддрд░, рд╢рд╣рд░ рд╕реНрддрд░, рдЦреЗрдд рд╕реНрддрд░, рд╡рдирд╕реНрдкрддрд┐ рд╕реНрддрд░ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдереЗред
public void Save (BinaryWriter writer) { writer.Write(terrainTypeIndex); writer.Write(elevation); writer.Write(waterLevel); writer.Write(urbanLevel); writer.Write(farmLevel); writer.Write(plantLevel); writer.Write(specialIndex); } public void Load (BinaryReader reader) { terrainTypeIndex = reader.ReadInt32(); elevation = reader.ReadInt32(); waterLevel = reader.ReadInt32(); urbanLevel = reader.ReadInt32(); farmLevel = reader.ReadInt32(); plantLevel = reader.ReadInt32(); specialIndex = reader.ReadInt32(); }
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реБрдП, рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдореЗрдВ рд╣рдордиреЗ рдЬреЛ рдХреБрдЫ рднреА рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдерд╛, рд╡рд╣ рд╕реЗрд▓ рдХреА рдКрдВрдЪрд╛рдИ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдЖрдк рдКрдВрдЪрд╛рдИ рд╕реНрддрд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕реЗрд▓ рдХреА рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЗрд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ, рд▓реЛрдб рдХреА рдЧрдИ рдКрдВрдЪрд╛рдИ рдХрд╛ рдореВрд▓реНрдпред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рдо рдХрд░рддреА рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдЗрдП
RefreshPosition
рд╕реЗрдЯрд░ рд╕реЗ рд╕реЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреЛ рдирд┐рдХрд╛рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрд▓рдЧ
RefreshPosition
рд╡рд┐рдзрд┐ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдПрдХрдорд╛рддреНрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣
value
рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реИред
void RefreshPosition () { Vector3 position = transform.localPosition; position.y = elevation * HexMetrics.elevationStep; position.y += (HexMetrics.SampleNoise(position).y * 2f - 1f) * HexMetrics.elevationPerturbStrength; transform.localPosition = position; Vector3 uiPosition = uiRect.localPosition; uiPosition.z = -position.y; uiRect.localPosition = uiPosition; }
рдЕрдм рд╣рдо рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдКрдВрдЪрд╛рдИ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рджред
public int Elevation { тАж set { if (elevation == value) { return; } elevation = value; RefreshPosition(); ValidateRivers(); тАж } } тАж public void Load (BinaryReader reader) { terrainTypeIndex = reader.ReadInt32(); elevation = reader.ReadInt32(); RefreshPosition(); тАж }
рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рдж, рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдЕрдкрдиреА рд╕реНрдкрд╖реНрдЯ рдКрдВрдЪрд╛рдИ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреАред
рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛
рд╕реЗрд▓ рдореЗрдВ рджреАрд╡рд╛рд░реЛрдВ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реА / рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдирджрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдмреБрд▓рд┐рдпрди рдЦреЗрддреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдбрд╝рдХ рдбреЗрдЯрд╛ рдЫрд╣ рдмреБрд▓рд┐рдпрди рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд▓реВрдк рдХреЗ рд╕рд╛рде рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
public void Save (BinaryWriter writer) { writer.Write(terrainTypeIndex); writer.Write(elevation); writer.Write(waterLevel); writer.Write(urbanLevel); writer.Write(farmLevel); writer.Write(plantLevel); writer.Write(specialIndex); writer.Write(walled); writer.Write(hasIncomingRiver); writer.Write(hasOutgoingRiver); for (int i = 0; i < roads.Length; i++) { writer.Write(roads[i]); } }
рдЗрдирдмрд╛рдЙрдВрдб рдФрд░ рдЖрдЙрдЯрдмрд╛рдЙрдВрдб рдирджрд┐рдпреЛрдВ рдХреА рджрд┐рд╢рд╛
HexDirection
рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА
HexDirection
рд╣реИрдВред
HexDirection
рдкреНрд░рдХрд╛рд░ рдПрдХ рдПрдиреНрдпреВрдорд░реЗрд╢рди рд╣реИ рдЬрд┐рд╕реЗ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдХрдИ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХреНрд░рдордмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
writer.Write(hasIncomingRiver); writer.Write((int)incomingRiver); writer.Write(hasOutgoingRiver); writer.Write((int)outgoingRiver);
рдмреВрд▓рд┐рдпрди рдорд╛рдиреЛрдВ рдХреЛ
BinaryReader.ReadBoolean
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдирджрд┐рдпреЛрдВ рдХреА рджрд┐рд╢рд╛рдПрдБ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ
HexDirection
ред
public void Load (BinaryReader reader) { terrainTypeIndex = reader.ReadInt32(); elevation = reader.ReadInt32(); RefreshPosition(); waterLevel = reader.ReadInt32(); urbanLevel = reader.ReadInt32(); farmLevel = reader.ReadInt32(); plantLevel = reader.ReadInt32(); specialIndex = reader.ReadInt32(); walled = reader.ReadBoolean(); hasIncomingRiver = reader.ReadBoolean(); incomingRiver = (HexDirection)reader.ReadInt32(); hasOutgoingRiver = reader.ReadBoolean(); outgoingRiver = (HexDirection)reader.ReadInt32(); for (int i = 0; i < roads.Length; i++) { roads[i] = reader.ReadBoolean(); } }
рдЕрдм рд╣рдо рд╕рднреА рд╕реЗрд▓ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдкреВрд░реНрдг рдмрдЪрдд рдФрд░ рдмрд╣рд╛рд▓реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд╕реЗрд▓ рдореЗрдВ рдиреМ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рдиреМ рдмреБрд▓рд┐рдпрди рдорд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмреВрд▓рд┐рдпрди рдорд╛рди рдПрдХ рдмрд╛рдЗрдЯ рд▓реЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрд▓ рдХреБрд▓ 45 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА 300 рд╕реЗрд▓ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдХреБрд▓ 13,500 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реЛрддреА рд╣реИредunitypackageрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдХрд░реЗрдВ
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 300 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП 13,500 рдмрд╛рдЗрдЯреНрд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИрдВ, рд╢рд╛рдпрдж рд╣рдо рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░рд╛ рдкреВрд░рд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рд╕реАрд░реАрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рддрд░реАрдХрд╛ рд╣реИредрдиреНрдпреВрдореЗрд░рд┐рдХ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдХрдореА
рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд▓ рд╕реНрддрд░реЛрдВ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡реЗ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ реж-реирелрел рдХреА рд╕реАрдорд╛ рдореЗрдВ рд░рд╣реЗрдЧрд╛ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╢реЗрд╖ рддреАрди рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╣реЛрдВрдЧреЗред рдЗрди рдЦрд╛рд▓реА рдмрд╛рдЗрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред рд╣рдо рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдХреЛ рдмрд╛рдЗрдЯ рд▓рд┐рдЦрдХрд░ рдЙрдиреНрд╣реЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред writer.Write((byte)terrainTypeIndex); writer.Write((byte)elevation); writer.Write((byte)waterLevel); writer.Write((byte)urbanLevel); writer.Write((byte)farmLevel); writer.Write((byte)plantLevel); writer.Write((byte)specialIndex); writer.Write(walled); writer.Write(hasIncomingRiver); writer.Write((byte)incomingRiver); writer.Write(hasOutgoingRiver); writer.Write((byte)outgoingRiver);
рдЕрдм, рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ BinaryReader.ReadByte
ред рдмрд╛рдЗрдЯ рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрд╛рдВрддрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред terrainTypeIndex = reader.ReadByte(); elevation = reader.ReadByte(); RefreshPosition(); waterLevel = reader.ReadByte(); urbanLevel = reader.ReadByte(); farmLevel = reader.ReadByte(); plantLevel = reader.ReadByte(); specialIndex = reader.ReadByte(); walled = reader.ReadBoolean(); hasIncomingRiver = reader.ReadBoolean(); incomingRiver = (HexDirection)reader.ReadByte(); hasOutgoingRiver = reader.ReadBoolean(); outgoingRiver = (HexDirection)reader.ReadByte();
рддреЛ рд╣рдо рдкреНрд░рддрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рддреАрди рдмрд╛рдЗрдЯреНрд╕ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдЬреЛ 27 рдмрд╛рдЗрдЯреНрд╕ рдкреНрд░рддрд┐ рд╕реЗрд▓ рдмрдЪрд╛рддрд╛ рд╣реИред рдЕрдм рд╣рдо рдкреНрд░рддрд┐ рд╕реЗрд▓ 18 рдмрд╛рдЗрдЯреНрд╕ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддрд┐ рд╕реЗрд▓ рдХреЗрд╡рд▓ 5,400 рдмрд╛рдЗрдЯреНрд╕редрдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдкреБрд░рд╛рдиреЗ рдХрд╛рд░реНрдб рдХрд╛ рдбреЗрдЯрд╛ рдЕрд░реНрдерд╣реАрди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдкреБрд░рд╛рдиреА рд╕реЗрд╡ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рдбреЗрдЯрд╛ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рднреНрд░рдорд┐рдд рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдорд┐рд▓рддреА рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╣рдо рдХрдо рдбреЗрдЯрд╛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рд╕реЗ рдЖрдЧреЗ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреАредрдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬрдм рд╣рдо рд╕рд╣реЗрдЬреЗрдВ рдкреНрд░рд╛рд░реВрдк рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдХреЛрдб рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИред рднрд▓реЗ рд╣реА рд╣рдо рдкреНрд░рд╛рд░реВрдк рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рдЕрднреА рднреА рдкреБрд░рд╛рдиреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрд░рд┐рд╡рд░ рдмрд╛рдЗрдЯ рдпреВрдирд┐рдпрди
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдо рдирджреА рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐ рджрд┐рд╢рд╛ рджреЛред рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╢рд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирджреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдФрд░ рдЬрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╡рд╣ рдмрд╣рддреЗ рд╣реИрдВ, рдЙрд╕реЗрд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдирджреА рдХреА рджрд┐рд╢рд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдирджреА рдХреЗ рдмрд┐рдирд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирджреА рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдПрдХ рдмрд╛рдЗрдЯ рдЕрдкрдиреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧреАредрд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЫрд╣ рд╕рдВрднрд╛рд╡рд┐рдд рджрд┐рд╢рд╛рдПрдВ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЕрдВрддрд░рд╛рд▓ 5-5 рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рддреАрди рдмрд┐рдЯреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдЗрдирд░реА рдлреЙрд░реНрдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ 0 рд╕реЗ 5 рддрдХ 000, 001, 010, 011, 100, 101 рдФрд░ 110 рдХреА рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВред рдЕрд░реНрдерд╛рддреН, рдПрдХ рдФрд░ рдмрд╛рдЗрдЯ рдкрд╛рдВрдЪ рдФрд░ рдмрд┐рдЯреНрд╕ рдЕрдкреНрд░рдпреБрдХреНрдд рд░рд╣рддрд╛ рд╣реИред рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдирджреА рдореМрдЬреВрдж рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк 128 рдирдВрдмрд░ рдХреЗ рдЕрдиреБрд░реВрдк рдЖрдард╡реЗрдВ рдмрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджрд┐рд╢рд╛ рдХреЛ рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 128 рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрддреНрддрд░-рдкрд╢реНрдЪрд┐рдо рдореЗрдВ рдмрд╣рдиреЗ рд╡рд╛рд▓реА рдирджреА рд╣реИ, рддреЛ рд╣рдо 133 рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЬреЛ рдХрд┐ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд░реВрдк рдореЗрдВ 10000101 рд╣реИред рдФрд░ рдЕрдЧрд░ рдХреЛрдИ рдирджреА рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВредрдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдЪрд╛рд░ рдФрд░ рдмрд┐рдЯ рдЕрдкреНрд░рдпреБрдХреНрдд рд░рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рд╣рдо рдирджреА рдХреА рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдУрдВ рдХреЛ рдПрдХ рдмрд╛рдЗрдЯ рдореЗрдВ рдорд┐рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рднреНрд░рд╛рдордХ рд╣реЛрдЧреАред
рдирджреА рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдбреАрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдмрд╛рдЗрдЯ рдХреЛ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЗрд╕рдХрд╛ рдореВрд▓реНрдп 128 рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдирджреА рд╣реИред рдЗрд╕рдХреА рджрд┐рд╢рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 128 рдХреЛ рдШрдЯрд╛рдПрдВ, рдФрд░ рдлрд┐рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ HexDirection
ред
рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрд▓ 16 рдмрд╛рдЗрдЯреНрд╕ рдорд┐рд▓реЗред рд╕реБрдзрд╛рд░ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрди рдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрдПрдХ-рдПрдХ рдмрд╛рдЗрдЯ рдореЗрдВ рд╕рдбрд╝рдХреЛрдВ рдХреЛ рдмрдЪрд╛рдПрдВ
рд╣рдо рд╕рдбрд╝рдХ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдкреАрдбрд╝рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдЪрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЫрд╣ рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп рд╣реИрдВ рдЬреЛ рдПрдХ рдмрд╛рдЗрдЯ рдХреЗ рдкрд╣рд▓реЗ рдЫрд╣ рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╕рдбрд╝рдХ рдХреА рдкреНрд░рддреНрдпреЗрдХ рджрд┐рд╢рд╛ рдХреЛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рджреЛ рдХреА рд╢рдХреНрддрд┐ рд╣реИред рдпреЗ 1, 2, 4, 8, 16 рдФрд░ 32 рдпрд╛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд░реВрдк рдореЗрдВ 1, 10, 100, 1000, 10000 рдФрд░ 100000 рд╣реИрдВредрд╕рдорд╛рдкреНрдд рдмрд╛рдЗрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрди рдмрд┐рдЯреНрд╕ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдбрд╝рдХреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рджрд┐рд╢рд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рджрд┐рд╢рд╛ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рджрд┐рд╢рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ <<
ред рдлрд┐рд░ рдмрд┐рдЯрд╡рд╛рдЗрдЬ рдпрд╛ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкрд╣рд▓реА, рджреВрд╕рд░реА, рддреАрд╕рд░реА рдФрд░ рдЫрдареА рд╕рдбрд╝рдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╕рдорд╛рдкреНрдд рдмрд╛рдЗрдЯ 100111 рд╣реЛрдЧреАред int roadFlags = 0; for (int i = 0; i < roads.Length; i++) {
<< рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?. integer . . integer . , . 1 << n
2 n , .
рд╕рдбрд╝рдХ рдХреЗ рдмреВрд▓рд┐рдпрди рдореВрд▓реНрдп рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмрд┐рдЯ рд╕реЗрдЯ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЙрдкрдпреБрдХреНрдд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдмрд┐рдЯрд╡рд╛рдЗрдЬ рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреНрдп рд╕рднреА рдмрд┐рдЯреНрд╕ рдХреЛ рдорд╛рд╕реНрдХ рдХрд░реЗрдВред рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдмрд┐рдЯ рд╕реЗрдЯ рд╣реИ рдФрд░ рд╕рдбрд╝рдХ рдореМрдЬреВрдж рд╣реИред int roadFlags = reader.ReadByte(); for (int i = 0; i < roads.Length; i++) { roads[i] = (roadFlags & (1 << i)) != 0; }
рдЫрд╣ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдПрдХ рдореЗрдВ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкреНрд░рддрд┐ рд╕реЗрд▓ 11 рдмрд╛рдЗрдЯреНрд╕ рдорд┐рд▓реЗред 300 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдпрд╣ рдХреЗрд╡рд▓ 3,300 рдмрд╛рдЗрдЯреНрд╕ рд╣реИред рдпрд╣реА рд╣реИ, рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ 75% рдХрдо рдХрд░ рджрд┐рдпрд╛ рд╣реИредрднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ
рд╣рдорд╛рд░реЗ рд╕рд╣реЗрдЬреЗрдВ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкреВрд░реНрдг рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдФрд░ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдорд╛рдирдЪрд┐рддреНрд░ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо HexMapEditor
рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╢реВрдиреНрдп рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдВрдЧреЗ ред public void Save () { string path = Path.Combine(Application.persistentDataPath, "test.map"); using ( BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create)) ) { writer.Write(0); hexGrid.Save(writer); } }
рдпрд╣ рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд╛рд░ рдЦрд╛рд▓реА рдмрд╛рдЗрдЯ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдпрд╛рдиреА рдХрд╛рд░реНрдб рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЗрди рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛ред public void Load () { string path = Path.Combine(Application.persistentDataPath, "test.map"); using (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { reader.ReadInt32(); hexGrid.Load(reader); } }
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпреЗ рдмрд╛рдЗрдЯреНрд╕ рдЕрдм рддрдХ рдмреЗрдХрд╛рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдиреНрд╣реЗрдВ рдПрдХ рд╣реЗрдбрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдмреИрдХрд╡рд░реНрдб рд╕рдВрдЧрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рд╣рдордиреЗ рдЗрди рдЕрд╢рдХреНрдд рдмрд╛рдЗрдЯреНрд╕ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдерд╛, рддреЛ рдкрд╣рд▓реЗ рдХреБрдЫ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдирдХреНрд╢реЗ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗрд▓ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рдереАред рдЗрд╕рд▓рд┐рдП, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рд╕рд╣реЗрдЬреЗ рдЧрдП рдкреНрд░рд╛рд░реВрдк рдХреЗ рдХрд┐рд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рдЪрд╛рд░ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╡реЗ рдЦрд╛рд▓реА рд╣реИрдВ, рддреЛ рд╣рдо рдкреНрд░рд╛рд░реВрдк 0. рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, рд╡рд╣рд╛рдВ рдХреБрдЫ рдФрд░ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛редрдпрд╣реА рд╣реИ, рдпрджрд┐ рд╢реАрд░реНрд╖рдХ рдЧреИрд░-рд╢реВрдиреНрдп рд╣реИ, рддреЛ рд╣рдо рдХреБрдЫ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдБ рдХреНрдпрд╛ рдбреЗрдЯрд╛ рд╣реИ, рд╣рдореЗрдВ рдореИрдк рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдордирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред using (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { int header = reader.ReadInt32(); if (header == 0) { hexGrid.Load(reader); } else { Debug.LogWarning("Unknown map format " + header); } }
unitypackageрднрд╛рдЧ 13: рдХрд╛рд░реНрдб рдкреНрд░рдмрдВрдзрди
- рд╣рдо рдкреНрд▓реЗ рдореЛрдб рдореЗрдВ рдирдП рдХрд╛рд░реНрдб рдмрдирд╛рддреЗ рд╣реИрдВред
- рдХрд╛рд░реНрдб рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВред
- рд╕рд╣реЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВред
- рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдордирдорд╛рдирд╛ рдирдХреНрд╢реЗ рд▓реЛрдб рдХрд░реЗрдВред
- рдХрд╛рд░реНрдб рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдбреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВрдЧреЗредрдЗрд╕ рднрд╛рдЧ рд╕реЗ рд╢реБрд░реВ рдХрд░рдХреЗ, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ 5.5.0 рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдорд╛рдирдЪрд┐рддреНрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╢реБрд░реБрдЖрдд редрдирдП рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдПрдБ
рдЗрд╕ рдмрд┐рдВрджреБ рддрдХ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд╣реЗрдХреНрд╕рд╛рдЧреЛрди рдЧреНрд░рд┐рдб рдмрдирд╛рдпрд╛ - рдЬрдм рджреГрд╢реНрдп рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реЛред рдЕрдм рд╣рдо рдХрд┐рд╕реА рднреА рд╕рдордп рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдХрд░реЗрдВрдЧреЗред рдирдпрд╛ рдХрд╛рд░реНрдб рдмрд╕ рд╡рд░реНрддрдорд╛рди рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛редрдЬрд╛рдЧрдиреЗ рдореЗрдВ HexGrid
, рдХреБрдЫ рдореАрдЯреНрд░рд┐рдХ рдЖрд░рдВрднрд┐рдХ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЯреБрдХрдбрд╝реЗ рдФрд░ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред рдЯреБрдХрдбрд╝реЛрдВ рдФрд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рдмрдирд╛рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП HexGrid.Awake
рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ - рдЖрд░рдВрднреАрдХрд░рдг рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ CreateMap
ред void Awake () { HexMetrics.noiseSource = noiseSource; HexMetrics.InitializeHashGrid(seed); HexMetrics.colors = colors; CreateMap(); } public void CreateMap () { cellCountX = chunkCountX * HexMetrics.chunkSizeX; cellCountZ = chunkCountZ * HexMetrics.chunkSizeZ; CreateChunks(); CreateCells(); }
рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП UI рдореЗрдВ рдПрдХ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВред рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрдбрд╝рд╛ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рд╕реЗрд╡ рдФрд░ рд▓реЛрдб рдмрдЯрди рдХреЗ рдиреАрдЪреЗ рд░рдЦрд╛редрдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдЯрдиредрдЖрдЗрдП рдЗрд╕ рдмрдЯрди рдХреЗ рдСрди рдХреНрд▓рд┐рдХ рдЗрд╡реЗрдВрдЯ рдХреЛ CreateMap
рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреА рд╡рд┐рдзрд┐ рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ HexGrid
ред рдпрд╣реА рд╣реИ, рд╣рдо рд╣реЗрдХреНрд╕ рдореИрдк рд╕рдВрдкрд╛рджрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдПрдВрдЧреЗ , рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рд╣реЗрдХреНрд╕ рдЧреНрд░рд┐рдб рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ редрдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдирдХреНрд╢рд╛ рдмрдирд╛рдПрдВредрдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдирд╛
рдЕрдм, рдЬрдм рдЖрдк рдиреНрдпреВ рдореИрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЯреБрдХрдбрд╝реЛрдВ рдФрд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреБрд░рд╛рдиреЗ рд╕реНрд╡рддрдГ рд╣рдЯрд╛рдП рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдПрдХ-рджреВрд╕рд░реЗ рдкрд░ рдЖрд░реЛрдкрд┐рдд рдХрдИ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрд╖ рдорд┐рд▓рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдкреБрд░рд╛рдиреА рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╕рднреА рд╡рд░реНрддрдорд╛рди рдЕрдВрд╢реЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ CreateMap
ред public void CreateMap () { if (chunks != null) { for (int i = 0; i < chunks.Length; i++) { Destroy(chunks[i].gameObject); } } тАж }
рдХреНрдпрд╛ рд╣рдо рдореМрдЬреВрджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?, . , . , тАФ , .
рдХреНрдпрд╛ рд▓реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрд╛рд▓ рддрддреНрд╡реЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?рдмреЗрд╢рдХред .
рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдЖрдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
рдЬрдмрдХрд┐ рд╣рдо рдирдХреНрд╢реЗ рдХрд╛ рдЖрдХрд╛рд░ рдЦреЗрддреЛрдВ chunkCountX
рдФрд░ chunkCountZ
рд╡рд╕реНрддреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ HexGrid
ред рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдЙрд╕реА рд╕рдордп, рд╣рдо рдХрд╛рд░реНрдб рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрджрд▓реЗ рдмрд┐рдирд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рднреА рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЪрд▓реЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЯреБрдХрдбрд╝реЗ рдлрд╝реАрд▓реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рд╕реНрд╡реИрдк рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдПрдХ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдХреЛ рдЬрдиреНрдо рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HexMapCamera
рдЯреБрдХрдбрд╝реЗ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмрджрд▓реЛ HexMapCamera.ClampPosition
рддрд╛рдХрд┐ рд╡рд╣ рд╕реАрдзреЗ рдЙрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗ рдЬреЛ рдЙрд╕реЗ рдЕрднреА рднреА рдЪрд╛рд╣рд┐рдПред Vector3 ClampPosition (Vector3 position) { float xMax = (grid.cellCountX - 0.5f) * (2f * HexMetrics.innerRadius); position.x = Mathf.Clamp(position.x, 0f, xMax); float zMax = (grid.cellCountZ - 1) * (1.5f * HexMetrics.outerRadius); position.z = Mathf.Clamp(position.z, 0f, zMax); return position; }
рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЖрдХрд╛рд░ 5 рдмрд╛рдЗ 5 рд╕реЗрд▓ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЖрдХрд╛рд░ 4 рдмрд╛рдЗ 3 рдЯреБрдХрдбрд╝реЗ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдХрд╛рд░реНрдбреЛрдВ рдХреЛ рд╕рдорд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 20 рд╕реЗ 15 рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдпрджреНрдпрдкрд┐ рд╣рдордиреЗ рдХреЛрдб рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд┐рдП рд╣реИрдВ, рдЧреНрд░рд┐рдб рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрднреА рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝реАрд▓реНрдб рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ 0 рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИрдВредрдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрд╛рд░реНрдб рдХрд╛ рдЖрдХрд╛рд░ 20 рдмрд╛рдИ 15 рд╣реИредрдХрд╕реНрдЯрдо рдХрд╛рд░реНрдб рдХрд╛ рдЖрдХрд╛рд░
рдЕрдЧрд▓рд╛ рдЪрд░рдг рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реЛрдЧрд╛, рди рдХрд┐ рдХреЗрд╡рд▓ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HexGrid.CreateMap
рдПрдХреНрд╕ рдФрд░ рдЬреЗрдб рдХреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рд╡реЗ рдореМрдЬреВрджрд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗред рдЕрдВрджрд░, Awake
рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╣реЗрдВрдЧреЗред void Awake () { HexMetrics.noiseSource = noiseSource; HexMetrics.InitializeHashGrid(seed); HexMetrics.colors = colors; CreateMap(cellCountX, cellCountZ); } public void CreateMap (int x, int z) { тАж cellCountX = x; cellCountZ = z; chunkCountX = cellCountX / HexMetrics.chunkSizeX; chunkCountZ = cellCountZ / HexMetrics.chunkSizeZ; CreateChunks(); CreateCells(); }
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдХреЗрд╡рд▓ рдЙрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреЛ рдХрд┐ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред рдЕрдиреНрдпрдерд╛, рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдмрд╣реБрдд рдХрдо рдЯреБрдХрдбрд╝реЗ рдмрдирд╛рдПрдЧрд╛ред рдпрджреНрдпрдкрд┐ рд╣рдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рднрд░реЗ рдЕрдВрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд▓реЛ рдХреЗрд╡рд▓ рдЙрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВредрд╣рдо %
рдЯреБрдХрдбрд╝реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╢реЗрд╖ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрджрд┐ рдпрд╣ рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╡рд┐рд╕рдВрдЧрддрд┐ рд╣реИ рдФрд░ рд╣рдо рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдирд╣реАрдВ рдмрдирд╛рдПрдВрдЧреЗред рдФрд░ рдЬрдм рд╣рдо рдРрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╢реВрдиреНрдп рдФрд░ рдирдХрд╛рд░рд╛рддреНрдордХ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред public void CreateMap (int x, int z) { if ( x <= 0 || x % HexMetrics.chunkSizeX != 0 || z <= 0 || z % HexMetrics.chunkSizeZ != 0 ) { Debug.LogError("Unsupported map size."); return; } тАж }
рдирдпрд╛ рдХрд╛рд░реНрдб рдореЗрдиреВ
рд╡рд░реНрддрдорд╛рди рдЪрд░рдг рдореЗрдВ, рдирдпрд╛ рдореИрдк рдмрдЯрди рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдореЗрдВ HexGrid.CreateMap
рдЕрдм рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВред рд╣рдо рд╕реАрдзреЗ рдПрдХрддрд╛ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдРрд╕реЗ рддрд░реАрдХреЛрдВ рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдбреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреБрдЫ рдмрдЯрди рдЪрд╛рд╣рд┐рдПред рдЗрди рд╕рднреА рдмрдЯрдиреЛрдВ рдХреЛ рдореБрдЦреНрдп UI рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЪрд▓реЛ рдПрдХ рдЕрд▓рдЧ рдкреЙрдкрдЕрдк рдореЗрдиреВ рдмрдирд╛рдПрдБредрджреГрд╢реНрдп рдореЗрдВ рдирдпрд╛ рдХреИрдирд╡рд╛рд╕ рдЬреЛрдбрд╝реЗрдВ ( GameObject / UI / рдХреИрдирд╡рд╛рд╕ )ред рд╣рдо рдореМрдЬреВрджрд╛ рдХреИрдирд╡рд╛рд╕ рдХреЗ рд╕рдорд╛рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЗрд╕рдХреЗ рдХреНрд░рдо рдХреНрд░рдо 1 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдореБрдЦреНрдп рд╕рдВрдкрд╛рджрдХ рдХреЗ UI рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реЛрдЧрд╛ред рдореИрдВрдиреЗ рдХреИрдирд╡рд╛рд╕ рдФрд░ рдЗрд╡реЗрдВрдЯ рд╕рд┐рд╕реНрдЯрдо рджреЛрдиреЛрдВ рдХреЛ рдирдП рдпреВрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдмрдЪреНрдЪрд╛ рдмрдирд╛ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рджреГрд╢реНрдп рдкрджрд╛рдиреБрдХреНрд░рдо рд╕рд╛рдл рд░рд╣реЗредрдХреИрдирд╡рд╛рд╕ рдореЗрдиреВ рдирдпрд╛ рдирдХреНрд╢рд╛ред рдирдП рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдиреВ рдореЗрдВрдПрдХ рдкреИрдирд▓ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╕рдВрдкреВрд░реНрдг рд╕реНрдХреНрд░реАрди рдХреЛ рдмрдВрдж рдХрд░ рджреЗред рдкреГрд╖реНрдарднреВрдорд┐ рдХреЛ рдЧрд╣рд░рд╛ рдХрд░рдиреЗ рдФрд░ рдореЗрдиреВ рдХреЗ рдЦреБрд▓рдиреЗ рдкрд░ рдХрд░реНрд╕рд░ рдХреЛ рдмрд╛рдХреА рд╕рдм рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕реЗ рдПрдХ рд╕рдорд╛рди рд░рдВрдЧ рджрд┐рдпрд╛, рдЗрд╕рдХреА рд╕реНрд░реЛрдд рдЫрд╡рд┐ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рддреЗ рд╣реБрдП , рдФрд░ рд░рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ (0, 0, 0, 200)редрдкреГрд╖реНрдарднреВрдорд┐ рдЫрд╡рд┐ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред рд╣реЗрдХреНрд╕ рдореИрдк рдПрдбрд┐рдЯрд░рдкреИрдирд▓ рдХреЗ рд╕рдорд╛рди рдХреИрдирд╡рд╛рд╕ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рдПрдХ рдореЗрдиреВ рдмрд╛рд░ рдЬреЛрдбрд╝реЗрдВ ред рдЪрд▓реЛ рдЙрд╕рдХреЗ рдЫреЛрдЯреЗ, рдордзреНрдпрдо рдФрд░ рдмрдбрд╝реЗ рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рд▓реЗрдмрд▓ рдФрд░ рдмрдЯрди рдмрдирд╛рдПрдВред рдЦрд┐рд▓рд╛рдбрд╝реА рджреНрд╡рд╛рд░рд╛ рдЕрдкрдирд╛ рд╡рд┐рдЪрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣рдо рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд░рджреНрдж рдмрдЯрди рднреА рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдбрд┐рдЬрд╝рд╛рдЗрди рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреВрд░реЗ рдирдП рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдиреВ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░реЗрдВ редрдирдпрд╛ рдирдХреНрд╢рд╛ рдореЗрдиреВредрдореЗрдиреВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдШрдЯрдХ рдмрдирд╛рдПрдВ NewMapMenu
рдФрд░ рдЗрд╕реЗ рдХреИрдирд╡рд╛рд╕ рдХреЗ рдирдП рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдиреВ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╣реЗрдХреНрд╕ рдЧреНрд░рд┐рдб рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрд╕рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред using UnityEngine; public class NewMapMenu : MonoBehaviour { public HexGrid hexGrid; }
рдирдП рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдиреВ рдХреЗ рдШрдЯрдХредрдЦреЛрд▓рдирд╛ рдФрд░ рдмрдВрдж рдХрд░рдирд╛
рд╣рдо рдмрд╕ рдХреИрдирд╡рд╛рд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдХреНрд░рд┐рдп рдФрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдХреЗ рдкреЙрдкрдЕрдк рдореЗрдиреВ рдХреЛ рдЦреЛрд▓ рдФрд░ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред NewMapMenu
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ред public void Open () { gameObject.SetActive(true); } public void Close () { gameObject.SetActive(false); }
рдЕрдм рдПрдбрд┐рдЯрд░ рдХреЗ рдиреНрдпреВ рдореИрдк рдпреВрдЖрдИ рдмрдЯрди Open
рдХреЛ рдиреНрдпреВ рдореИрдк рдореЗрдиреНрдпреВ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд┐рдзрд┐ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ редрджрдмрд╛рдХрд░ рдореЗрдиреВ рдХреЛ рдЦреЛрд▓рдирд╛редрд╕рд╛рде рд╣реА рдХреИрдВрд╕рд▓ рдмрдЯрди рдХреЛ рд╡рд┐рдзрд┐ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВClose
ред рдпрд╣ рд╣рдореЗрдВ рдкреЙрдкрдЕрдк рдореЗрдиреВ рдЦреЛрд▓рдиреЗ рдФрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛редрдирдП рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдПрдБ
рдирдП рдирдХреНрд╢реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╣реЗрдХреНрд╕ рдЧреНрд░рд┐рдб рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ CreateMap
ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрд╕ NewMapMenu
рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдПрдХ рдордирдорд╛рдиреЗ рдЖрдХрд╛рд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЗрд╕рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ред void CreateMap (int x, int z) { hexGrid.CreateMap(x, z); Close(); }
рдпрд╣ рд╡рд┐рдзрд┐ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рднреА рдЗрд╕реЗ рд╕реАрдзреЗ рдмрдЯрди рдИрд╡реЗрдВрдЯ рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рддрд┐ рдмрдЯрди рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдЬреЛ CreateMap
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░реЗрдЧрд╛ ред рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдирдХреНрд╢реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реВрдк 20 рд╕реЗ 15 рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдордзреНрдп рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрд╕ рдЖрдХрд╛рд░ рдХреЛ рджреЛрдЧреБрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, 40 рд╕реЗ 30 рддрдХ, рдФрд░ рдмрдбрд╝реЗ рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рджреЛрдЧреБрдирд╛ рдХрд░ рджрд┐рдпрд╛ред рдЙрдкрдпреБрдХреНрдд рддрд░реАрдХреЛрдВ рд╕реЗ рдмрдЯрди рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред public void CreateSmallMap () { CreateMap(20, 15); } public void CreateMediumMap () { CreateMap(40, 30); } public void CreateLargeMap () { CreateMap(80, 60); }
рдХреИрдорд░рд╛ рд▓реЙрдХ
рдЕрдм рд╣рдо рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдирдП рдирдХреНрд╢реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рдирдпрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдиреВ рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рдВрдкрд╛рджрдХ рдХреЗ UI рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЕрднреА рднреА рдХреИрдорд░реЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ, рдореЗрдиреВ рдЦреБрд▓рд╛ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде, рдХреИрдорд░рд╛ рд▓реЙрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПредрдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдХреИрдорд░рд╛ рд╣реИ, рдПрдХ рддреНрд╡рд░рд┐рдд рдФрд░ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╕рдорд╛рдзрд╛рди рдмрд╕ рдЗрд╕рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдирд╛ рд╣реИ Locked
ред рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдмрд╣реБрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рд╣рдо рд╕реНрдЯреИрдЯрд┐рдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЕрдВрджрд░ рдЯреНрд░реИрдХ рдХрд░реЗрдВ HexMapCamera
, рдЬреЛ рдХрд┐ рдЕрд╡реЗрдХ рдХреИрдорд░рд╛ рдХреЗ рд╕реЗрдЯ рд╣реЛрдиреЗ рдкрд░ рд╣реЛред static HexMapCamera instance; тАж void Awake () { instance = this; swivel = transform.GetChild(0); stick = swivel.GetChild(0); }
рдПрдХ рд╕рдВрдкрддреНрддрд┐ Locked
рдХреЗрд╡рд▓ рдПрдХ рд╕реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рд░ рдмреВрд▓рд┐рдпрди рд╕рдВрдкрддреНрддрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред HexMapCamera
рдЬрдм рдпрд╣ рдмрдВрдж рд╣реЛрддрд╛ рд╣реИ рддреЛ рдпрд╣ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЕрдирд▓реЙрдХ рд╣реЛрдиреЗ рдкрд░ рдЪрд╛рд▓реВ рдХрд░ рджреЗрддрд╛ рд╣реИред public static bool Locked { set { instance.enabled = !value; } }
рдЕрдм рдпрд╣ NewMapMenu.Open
рдХреИрдорд░реЗ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ NewMapMenu.Close
- рдЗрд╕реЗ рдЕрдирд▓реЙрдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИред public void Open () { gameObject.SetActive(true); HexMapCamera.Locked = true; } public void Close () { gameObject.SetActive(false); HexMapCamera.Locked = false; }
рд╕рд╣реА рдХреИрдорд░рд╛ рд╕реНрдерд┐рддрд┐ рдмрдирд╛рдП рд░рдЦрдирд╛
рдХреИрдорд░реЗ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рддреЗ рд╕рдордп рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕реЗ рдЫреЛрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдХреИрдорд░рд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд╣рд░ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рддрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреИрдорд░рд╛ рд╣рд┐рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд╡рд╣ рд╡рд╣реАрдВ рд░рд╣реЗрдЧреАред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдпрд╣ рдирдП рдирдХреНрд╢реЗ рдХреА рд╕реАрдорд╛ рддрдХ рд╕реАрдорд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛редрдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо HexMapCamera
рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ValidatePosition
ред AdjustPosition
рд╢реВрдиреНрдп рдСрдлрд╝рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдХреИрдорд░реЗ рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рд╕реАрдорд╛рдУрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдХреИрдорд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдП рдирдХреНрд╢реЗ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рд╣реИ, рддреЛ рдпрд╣ рдЬрдЧрд╣ рдореЗрдВ рд░рд╣реЗрдЧрд╛ред public static void ValidatePosition () { instance.AdjustPosition(0f, 0f); }
NewMapMenu.CreateMap
рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЕрдВрджрд░ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдУ ред void CreateMap (int x, int z) { hexGrid.CreateMap(x, z); HexMapCamera.ValidatePosition(); Close(); }
unitypackageрд╕реЗрд╡рд┐рдВрдЧ рдореИрдк рд╕рд╛рдЗрдЬ
рдпрджреНрдпрдкрд┐ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрдЪрдд рдФрд░ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЗрд╕рдХрд╛ рдзреНрдпрд╛рди рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╛ рдЧрд▓рдд рдорд╛рдирдЪрд┐рддреНрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ рд▓реЛрдб рдХрд┐рдП рдЧрдП рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИредрдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реЗрд▓ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЙрдЪрд┐рдд рдЖрдХрд╛рд░ рдХрд╛ рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдирдХреНрд╢рд╛ рдмрдЪрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдпрджрд┐ рд╣рдо рд╢реБрд░реБрдЖрдд рдореЗрдВ HexGrid.Load
20 рд╕реЗ 15 рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ ред public void Load (BinaryReader reader) { CreateMap(20, 15); for (int i = 0; i < cells.Length; i++) { cells[i].Load(reader); } for (int i = 0; i < chunks.Length; i++) { chunks[i].Refresh(); } }
рдХрд╛рд░реНрдб рдХреЗ рдЖрдХрд╛рд░ рдХрд╛ рднрдВрдбрд╛рд░рдг
рдмреЗрд╢рдХ, рд╣рдо рдХрд┐рд╕реА рднреА рдЖрдХрд╛рд░ рдХрд╛ рдХрд╛рд░реНрдб рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рдордиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ред public void Save (BinaryWriter writer) { writer.Write(cellCountX); writer.Write(cellCountZ); for (int i = 0; i < cells.Length; i++) { cells[i].Save(writer); } }
рдлрд┐рд░ рд╣рдо рд╕рд╣реА рдЖрдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╣реА рдЖрдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред public void Load (BinaryReader reader) { CreateMap(reader.ReadInt32(), reader.ReadInt32()); тАж }
рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдирдХреНрд╢реЗ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдлрд┐рд░ рд╕реЗ рдХреИрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо HexMapEditor.Load
рдирдХреНрд╢рд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░реЗрдВрдЧреЗ ред public void Load () { string path = Path.Combine(Application.persistentDataPath, "test.map"); using (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { int header = reader.ReadInt32(); if (header == 0) { hexGrid.Load(reader, header); HexMapCamera.ValidatePosition(); } else { Debug.LogWarning("Unknown map format " + header); } } }
рдирдпрд╛ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдк
рдпрджреНрдпрдкрд┐ рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд░рдЦреЗрдВрдЧреЗ, рдпрд╣ рдкреБрд░рд╛рдиреЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рд╕реЗ рдХреЛрдб рдирдИ рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдкреБрд░рд╛рдиреЗ рдФрд░ рдирдП рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╣реЗрдбрд░ рдХреЗ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рдХреЛ рдмрдврд╝рд╛рдПрдВрдЧреЗред рдорд╛рдирдЪрд┐рддреНрд░ рдЖрдХрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдкреБрд░рд╛рдиреЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 0. рдерд╛ред рдорд╛рдирдЪрд┐рддреНрд░ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдирдП рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрд╕реНрдХрд░рдг 1 рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕реЗ HexMapEditor.Save
0 рдХреЗ рдмрдЬрд╛рдп 1 рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред public void Save () { string path = Path.Combine(Application.persistentDataPath, "test.map"); using ( BinaryWriter writer = new BinaryWriter(File.Open(path, FileMode.Create)) ) { writer.Write(1); hexGrid.Save(writer); } }
рдЕрдм рд╕реЗ, рдХрд╛рд░реНрдб рдХреЛ рд╕рдВрд╕реНрдХрд░рдг 1 рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдкрд┐рдЫрд▓реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░реНрдб рдкреНрд░рд╛рд░реВрдк рдкрд░ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рддрдм рд╣реЛрдЧрд╛ рдЬрдм рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдб рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ HexMapEditor.Load
рддрд╛рдХрд┐ рдпрд╣ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗред public void Load () { string path = Path.Combine(Application.persistentDataPath, "test.map"); using (BinaryReader reader = new BinaryReader(File.OpenRead(path))) { int header = reader.ReadInt32(); if (header == 1) { hexGrid.Load(reader); HexMapCamera.ValidatePosition(); } else { Debug.LogWarning("Unknown map format " + header); } } }
рдкрд┐рдЫрдбрд╝реА рдЕрдиреБрдХреВрд▓рддрд╛
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рд╣рдо рдЪрд╛рд╣реЗрдВ, рддреЛ рд╣рдо рдЕрднреА рднреА рд╕рдВрд╕реНрдХрд░рдг 0 рдХреЗ рдирдХреНрд╢реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдорд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдЗрди рд╕рднреА рдХрд╛ рдЖрдХрд╛рд░ 20 рд╕реЗ 15. рд╣реИред рдЕрд░реНрдерд╛рдд, рд╢реАрд░реНрд╖рдХ 1 рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╢реВрдиреНрдп рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ HexMapEditor.Load
рд╣реЗрдбрд░ рдХреЛ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ HexGrid.Load
ред if (header <= 1) { hexGrid.Load(reader, header); HexMapCamera.ValidatePosition(); }
HexGrid.Load
рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдПрдХ рд╢реАрд░реНрд╖рдХ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред рдпрджрд┐ рд╢реАрд░реНрд╖ рд▓реЗрдЦ 1 рд╕реЗ рдХрдо рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдб рдЖрдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдиреНрдпрдерд╛, рд╣рдо 20 рдХреЗ рдкреБрд░рд╛рдиреЗ рдлрд┐рдХреНрд╕реНрдб рдХрд╛рд░реНрдб рд╕рд╛рдЗрдЬ рдХрд╛ 15 рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдЗрдЬ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдирд╛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред public void Load (BinaryReader reader, int header) { int x = 20, z = 15; if (header >= 1) { x = reader.ReadInt32(); z = reader.ReadInt32(); } CreateMap(x, z); тАж }
рдирдХреНрд╢рд╛ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг 0рдХрд╛рд░реНрдб рдХрд╛ рдЖрдХрд╛рд░ рдЬрд╛рдБрдЪ
рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХрд┐ рдЯреБрдХрдбрд╝реЗ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИред рдЬрдм рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХрд╛рд░реНрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рдмрд╛рдзрд╛ рдбрд╛рд▓рдиреА рдЪрд╛рд╣рд┐рдПред HexGrid.CreateMap
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдХреЗ рдХреЙрд▓рд░ рдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд┐ рдХреНрдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдмрддрд╛рдХрд░ рдПрдХ рдмреВрд▓ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред public bool CreateMap (int x, int z) { if ( x <= 0 || x % HexMetrics.chunkSizeX != 0 || z <= 0 || z % HexMetrics.chunkSizeZ != 0 ) { Debug.LogError("Unsupported map size."); return false; } тАж return true; }
рдЕрдм, HexGrid.Load
рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рднреА рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред public void Load (BinaryReader reader, int header) { int x = 20, z = 15; if (header >= 1) { x = reader.ReadInt32(); z = reader.ReadInt32(); } if (!CreateMap(x, z)) { return; } тАж }
рдЪреВрдВрдХрд┐ рдореМрдЬреВрджрд╛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдореЗрдВ рдПрдХ рд╣реА рдЖрдХрд╛рд░ рдХрд╛ рдирдХреНрд╢рд╛ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдЪрд░рдг рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред if (x != cellCountX || z != cellCountZ) { if (!CreateMap(x, z)) { return; } }
unitypackageрдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрди
рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдб рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдЯреЗрд╕реНрдЯ.рдореИрдк рд▓рд┐рдЦреЗрдВ рдФрд░ рдкрдврд╝реЗрдВ ред рдЕрдм рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝реЗрдВрдЧреЗредрдирдХреНрд╢реЗ рдХреЛ рд╕реАрдзреЗ рд╕рд╣реЗрдЬрдиреЗ рдпрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдПрдХ рдФрд░ рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдиреНрдирдд рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдФрд░ рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рдПрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдирдП рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдиреВ рдореЗрдВ рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЗрд╕реЗ рд╕реЗрд╡ рд▓реЛрдб рдореЗрдиреВ рдХрд╣реЗрдВрдЧреЗ ред рдпрд╣ рдореЗрдиреВ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдЧрд╛ рдФрд░ рд▓реЛрдб рдХрд░реЗрдЧрд╛, рдпрд╣ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджрдмрд╛рдП рдЧрдП рдмрдЯрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░реЗрдЧрд╛редрд╣рдо рд╕реЗрд╡ рд▓реЛрдб рдореЗрдиреВ рдбрд┐рдЬрд╝рд╛рдЗрди рдмрдирд╛рдПрдВрдЧреЗредрдЬреИрд╕реЗ рдпрд╣ рдПрдХ рд╕реЗрд╡ рдореЗрдиреНрдпреВ рд╣реИред рдмрд╛рдж рдореЗрдВ рд╣рдо рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдмреВрдЯ рдореЗрдиреВ рдореЗрдВ рдмрджрд▓ рджреЗрдВрдЧреЗред рдПрдХ рдЕрдиреНрдп рдореЗрдиреВ рдХреА рддрд░рд╣, рдЗрд╕рдореЗрдВ рдПрдХ рдкреГрд╖реНрдарднреВрдорд┐ рдФрд░ рдПрдХ рдореЗрдиреВ рдмрд╛рд░, рдПрдХ рдореЗрдиреВ рд▓реЗрдмрд▓ рдФрд░ рдПрдХ рд░рджреНрдж рдмрдЯрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдиреВ рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп ( GameObject / UI / рд╕реНрдХреНрд░реЙрд▓ рджреЗрдЦреЗрдВ ) рдЬреЛрдбрд╝реЗрдВред рдиреАрдЪреЗ рд╣рдо рдирдП рдХрд╛рд░реНрдб рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб ( GameObject / UI / рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб ) рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдирдХреНрд╢реЗ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдмрдЯрди рднреА рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдВрдд рдореЗрдВред рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рдЯрд╛рдПрдБ рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ редрдбрд┐рдЬрд╝рд╛рдЗрди рд▓реЛрдб рд▓реЛрдб рдореЗрдиреВредрдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рджреЛрдиреЛрдВ рд╕реНрдХреНрд░реЙрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЕрдХреНрд╖рдо рд╕реНрдХреНрд░реЙрд▓ рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреНрд░реЙрд▓ рдкрдЯреНрдЯреА рдЕрдирдкреНрд▓рдЧ рдХрд░реЗрдВред рд╣рдордиреЗ рд╕реВрдЪреА рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдбрд╝рддрд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдФрд░ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдВрджреЛрд▓рди рдкреНрд░рдХрд╛рд░ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИ редрдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рд╡рд┐рдХрд▓реНрдкредрд╣рдо рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдХреНрд╖реИрддрд┐рдЬ рдмрдЪреНрдЪреЗ рдХреЛ рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдирд┐рдХрд╛рд▓ рджреЗрдВрдЧреЗ , рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рд╡рд░реНрдЯрд┐рдХрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд╕реВрдЪреА рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рддрдХ рдкрд╣реБрдВрдЪреЗ ред рдирд╛рдо рдЗрдирдкреБрдЯрдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЙрд╕рдХреЗ рдЪрд╛рдЗрд▓реНрдб рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдореИрдВрдиреЗ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдкрд╛рда рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд▓реЗрд╕рд╣реЛрд▓реНрдбрд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВредрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдореЗрдиреВ рдбрд┐рдЬрд╛рдЗрдиредрд╣рдо рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдм рдореЗрдиреВ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ рдЫрд┐рдкрд╛ рд╣реЛредрдореЗрдиреВ рдкреНрд░рдмрдВрдзрди
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрдиреВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - SaveLoadMenu
ред рдЬреИрд╕реЗ NewMapMenu
, рдЗрд╕реЗ рдЧреНрд░рд┐рдб рдХреЗ рд▓рд┐рдВрдХ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд╕рд╛рде рд╣реА рд╡рд┐рдзрд┐рдпреЛрдВ Open
рдФрд░ Close
ред using UnityEngine; public class SaveLoadMenu : MonoBehaviour { public HexGrid hexGrid; public void Open () { gameObject.SetActive(true); HexMapCamera.Locked = true; } public void Close () { gameObject.SetActive(false); HexMapCamera.Locked = false; } }
рдЗрд╕ рдШрдЯрдХ рдХреЛ SaveLoadMenu рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рдЧреНрд░рд┐рдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рджреЗрдВредрдШрдЯрдХ SaveLoadMenuредрд╕рд╣реЗрдЬрдиреЗ рдпрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдиреВ рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛ред рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ Open
рдмреВрд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВ ред рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореЗрдиреВ рдХреЛ рд╕реЗрд╡ рдореЛрдб рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред рд╣рдо рдЗрд╕ рдореЛрдб рдХреЛ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЯреНрд░реИрдХ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдмрд╛рдж рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдирд╛ рд╣реИред bool saveMode; public void Open (bool saveMode) { this.saveMode = saveMode; gameObject.SetActive(true); HexMapCamera.Locked = true; }
рдЕрдм рдмрдЯрди рдЧрдардмрдВрдзрди рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рд▓реЛрдб рд╡рд╕реНрддреБ рд╣реЗрдХреНрд╕ рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрдкрд╛рджрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде Open
рд╡рд╕реНрддреБ рдХреА рд╕рд╣реЗрдЬреЗрдВ рдореЗрдиреВ рд▓реЛрдб ред рдХреЗрд╡рд▓ рд╕рд╣реЗрдЬреЗрдВ рдмрдЯрди рдХреЗ рд▓рд┐рдП рдмреВрд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ редрд╕рд╣реЗрдЬреЗрдВ рдореЛрдб рдореЗрдВ рдореЗрдиреВ рдЦреЛрд▓рдирд╛редрдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд░рджреНрдж рдХрд░реЗрдВ рдмрдЯрди рдЗрд╡реЗрдВрдЯ рдХреЛ рд╡рд┐рдзрд┐ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВClose
ред рдЕрдм рд╕рд╣реЗрдЬреЗрдВ рд▓реЛрдб рдореЗрдиреВ рдЦреЛрд▓рд╛ рдФрд░ рдмрдВрдж рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛редрджрд┐рдЦрдиреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡
рд╣рдордиреЗ рдореЗрдиреВ рдХреЛ рдПрдХ рдмрдЪрдд рдореЗрдиреВ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдореЛрдб рдмрдЯрди рдХреЛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджрдмрд╛рдП рдЧрдП рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЗрдиреВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдореЗрдиреВ рд▓реЗрдмрд▓ рдФрд░ рдПрдХреНрд╢рди рдмрдЯрди рд▓реЗрдмрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрди рдЯреИрдЧреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред using UnityEngine; using UnityEngine.UI; public class SaveLoadMenu : MonoBehaviour { public Text menuLabel, actionButtonLabel; тАж }
рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рдиредрдЬрдм рдореЗрдиреВ рд╕реЗрд╡ рдореЛрдб рдореЗрдВ рдЦреБрд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдореМрдЬреВрджрд╛ рд▓реЗрдмрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡ рдореИрдк рдФрд░ рдПрдХреНрд╢рди рдмрдЯрди рдХреЗ рд▓рд┐рдП рд╕реЗрд╡ рдХрд░реЗрдВред рдЕрдиреНрдпрдерд╛, рд╣рдо рд▓реЛрдб рдореЛрдб рдореЗрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд╣рдо рд▓реЛрдб рдореИрдк рдФрд░ рд▓реЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред public void Open (bool saveMode) { this.saveMode = saveMode; if (saveMode) { menuLabel.text = "Save Map"; actionButtonLabel.text = "Save"; } else { menuLabel.text = "Load Map"; actionButtonLabel.text = "Load"; } gameObject.SetActive(true); HexMapCamera.Locked = true; }
рдХрд╛рд░реНрдб рдХрд╛ рдирд╛рдо рдбрд╛рд▓реЗрдВ
рдЪрд▓реЛ рдЕрдм рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдЫреЛрдбрд╝ рджреЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХрд╛рд░реНрдб рдХреЗ рдирд╛рдо рдХреЛ рджрд░реНрдЬ рдХрд░рдХреЗ рд╕рд╣реЗрдЬреА рдЧрдИ рдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд╛рдо рдЗрдирдкреБрдЯInputField
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдШрдЯрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред public InputField nameInput;
рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рдиредрдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкреВрд░реНрдг рдкрде рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдб рдХреЗ рдирд╛рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ .map ред рдЖрдЗрдП рдПрдХ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд░рд╛рд╕реНрддрд╛ рдмрдирд╛рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдЦрд╛рд▓реА рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рд╡рд╛рдкрд╕ рд▓реМрдЯ рдЖрдПрдВрдЧреЗ null
ред using UnityEngine; using UnityEngine.UI; using System.IO; public class SaveLoadMenu : MonoBehaviour { тАж string GetSelectedPath () { string mapName = nameInput.text; if (mapName.Length == 0) { return null; } return Path.Combine(Application.persistentDataPath, mapName + ".map"); } }
рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдорд╛рдиреНрдп рд╡рд░реНрдгреЛрдВ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?, . , , .
Content Type . , - , . , , .
рдмрдЪрдд рдФрд░ рд▓реЛрдбрд┐рдВрдЧ
рдЕрдм рдЗрд╕реЗ рдмрдЪрд╛рдиреЗ рдФрд░ рд▓реЛрдб рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧреЗрдЧреА SaveLoadMenu
ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрджрдо Save
рдФрд░ Load
рдХреА HexMapEditor
рдореЗрдВ SaveLoadMenu
ред рдЙрдиреНрд╣реЗрдВ рдЕрдм рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкрде рдХреЗ рдмрдЬрд╛рдп рдкрде рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред void Save (string path) {
рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдо рдордирдорд╛рдиреА рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдпрджрд┐ рдпрд╣ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддреЗ рд╣реИрдВ рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред void Load (string path) { if (!File.Exists(path)) { Debug.LogError("File does not exist " + path); return; } тАж }
рдЕрдм рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ Action
ред рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрдпрдирд┐рдд рдкрде рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрджрд┐ рдХреЛрдИ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрдЪрд╛рдПрдВ рдпрд╛ рд▓реЛрдб рдХрд░реЗрдВред рдлрд┐рд░ рдореЗрдиреВ рдХреЛ рдмрдВрдж рдХрд░реЗрдВред public void Action () { string path = GetSelectedPath(); if (path == null) { return; } if (saveMode) { Save(path); } else { Load(path); } Close(); }
рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдПрдХреНрд╢рди рдмрдЯрди рдИрд╡реЗрдВрдЯ рд╕рдВрд▓рдЧреНрди рдХрд░рдХреЗ , рд╣рдо рдордирдорд╛рдиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдирд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЛ рд░реАрд╕реЗрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЪрдпрдирд┐рдд рдирд╛рдо рдЕрдЧрд▓реЗ рд╕рд╣реЗрдЬреЗрдВ рдпрд╛ рд▓реЛрдб рддрдХ рд░рд╣реЗрдЧрд╛ред рдпрд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрдЪрд╛рдиреЗ рдпрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛редрдирдХреНрд╢рд╛ рд╕реВрдЪреА рдЖрдЗрдЯрдо
рдЕрдЧрд▓рд╛, рд╣рдо рдЙрди рд╕рднреА рдХрд╛рд░реНрдбреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рдХреЛ рднрд░реЗрдВрдЧреЗ рдЬреЛ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рдкрде рдкрд░ рд╣реИрдВред рдЬрдм рдЖрдк рд╕реВрдЪреА рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдЖрдЗрдЯрдо рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╛рдо рдЗрдирдкреБрдЯ рдореЗрдВ рдкрд╛рда рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдЗрд╕рдХреЗ SaveLoadMenu
рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред public void SelectItem (string name) { nameInput.text = name; }
рд╣рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕реВрдЪреА рдЖрдЗрдЯрдо рд╣реЛред рд╕рд╛рдорд╛рдиреНрдп рдмрдЯрди рдХрд░реЗрдВрдЧреЗред рдЗрд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рдКрдВрдЪрд╛рдИ рдХреЛ 20 рдпреВрдирд┐рдЯ рддрдХ рдХрдо рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рд▓рдВрдмрд╡рдд рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЧрд╣ рди рд▓реЗред рдпрд╣ рдПрдХ рдмрдЯрди рдХреА рддрд░рд╣ рдирд╣реАрдВ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕рдХреЗ рдЫрд╡рд┐ рдШрдЯрдХ рдХреЗ рд╕реНрд░реЛрдд рдЫрд╡рд┐ рд▓рд┐рдВрдХ рдХреЛ рд╕рд╛рдл рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдлреЗрдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд▓реЗрдмрд▓ рдмрд╛рдИрдВ рдУрд░ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реЛ рдФрд░ рдкрд╛рда рдФрд░ рдмрд╛рдИрдВ рдУрд░ рдмрдЯрди рдХреЗ рдмреАрдЪ рдЬрдЧрд╣ рд╣реЛред рдмрдЯрди рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рдкреНрд░реАрдлрд╝реИрдм рдореЗрдВ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВредрдмрдЯрди рдПрдХ рд╕реВрдЪреА рдЖрдЗрдЯрдо рд╣реИредрд╣рдо рдмрдЯрди рдИрд╡реЗрдВрдЯ рдХреЛ рд╕реАрдзреЗ рдирдП рдореИрдк рдореЗрдиреВ рд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдкреНрд░реАрдлреИрдм рд╣реИ рдФрд░ рдпрд╣ рджреГрд╢реНрдп рдореЗрдВ рдЕрднреА рддрдХ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдореЗрдиреВ рдЖрдЗрдЯрдо рдХреЛ рдореЗрдиреВ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддрд╛рдХрд┐ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдпрд╣ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗ SelectItem
ред рдЙрд╕реЗ рдЙрд╕ рдХрд╛рд░реНрдб рдХреЗ рдирд╛рдо рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рд╡рд╣ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдкрдирд╛ рдкрд╛рда рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдШрдЯрдХ рдмрдирд╛рддреЗ рд╣реИрдВ SaveLoadItem
ред using UnityEngine; using UnityEngine.UI; public class SaveLoadItem : MonoBehaviour { public SaveLoadMenu menu; public string MapName { get { return mapName; } set { mapName = value; transform.GetChild(0).GetComponent<Text>().text = value; } } string mapName; public void Select () { menu.SelectItem(mapName); } }
рдореЗрдиреВ рдЖрдЗрдЯрдо рдореЗрдВ рдПрдХ рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдмрдЯрди рдХреЛ рдЗрд╕рдХреА рд╡рд┐рдзрд┐ рдХрд╣реЗрдВ Select
редрдЖрдЗрдЯрдо рдШрдЯрдХредрд╕реВрдЪреА рднрд░реЗрдВ
рд╕реВрдЪреА рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдХреЗ рдЕрдВрджрд░ рд╕рд╛рдордЧреНрд░реА рдХреЗSaveLoadMenu
рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рдЙрд╕реЗ рдЖрдЗрдЯрдо рдкреНрд░реАрдлреИрдм рдХрд╛ рд▓рд┐рдВрдХ рднреА рдЪрд╛рд╣рд┐рдПред public RectTransform listContent; public SaveLoadItem itemPrefab;
рдПрдХ рд╕реВрдЪреА рдФрд░ рдПрдХ prefab рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдорд┐рд▓рд╛рдПрдВредрд╣рдо рдЗрд╕ рд╕реВрдЪреА рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдХрджрдо рдореМрдЬреВрджрд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рд╣реИред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдлрд╝рд╛рдЗрд▓ рдкрдереЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Directory.GetFiles
ред рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, * .map рдорд╛рд╕реНрдХ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╣реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред void FillList () { string[] paths = Directory.GetFiles(Application.persistentDataPath, "*.map"); }
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдлрд╝рд╛рдЗрд▓ рдСрд░реНрдбрд░ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрдгрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рд░рдгреА рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ System.Array.Sort
ред using UnityEngine; using UnityEngine.UI; using System; using System.IO; public class SaveLoadMenu : MonoBehaviour { тАж void FillList () { string[] paths = Directory.GetFiles(Application.persistentDataPath, "*.map"); Array.Sort(paths); } тАж }
рдЖрдЧреЗ, рд╣рдо рдПрд░реЗ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдкреНрд░реАрдлреИрдм рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рдПрдВрдЧреЗред рдЖрдЗрдЯрдо рдХреЛ рдореЗрдиреВ рдореЗрдВ рдмрд╛рдВрдзреЗрдВ, рдЙрд╕рдХрд╛ рдирдХреНрд╢рд╛ рдирд╛рдо рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реВрдЪреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдмрдЪреНрдЪрд╛ рдмрдирд╛рдПрдВред Array.Sort(paths); for (int i = 0; i < paths.Length; i++) { SaveLoadItem item = Instantiate(itemPrefab); item.menu = this; item.MapName = paths[i]; item.transform.SetParent(listContent, false); }
рдЪреВрдВрдХрд┐ рдпрд╣ Directory.GetFiles
рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреВрд░реНрдг рдкрде рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╡рд┐рдзрд┐ рдмрдирд╛рддрд╛ рд╣реИ Path.GetFileNameWithoutExtension
ред item.MapName = Path.GetFileNameWithoutExtension(paths[i]);
рдореЗрдиреВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдПрдХ рд╕реВрдЪреА рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдФрд░ рдЪреВрдВрдХрд┐ рдлрд╛рдЗрд▓реЗрдВ рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдореЗрдиреВ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред public void Open (bool saveMode) { тАж FillList(); gameObject.SetActive(true); HexMapCamera.Locked = true; }
рд╕реВрдЪреА рдХреЛ рдлрд┐рд░ рд╕реЗ рднрд░рдиреЗ рдкрд░, рд╣рдореЗрдВ рдирдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдкреБрд░рд╛рдиреЗ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред void FillList () { for (int i = 0; i < listContent.childCount; i++) { Destroy(listContent.GetChild(i).gameObject); } тАж }
рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рдмрд┐рдирд╛ рдЖрдЗрдЯрдоредрдЕрдВрдХреЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛
рдЕрдм рд╕реВрдЪреА рдЖрдЗрдЯрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА, рд▓реЗрдХрд┐рди рд╡реЗ рдУрд╡рд░рд▓реИрдк рд╣реЛрдВрдЧреЗ рдФрд░ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реЛрдВрдЧреЗред рдЙрдиреНрд╣реЗрдВ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╕реВрдЪреА рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реВрдЪреА рдХреЗ рдХрдВрдЯреЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд░реНрдЯрд┐рдХрд▓ рд▓реЗрдЖрдЙрдЯ рдЧреНрд░реБрдк рдШрдЯрдХ ( рдХрдВрдкреЛрдиреЗрдВрдЯ / рд▓реЗрдЖрдЙрдЯ / рд╡рд░реНрдЯрд┐рдХрд▓ рд▓реЗрдЖрдЙрдЯ рдЧреНрд░реБрдк ) рдЬреЛрдбрд╝реЗрдВредрд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП, рдмрд╛рд▓ рдирд┐рдпрдВрддреНрд░рдг рдЖрдХрд╛рд░ рдФрд░ рдмрд╛рд▓ рдмрд▓ рд╡рд┐рд╕реНрддрд╛рд░ рджреЛрдиреЛрдВ рдХреА рдЪреМрдбрд╝рд╛рдИ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ ред рджреЛрдиреЛрдВ рдКрдВрдЪрд╛рдИ рд╡рд┐рдХрд▓реНрдк рдЕрдХреНрд╖рдо рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдПредрдКрд░реНрдзреНрд╡рд╛рдзрд░ рд▓реЗрдЖрдЙрдЯ рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛редрд╣рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреА рдПрдХ рд╕реБрдВрджрд░ рд╕реВрдЪреА рдорд┐рд▓реАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реВрдЪреА рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрдХрд╛рд░ рдЖрдЗрдЯрдо рдХреА рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рдХрднреА рднреА рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИред рд╣рдо рдЗрд╕рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдЖрдХрд╛рд░ рдлрд╝рд┐рдЯрд░ рдШрдЯрдХ ( рдШрдЯрдХ / рд▓реЗрдЖрдЙрдЯ / рд╕рд╛рдордЧреНрд░реА рдЖрдХрд╛рд░ рдлрд╝рд┐рдЯрд░ ) рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЗрд╕рдХрд╛ рд╡рд░реНрдЯрд┐рдХрд▓ рдлрд┐рдЯ рдореЛрдб рдкреНрд░реАрдлрд░реНрдб рд╕рд╛рдЗрдЬ рдореЗрдВ рд╕реЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП редрд╕рд╛рдордЧреНрд░реА рдЖрдХрд╛рд░ рдлрд┐рдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛редрдЕрдм рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде, рд╕реНрдХреНрд░реЙрд▓рдмрд╛рд░ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЬрдм рд╕реВрдЪреА рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЖрдЗрдЯрдо рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рд╡реНрдпреВрдкреЛрд░реНрдЯ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреБрдХреНрдд рдЖрдХрд╛рд░ рд╣реЛрддрд╛ рд╣реИредрдПрдХ рд╕реНрдХреНрд░реЙрд▓ рдмрд╛рд░ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИредрдХрд╛рд░реНрдб рдХрд╛ рд╡рд┐рд▓реЛрдкрди
рдЕрдм рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдХрдИ рдореИрдк рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрднреА-рдХрднреА рдХреБрдЫ рдХрд╛рд░реНрдбреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдбрд┐рд▓реАрдЯ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред рдЖрдЗрдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдФрд░ рдмрдЯрди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдпрджрд┐ рдХреЛрдИ рдЪрдпрдирд┐рдд рдкрде рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЗрд╡рд▓ рд╣рдЯрд╛рдПрдВ File.Delete
ред public void Delete () { string path = GetSelectedPath(); if (path == null) { return; } File.Delete(path); }
рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдпрд╣ рднреА рдЬрд╛рдВрдЪрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрджрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред if (File.Exists(path)) { File.Delete(path); }
рдХрд╛рд░реНрдб рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдореЗрдиреВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд╕реЗ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдирд╛рдо рдЗрдирдкреБрдЯ рдХреЛ рд╕рд╛рдл рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ , рд╕рд╛рде рд╣реА рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рднреА рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред if (File.Exists(path)) { File.Delete(path); } nameInput.text = ""; FillList();
unitypackageрднрд╛рдЧ 14: рд░рд╛рд╣рдд рдмрдирд╛рд╡рдЯ
- рд╕реНрдкреИрдЯ рдореИрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЯреЗрдХреНрд╕ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдПрдХ рд╕рд░рдгреА рдмрдирд╛рд╡рдЯ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдирд╛ред
- рдореЗрд╖реЛрдВ рдХреЛ рдКрдВрдЪрд╛рдИ рд╕реВрдЪрдХрд╛рдВрдХ рдЬреЛрдбрд╝рдирд╛ред
- рд░рд╛рд╣рдд рдмрдирд╛рд╡рдЯ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордгред
рдЗрд╕ рдХреНрд╖рдг рддрдХ, рд╣рдордиреЗ рд░рдВрдЧреАрди рдХрд╛рд░реНрдб рдХреЗ рд▓рд┐рдП рдареЛрд╕ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЕрдм рд╣рдо рдмрдирд╛рд╡рдЯ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗредрдмрдирд╛рд╡рдЯ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛редрддреАрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд┐рд╢реНрд░рдг
рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдорд╛рди рд░рдВрдЧ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдФрд░ рдХрд╛рд░реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд▓рдЧрддреЗ рд╣реИрдВред рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирдХреНрд╢реЗ рдХреЗ рдЖрдХрд░реНрд╖рдг рдХреЛ рдХрд╛рдлреА рдмрдврд╝рд╛ рджреЗрдЧрд╛ред рдмреЗрд╢рдХ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд┐рд░реНрдл рд░рдВрдЧ рд╣реА рдирд╣реАрдВ, рдмрдирд╛рд╡рдЯ рднреА рдорд┐рд▓рд╛рдиреА рд╣реЛрдЧреАред рд░реЗрдВрдбрд░рд┐рдВрдЧ 3 рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ , рдХреЙрдореНрдмрд┐рдиреЗрд╢рди рдЯреЗрдХреНрд╕рдЪрд░реНрд╕ рдореЗрдВ, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдХрд┐ рд╕реНрдкреИрдЯ рдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдЯреЗрдХреНрд╕рдЪрд░ рдХреЛ рдХреИрд╕реЗ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рдПред рд╣рдорд╛рд░реЗ рд╖рдЯреНрднреБрдЬ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдореЗрдВ, рдЖрдк рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд░реЗрдВрдбрд░рд┐рдВрдЧ 3рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВрдХреЗрд╡рд▓ рдЪрд╛рд░ рдмрдирд╛рд╡рдЯ рдорд┐рд╢реНрд░рд┐рдд рд╣реИрдВ, рдФрд░ рдПрдХ рдЕрд▓рдЧ рдирдХреНрд╢рд╛ рдХреЗ рд╕рд╛рде рд╣рдо рдкрд╛рдВрдЪ рдмрдирд╛рд╡рдЯ рддрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдо рдкрд╛рдВрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрд╛рдж рдореЗрдВ рд╣рдо рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдордирдорд╛рдирд╛ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдмрдирд╛рд╡рдЯ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдмрдирд╛рдПрдВрдЧреЗредрдмрдирд╛рд╡рдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдХрд┐рд╕реА рддрд░рд╣ рд╢реЗрдбрд░ рдХреЛ рдмрддрд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдмрдирд╛рд╡рдЯ рдХреЛ рдорд┐рд▓рд╛рдпрд╛ рдЬрд╛рдПред рдХреЛрдгреАрдп рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдХрдард┐рди рдорд┐рд╢реНрд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрд▓рд╛рдХреЗ рдХреЗ рд╕рд╛рде рддреАрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рддреНрд░рд┐рднреБрдЬ рдХреЗ рдмреАрдЪ рдорд┐рд╢реНрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдЪрд╛рд╣рд┐рдПредрд╕реНрдкреИрдЯ рдореИрдкреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЯреЗрдХреНрд╕ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реА рдмрдирд╛рд╡рдЯ рдХреЛ рдорд┐рд▓рд╛рдирд╛ рд╣реИ, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реАрд░реНрд╖ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рддреАрди рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рд░рдВрдЧ рдЪреИрдирд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓рд╛рд▓ рдкрд╣рд▓реА рдмрдирд╛рд╡рдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░реЗрдЧрд╛, рд╣рд░рд╛ - рджреВрд╕рд░рд╛, рдФрд░ рдиреАрд▓рд╛ - рддреАрд╕рд░рд╛редрддреНрд░рд┐рднреБрдЬ рд╕реНрдкрд▓реИрдЯ рдХрд╛ рдирдХреНрд╢рд╛редрддреНрд░рд┐рдХреЛрдг рддреНрд░рд┐рдХреЛрдг рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рдпреЛрдЧ рд╣рдореЗрд╢рд╛ рдПрдХ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИ?рд╣рд╛рдВред . . , (1, 0, 0) , (┬╜, ┬╜, 0) (⅓, ⅓, ⅓) .
рдпрджрд┐ рдПрдХ рддреНрд░рд┐рдХреЛрдг рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрдирд╛рд╡рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╛рдиреА рдЗрд╕рдХрд╛ рд░рдВрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рд▓ рд╣реЛрдЧрд╛ред рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдорд┐рд╢реНрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рдЪреИрдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣реА рд╣реИ, рддреНрд░рд┐рдХреЛрдг рдХрд╛ рд░рдВрдЧ рд▓рд╛рд▓ рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реЛрдЧрд╛ред рдФрд░ рдЬрдм рддреАрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдкрд╛рдП рдЬрд╛рдПрдВрдЧреЗ, рддреЛ рдпрд╣ рд▓рд╛рд▓, рд╣рд░реЗ рдФрд░ рдиреАрд▓реЗ рд░рдВрдЧ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реЛрдЧрд╛редрддреАрди рдЕрд▓рдЧ рдирдХреНрд╢рд╛ рд╡рд┐рдиреНрдпрд╛рд╕редрд╣рдо рдЗрди рд╕реНрдкреИрдЯ рдореИрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЪрд╛рд╣реЗ рдЬреЛ рднреА рдмрдирд╛рд╡рдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд┐рд╢реНрд░рдг рд╣реЛред рдпрд╛рдиреА, рд╕реНрдкреИрдЯ рдореИрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдЬреИрд╕рд╛ рд░рд╣реЗрдЧрд╛ред рдХреЗрд╡рд▓ рдмрдирд╛рд╡рдЯ рдмрджрд▓ рдЬрд╛рдПрдЧреАред рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рд╣рдо рдмрд╛рдж рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗредрд╣рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ HexGridChunk
рддрд╛рдХрд┐ рд╕реЗрд▓ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рдЗрди рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдмрдирд╛рдПред рдЪреВрдВрдХрд┐ рд╣рдо рдЕрдХреНрд╕рд░ рддреАрди рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░ рдмрдирд╛рдПрдВрдЧреЗред static Color color1 = new Color(1f, 0f, 0f); static Color color2 = new Color(0f, 1f, 0f); static Color color3 = new Color(0f, 0f, 1f);
рд╕реЗрд▓ рдХреЗрдВрджреНрд░
рдЪрд▓реЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдХреЗрдВрджреНрд░ рдХрд╛ рд░рдВрдЧ рдмрджрд▓рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рдХреЛрдИ рд╕рдореНрдорд┐рд╢реНрд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд▓рд╛рд▓ред void TriangulateWithoutRiver ( HexDirection direction, HexCell cell, Vector3 center, EdgeVertices e ) { TriangulateEdgeFan(center, e, color1); тАж }
рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд╛рд▓ рдХреЗрдВрджреНрд░редрдХреЛрд╢рд┐рдХрд╛ рдХреЗрдВрджреНрд░ рдЕрдм рд▓рд╛рд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд╡реЗ рд╕рднреА рддреАрди рдмрдирд╛рд╡рдЯреЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдмрдирд╛рд╡рдЯ рдХреНрдпрд╛ рд╣реИред рдЙрдирдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирдХреНрд╢реЗ рдЙрд╕реА рддрд░рд╣ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рд╣рдо рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд░рдВрдЧ рджреЗрддреЗ рд╣реИрдВредрд░рд┐рд╡рд░ рдиреЗрдмрд░рд╣реБрдб
рд╣рдордиреЗ рдХреЗрд╡рд▓ рдирджрд┐рдпреЛрдВ рдХреЗ рднреАрддрд░ рдХреЗ рдЦрдВрдбреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рд╛рде рдмрд╣ рд░рд╣реА рдирджрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдмрджрд▓ рджрд┐рдпрд╛ред рд╣рдореЗрдВ рдирджрд┐рдпреЛрдВ рд╕реЗ рд╕рдЯреЗ рдЦрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рд░рд┐рдм рдкрдЯреНрдЯреА рдФрд░ рд░рд┐рдм рдХреЗ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рджреЛрдиреЛрдВ рд╣реИред рдпрд╣рд╛рдБ рднреА, рдХреЗрд╡рд▓ рд▓рд╛рд▓ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред void TriangulateAdjacentToRiver ( HexDirection direction, HexCell cell, Vector3 center, EdgeVertices e ) { тАж TriangulateEdgeStrip(m, color1, e, color1); TriangulateEdgeFan(center, m, color1); тАж }
рдирджрд┐рдпреЛрдВ рд╕реЗ рд╕рдЯреЗ рд▓рд╛рд▓ рдЦрдВрдбредрдирджреА
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рдирджрд┐рдпреЛрдВ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрди рд╕рднреА рдХреЛ рднреА рд▓рд╛рд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдирджрд┐рдпреЛрдВ рдХреЗ рдЖрд░рдВрдн рдФрд░ рдЕрдВрдд рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВред void TriangulateWithRiverBeginOrEnd ( HexDirection direction, HexCell cell, Vector3 center, EdgeVertices e ) { тАж TriangulateEdgeStrip(m, color1, e, color1); TriangulateEdgeFan(center, m, color1); тАж }
рдФрд░ рдлрд┐рд░ рдЬреНрдпрд╛рдорд┐рддрд┐ рдЬреЛ рдмреИрдВрдХреЛрдВ рдФрд░ рдирджреА рдХреЗ рдХрд┐рдирд╛рд░реЗ рдмрдирд╛рддреА рд╣реИред рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИред void TriangulateWithRiver ( HexDirection direction, HexCell cell, Vector3 center, EdgeVertices e ) { тАж TriangulateEdgeStrip(m, color1, e, color1); terrain.AddTriangle(centerL, m.v1, m.v2);
рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓рд╛рд▓ рдирджрд┐рдпрд╛рдБредрд░рд┐рдмреНрд╕
рд╕рднреА рдХрд┐рдирд╛рд░реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрд▓рд╛рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкрдбрд╝реЛрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рд░рдВрдЧред рдирддреАрдЬрддрди, рд╕реНрдкреИрдЯ рдореИрдк рдПрдХ рд▓рд╛рд▓-рд╣рд░рд╛ рдврд╛рд▓ рдмрди рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рджреЛрдиреЛрдВ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрдВред рдпрджрд┐ рджреЛрдиреЛрдВ рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдПрдХ рд╣реА рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ, рддреЛ рдпрд╣ рджреЛрдиреЛрдВ рддрд░рдл рдПрдХ рд╣реА рдмрдирд╛рд╡рдЯ рдХрд╛ рдорд┐рд╢реНрд░рдг рдмрди рдЬрд╛рддрд╛ рд╣реИред void TriangulateConnection ( HexDirection direction, HexCell cell, EdgeVertices e1 ) { тАж if (cell.GetEdgeType(direction) == HexEdgeType.Slope) { TriangulateEdgeTerraces(e1, cell, e2, neighbor, hasRoad); } else { TriangulateEdgeStrip(e1, color1, e2, color2, hasRoad); } тАж }
рд▓рд╛рд▓-рд╣рд░реЗ рд░рдВрдЧ рдХреА рдкрд╕рд▓рд┐рдпреЛрдВ, рдХрдЧрд╛рд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░редрдХреНрдпрд╛ рд▓рд╛рд▓ рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рддреАрд╡реНрд░ рд╕рдВрдХреНрд░рдордг рдирд╣реАрдВ рд╣реЛрдЧрд╛?, , . . splat map, . .
, .
рдХрдЧрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд┐рдирд╛рд░реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдиреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдореМрдЬреВрджрд╛ рдкреНрд░рдХреНрд╖реЗрдк рдХреЛрдб рд╕реНрдкреИрдЯ рдореИрдк рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╢рд╛рдирджрд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдмрд╕ рдкрд╣рд▓реЗ рдФрд░ рджреВрд╕рд░реЗ рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рди рдХрд┐ рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд░рдВрдЧреЛрдВ рдХрд╛ред void TriangulateEdgeTerraces ( EdgeVertices begin, HexCell beginCell, EdgeVertices end, HexCell endCell, bool hasRoad ) { EdgeVertices e2 = EdgeVertices.TerraceLerp(begin, end, 1); Color c2 = HexMetrics.TerraceLerp(color1, color2, 1); TriangulateEdgeStrip(begin, color1, e2, c2, hasRoad); for (int i = 2; i < HexMetrics.terraceSteps; i++) { EdgeVertices e1 = e2; Color c1 = c2; e2 = EdgeVertices.TerraceLerp(begin, end, i); c2 = HexMetrics.TerraceLerp(color1, color2, i); TriangulateEdgeStrip(e1, c1, e2, c2, hasRoad); } TriangulateEdgeStrip(e2, c2, end, color2, hasRoad); }
рд▓рд╛рд▓-рд╣рд░реЗ рд░рдВрдЧ рдХреА рдкрд╕рд▓рд┐рдпреЛрдВ рдХреА рд▓рд╛рд▓реАредрдХреЛрдгреЛрдВ
рд╕реЗрд▓ рдХреЛрдг рд╕рдмрд╕реЗ рдХрдард┐рди рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрдирд╛рд╡рдЯреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рдХрд░рдирд╛ рд╣реИред рд╣рдо рдиреАрдЪреЗ рдХреА рдЪреЛрдЯреА рдХреЗ рд▓рд┐рдП рд▓рд╛рд▓, рдмрд╛рдПрдВ рдХреЗ рд▓рд┐рдП рд╣рд░рд╛ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдиреАрд▓реЗ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдХреЛрдиреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред void TriangulateCorner ( Vector3 bottom, HexCell bottomCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell ) { тАж else { terrain.AddTriangle(bottom, left, right); terrain.AddTriangleColor(color1, color2, color3); } features.AddWall(bottom, bottomCell, left, leftCell, right, rightCell); }
рд░реЗрдб-рдЧреНрд░реАрди-рдмреНрд▓реВ рдХреЙрд░реНрдирд░, рдПрд▓рд┐рдЧреЗрдВрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░редрдпрд╣рд╛рдВ рд╣рдо рдлрд┐рд░ рд╕реЗ рдХрдЧрд╛рд░ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрджрд╛ рд░рдВрдЧ рдкреНрд░рдХреНрд╖реЗрдк рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдкреНрд░рдХреНрд╖реЗрдк рддреАрди рдХреЗ рдмреАрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреЛ рд░рдВрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдирд╣реАрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрди рд▓реАрдбреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реИрдВред void TriangulateCornerTerraces ( Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell ) { Vector3 v3 = HexMetrics.TerraceLerp(begin, left, 1); Vector3 v4 = HexMetrics.TerraceLerp(begin, right, 1); Color c3 = HexMetrics.TerraceLerp(color1, color2, 1); Color c4 = HexMetrics.TerraceLerp(color1, color3, 1); terrain.AddTriangle(begin, v3, v4); terrain.AddTriangleColor(color1, c3, c4); for (int i = 2; i < HexMetrics.terraceSteps; i++) { Vector3 v1 = v3; Vector3 v2 = v4; Color c1 = c3; Color c2 = c4; v3 = HexMetrics.TerraceLerp(begin, left, i); v4 = HexMetrics.TerraceLerp(begin, right, i); c3 = HexMetrics.TerraceLerp(color1, color2, i); c4 = HexMetrics.TerraceLerp(color1, color3, i); terrain.AddQuad(v1, v2, v3, v4); terrain.AddQuadColor(c1, c2, c3, c4); } terrain.AddQuad(v3, v4, left, right); terrain.AddQuadColor(c3, c4, color2, color3); }

рд▓рд╛рд▓-рд╣рд░реЗ-рдиреАрд▓реЗ рдХреЛрдиреЗ рдХреА рд╕реАрдврд╝рд┐рдпрд╛рдВ, рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛ рдЫреЛрдбрд╝рдХрд░редрдЬрдм рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ TriangulateBoundaryTriangle
ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реБрдЖрдд рдФрд░ рдмрд╛рдПрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдм рд╣рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╕реНрдкреИрдЯ рд░рдВрдЧреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд░рдВрдЧреЛрдВ рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВред void TriangulateBoundaryTriangle ( Vector3 begin, Color beginColor, Vector3 left, Color leftColor, Vector3 boundary, Color boundaryColor ) { Vector3 v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, 1)); Color c2 = HexMetrics.TerraceLerp(beginColor, leftColor, 1); terrain.AddTriangleUnperturbed(HexMetrics.Perturb(begin), v2, boundary); terrain.AddTriangleColor(beginColor, c2, boundaryColor); for (int i = 2; i < HexMetrics.terraceSteps; i++) { Vector3 v1 = v2; Color c1 = c2; v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, i)); c2 = HexMetrics.TerraceLerp(beginColor, leftColor, i); terrain.AddTriangleUnperturbed(v1, v2, boundary); terrain.AddTriangleColor(c1, c2, boundaryColor); } terrain.AddTriangleUnperturbed(v2, HexMetrics.Perturb(left), boundary); terrain.AddTriangleColor(c2, leftColor, boundaryColor); }
рдЗрд╕реЗ рдмрджрд▓реЗрдВ TriangulateCornerTerracesCliff
рддрд╛рдХрд┐ рдпрд╣ рд╕рд╣реА рд░рдВрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗред void TriangulateCornerTerracesCliff ( Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell ) { тАж Color boundaryColor = Color.Lerp(color1, color3, b); TriangulateBoundaryTriangle( begin, color1, left, color2, boundary, boundaryColor ); if (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { TriangulateBoundaryTriangle( left, color2, right, color3, boundary, boundaryColor ); } else { terrain.AddTriangleUnperturbed( HexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary ); terrain.AddTriangleColor(color2, color3, boundaryColor); } }
рдФрд░ рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ TriangulateCornerCliffTerraces
ред void TriangulateCornerCliffTerraces ( Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell ) { тАж Color boundaryColor = Color.Lerp(color1, color2, b); TriangulateBoundaryTriangle( right, color3, begin, color1, boundary, boundaryColor ); if (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { TriangulateBoundaryTriangle( left, color2, right, color3, boundary, boundaryColor ); } else { terrain.AddTriangleUnperturbed( HexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary ); terrain.AddTriangleColor(color2, color3, boundaryColor); } }
рдлреБрд▓ рд╕реНрдкреИрдЯ рд░рд┐рд▓реАрдл рдореИрдкредunitypackageрдмрдирд╛рд╡рдЯ
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдЗрд▓рд╛рдХреЗ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдирдХреНрд╢рд╛ рд╣реИ, рддреЛ рд╣рдо рдмрдирд╛рд╡рдЯ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЫрд╛рдпрд╛рджрд╛рд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╕рд┐рд░реНрдл рд╕реА # рдЯреЗрдХреНрд╕рдЪрд░ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЗрдбрд░ рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рдПрдХрд▓ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреАрдкреАрдпреВ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рд░рдгреА рдХрд╛ рдЕрд╕реНрддрд┐рддреНрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ Texture2DArray
рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг 5.4 рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХрддрд╛ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИредрдХреНрдпрд╛ рд╕рднреА рдЬреАрдкреАрдЖрд░ рдмрдирд╛рд╡рдЯ рдмрдирд╛рд╡рдЯ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ?GPU , .
Unity .
- Direct3D 11/12 (Windows, Xbox One)
- OpenGL Core (Mac OS X, Linux)
- Metal (iOS, Mac OS X)
- OpenGL ES 3.0 (Android, iOS, WebGL 2.0)
- PlayStation 4
рдЧреБрд░реБ
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрд╕реНрдХрд░рдг 5.5 рдореЗрдВ рдмрдирд╛рд╡рдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдиреНрдпреВрдирддрдо рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдпрд╛ рддреЛ рдкреНрд▓реЗ рдореЛрдб рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдПрдВредрд╕рдВрдкрддреНрддрд┐ рдХреНрдпреЛрдВ рдмрдирд╛рдПрдБ?, Play . , .
, . Unity . , . , .
рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рдЧреБрд░реБ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВрдЧреЗред рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ TextureArrayWizard
рдФрд░ рдЙрд╕реЗ рд╕рдВрдкрд╛рджрдХ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд░рдЦреЗрдВ ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, MonoBehaviour
рдЙрд╕реЗ ScriptableWizard
рдирд╛рдо рд╕реНрдерд╛рди рд╕реЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП UnityEditor
ред using UnityEditor; using UnityEngine; public class TextureArrayWizard : ScriptableWizard { }
рд╣рдо рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕реНрдереИрддрд┐рдХ рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ ScriptableWizard.DisplayWizard
ред рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рдЬрд╛рд░реНрдб рд╡рд┐рдВрдбреЛ рдФрд░ рдЗрд╕рдХреЗ рдХреНрд░рд┐рдПрдЯ рдмрдЯрди рдХреЗ рдирд╛рдо рд╣реИрдВред рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд╣реЗрдВрдЧреЗ CreateWizard
ред static void CreateWizard () { ScriptableWizard.DisplayWizard<TextureArrayWizard>( "Create Texture Array", "Create" ); }
рд╕рдВрдкрд╛рджрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдПрдХрддрд╛ рдореЗрдиреВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ MenuItem
ред рдЖрдЗрдП рдЗрд╕реЗ рдПрд╕реЗрдЯреНрд╕ рдореЗрдиреВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ , рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрд╕реЗрдЯреНрд╕ / рдХреНрд░рд┐рдПрдЯ / рдЯреЗрдХреНрд╕рдЪрд░ рдПрд░реЗ рдореЗрдВ ред [MenuItem("Assets/Create/Texture Array")] static void CreateWizard () { тАж }
рд╣рдорд╛рд░реЗ рдХрд╕реНрдЯрдо рдЬрд╛рджреВрдЧрд░редрдирдП рдореЗрдиреВ рдЖрдЗрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рд╣рдорд╛рд░реЗ рдХрд╕реНрдЯрдо рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЗ рдкреЙрдк-рдЕрдк рдореЗрдиреВ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрднреА рднреА рдЦрд╛рд▓реА рд╣реИред рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдорд╛рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВред рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХрд╛ рдорд╛рдирдХ GUI рдЗрд╕реЗ рдПрдХ рдорд╛рдирдХ рдирд┐рд░реАрдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред public Texture2D[] textures;
рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдорд╛рд╕реНрдЯрд░редрдЪрд▓реЛ рдХреБрдЫ рдмрдирд╛рддреЗ рд╣реИрдВ
рдЬрдм рдЖрдк рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдХреЗ рдмрдирд╛рдПрдБ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ , рддреЛ рдпрд╣ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХрддрд╛ рд╢рд┐рдХрд╛рдпрдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ OnWizardCreate
ред рдпрд╣ рд╡рд╣ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдХреНрд░рд┐рдПрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕реЗ рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред void OnWizardCreate () { }
рдпрд╣рд╛рдВ рд╣рдо рдЕрдкрдирд╛ рдЯреЗрдХреНрд╕рдЪрд░ рдПрд░реЗ рдмрдирд╛рдПрдВрдЧреЗред рдХрдо рд╕реЗ рдХрдо рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдорд╛рд╕реНрдЯрд░ рдХреЛ рдмрдирд╛рд╡рдЯ рдЬреЛрдбрд╝ рджреАред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрд╛рдо рдХреЛ рд░реЛрдХрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред void OnWizardCreate () { if (textures.Length == 0) { return; } }
рдЕрдЧрд▓рд╛ рдХрджрдо рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реИред рдлрд╛рдЗрд▓ рд╕реЗрд╡ рдкреИрдирд▓ рдХреЛ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ EditorUtility.SaveFilePanelInProject
ред рдЗрд╕рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреИрдирд▓ рдирд╛рдо, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо, рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рд╡рд┐рд╡рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдмрдирд╛рд╡рдЯ рд╕рд░рдгрд┐рдпрд╛рдБ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдкрддреНрддрд┐ рдлрд╝рд╛рдЗрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ ред if (textures.Length == 0) { return; } EditorUtility.SaveFilePanelInProject( "Save Texture Array", "Texture Array", "asset", "Save Texture Array" );
SaveFilePanelInProject
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓ рдкрде рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдкреИрдирд▓ рдХреЛ рд░рджреНрдж рдХрд░рддрд╛ рд╣реИ, рддреЛ рдкрде рдПрдХ рд░рд┐рдХреНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдХрд╛рд░реНрдп рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред string path = EditorUtility.SaveFilePanelInProject( "Save Texture Array", "Texture Array", "asset", "Save Texture Array" ); if (path.Length == 0) { return; }
рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдирд╛
рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╣реА рд░рд╛рд╕реНрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдирдИ рд╡рд╕реНрддреБ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ Texture2DArray
ред рдЙрдирдХреА рд░рдЪрдирд╛ рдкрджреНрдзрддрд┐ рдореЗрдВ рдмрдирд╛рд╡рдЯ рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ, рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ, рдмрдирд╛рд╡рдЯ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рдФрд░ рдПрдордЖрдИрдкреА рдмрдирд╛рд╡рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╕рд░рдгреА рдХреЗ рд╕рднреА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд╣рд▓реЗ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╕рднреА рдмрдирд╛рд╡рдЯ рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рд╛рд░реВрдк рд╣реИред if (path.Length == 0) { return; } Texture2D t = textures[0]; Texture2DArray textureArray = new Texture2DArray( t.width, t.height, textures.Length, t.format, t.mipmapCount > 1 );
рдЪреВрдВрдХрд┐ рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рдПрдХ рдПрдХрд▓ GPU рд╕рдВрд╕рд╛рдзрди рд╣реИ, рдпрд╣ рд╕рднреА рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдФрд░ рддрд╣ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред Texture2DArray textureArray = new Texture2DArray( t.width, t.height, textures.Length, t.format, t.mipmapCount > 1 ); textureArray.anisoLevel = t.anisoLevel; textureArray.filterMode = t.filterMode; textureArray.wrapMode = t.wrapMode;
рдЕрдм рд╣рдо рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рд╡рдЯ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Graphics.CopyTexture
ред рд╡рд┐рдзрд┐ рдПрдХ рд╕рдордп рдореЗрдВ рдХрдЪреНрдЪреЗ рдмрдирд╛рд╡рдЯ рдХреЗ рдбреЗрдЯрд╛, рдПрдХ рдореАрд▓ рдХреЗ рд╕реНрддрд░ рдХреА рдирдХрд▓ рдХрд░рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рднреА рдмрдирд╛рд╡рдЯреЛрдВ рдФрд░ рдЙрдирдХреЗ рдПрдордЖрдИрдкреА рд╕реНрддрд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд▓реВрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ рдмрдирд╛рд╡рдЯ рд╕рдВрд╕рд╛рдзрди, рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдПрдХ рдПрдордЖрдИрдкреА рд╕реНрддрд░ рд╕реЗ рдпреБрдХреНрдд рджреЛ рд╕реЗрдЯ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдореВрд▓ рдмрдирд╛рд╡рдЯ рд╕рд░рдгрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИред textureArray.wrapMode = t.wrapMode; for (int i = 0; i < textures.Length; i++) { for (int m = 0; m < t.mipmapCount; m++) { Graphics.CopyTexture(textures[i], 0, m, textureArray, i, m); } }
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрдирд╛рд╡рдЯ рдХреА рд╕рд╣реА рд╕рд░рдгреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рддрдХ рдПрдХ рдкрд░рд┐рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред рдЕрдВрддрд┐рдо рдЪрд░рдг AssetDatabase.CreateAsset
рд╕рд░рдгреА рдФрд░ рдЙрд╕рдХреЗ рдкрде рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред for (int i = 0; i < textures.Length; i++) { тАж } AssetDatabase.CreateAsset(textureArray, path);
рдмрдирд╛рд╡рдЯ
рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░рдгреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдореВрд▓ рдмрдирд╛рд╡рдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣рд╛рдВ рдкрд╛рдВрдЪ рдмрдирд╛рд╡рдЯ рд╣реИрдВ рдЬреЛ рдЕрдм рддрдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд░рдВрдЧреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред рдкреАрд▓рд╛ рд░реЗрдд рдмрди рдЬрд╛рддрд╛ рд╣реИ, рд╣рд░рд╛ рдШрд╛рд╕ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдиреАрд▓рд╛ рдкреГрдереНрд╡реА рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдирд╛рд░рдВрдЧреА рдкрддреНрдерд░ рдмрди рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рдлреЗрдж рдмрд░реНрдл рдмрди рдЬрд╛рддрд╛ рд╣реИредрд░реЗрдд, рдШрд╛рд╕, рдкреГрдереНрд╡реА, рдкрддреНрдерд░ рдФрд░ рдмрд░реНрдл рдХреЗ рдмрдирд╛рд╡рдЯредрдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпреЗ рдмрдирд╛рд╡рдЯ рдЗрд╕ рд░рд╛рд╣рдд рдХреА рддрд╕реНрд╡реАрд░реЗрдВ рдирд╣реАрдВ рд╣реИрдВред рдпреЗ рдЖрд╕рд╛рди рдЫрджреНрдо рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкреИрдЯрд░реНрди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдирдВрдмрд░рдлреНрд▓реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдерд╛ ред рдореИрдВ рдкрд╣рдЪрд╛рдирдиреЗ рдпреЛрдЧреНрдп рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░ рдФрд░ рд╡рд┐рд╡рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕рд░рдд рд╣реВрдВ рдЬреЛ рдЕрдореВрд░реНрдд рдмрд╣реБрднреБрдЬ рд░рд╛рд╣рдд рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдлрд╝реЛрдЯреЛрд░рд┐рдпрд▓рд┐рдЬрд╝реНрдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реЛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкреИрдЯрд░реНрди рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рддреБрд░рдВрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддреА рд╣реИрдВредрдЗрди рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдорд╛рд╕реНрдЯрд░ рд╕рд░рдгреА рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЙрдирдХрд╛ рдСрд░реНрдбрд░ рд░рдВрдЧреЛрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдкрд╣рд▓реЗ рд░реЗрдд, рдлрд┐рд░ рдШрд╛рд╕, рдзрд░рддреА, рдкрддреНрдерд░ рдФрд░ рдЖрдЦрд┐рд░ рдореЗрдВ рдмрд░реНрдлредрдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдмрдирд╛рдирд╛редрдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рд╕рдВрдкрддреНрддрд┐ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ рдЪреБрдиреЗрдВ рдФрд░ рдирд┐рд░реАрдХреНрд╖рдХ рдореЗрдВ рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВредрдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рдирд┐рд░реАрдХреНрд╖рдХредрдпрд╣ рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рдбреЗрдЯрд╛ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдкреНрд░рджрд░реНрд╢рди рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рдЪрд╛рд▓реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкрдардиреАрдп рд╕реНрд╡рд┐рдЪ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдореЗрдВ рд╕рд░рдгреА рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВред рд╣рдо рд╡рд┐рдЬрд╝рд╛рд░реНрдб рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ Texture2DArray
рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рдпрд╛ рдЧреБрдг рдирд╣реАрдВ рд╣реИрдВ ред(рдПрдХрддрд╛ 5.6 рдореЗрдВ, рдПрдХ рдмрдЧ рд╣реИ рдЬреЛ рдХрдИ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдмрдирд╛рд╡рдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЦрд░рд╛рдм рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рдП рдмрд┐рдирд╛ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред)рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдХ рд░рдВрдЧ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреНрд╖реЗрддреНрд░ рд╣реИредрдЬрд┐рд╕реЗ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ 1. рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдмрдирд╛рд╡рдЯ рдХреЛ рдЧрд╛рдорд╛ рд╕реНрдерд╛рди рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╕рдЪ рд╣реИред рдпрджрд┐ рдЙрдиреНрд╣реЗрдВ рд░реИрдЦрд┐рдХ рд╕реНрдерд╛рди рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рддреЛ рдлрд╝реАрд▓реНрдб рдХреЛ 0. рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдерд╛ред рджрд░рдЕрд╕рд▓, Texture2DArray
рд░рдВрдЧ рд╕реНрдерд╛рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ Texture2D
рдирд╣реАрдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░реИрдЦрд┐рдХ рд╕реНрдерд╛рди рдореЗрдВ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд▓рд┐рдП, рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдкрдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдореВрд▓реНрдп рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗредрд╢реЗрдбрд░
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ, рддреЛ рд╣рдореЗрдВ shader рдХреЛ рдпрд╣ рд╕рд┐рдЦрд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд▓рд╛рдХреЗ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЯреЗрдХреНрд╕рдХреЛрд▓рд░реНрд╕ рд╢реЗрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ред рдЪреВрдВрдХрд┐ рдЕрдм рд╣рдо рд░рдВрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ рдЯреЗрд░реЗрди рд░рдЦ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ред рдлрд┐рд░ рд╣рдо рдЗрд╕рдХреЗ _MainTex рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЯреЗрдХреНрд╕рдЪрд░ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрд╕реЗрдЯ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред Shader "Custom/Terrain" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Terrain Texture Array", 2DArray) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 } тАж }
рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рд░рд╛рд╣рдд рд╕рд╛рдордЧреНрд░реАредрдЙрдиреНрд╣реЗрдВ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдмрдирд╛рд╡рдЯ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ shader рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕реНрддрд░ 3.0 рд╕реЗ 3.5 рддрдХ рдмрдврд╝рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред #pragma target 3.5
рдЪреВрдВрдХрд┐ рдЪрд░ _MainTex
рдЕрдм рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рдХрд╛рд░ рд▓рдХреНрд╖реНрдп рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореИрдХреНрд░реЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ UNITY_DECLARE_TEX2DARRAY
ред
рдЕрдиреНрдп рд╢реЗрдбреНрд╕ рдХреА рддрд░рд╣, рд░рд╛рд╣рдд рдХреА рдмрдирд╛рд╡рдЯ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ XZ рджреБрдирд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рддрд╣ shader рдХреЗ рдЗрдирдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рддрд┐ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рднреА рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред struct Input {
рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдореИрдХреНрд░реЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ UNITY_SAMPLE_TEX2DARRAY
ред рдПрдХ рд╕рд░рдгреА рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕реЗ рддреАрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рджреЛ рдирд┐рдпрдорд┐рдд рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВред рд╣рдо XZ рджреБрдирд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ 0.02 рд╕реНрдХреЗрд▓ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкреВрд░реНрдг рдЖрд╡рд░реНрдзрди рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрдирд╛рд╡рдЯ рд╕рдВрдХрд▓реНрдк рдорд┐рд▓рддрд╛ рд╣реИред рдмрдирд╛рд╡рдЯ рд▓рдЧрднрдЧ рд╣рд░ рдЪрд╛рд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛редрддреАрд╕рд░реЗ рд╕рдордиреНрд╡рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рдирд┐рдпрдорд┐рдд рд╕рд░рдгреА рдореЗрдВред рдЪреВрдВрдХрд┐ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдлреНрд▓реЛрдЯ рд╣реИрдВ, GPU рд╕рд░рдгреА рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдЧреЛрд▓ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╕реЗ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдмрдирд╛рд╡рдЯ рдХреА рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд▓реЛ рд╣рдореЗрд╢рд╛ рдкрд╣рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рд╛рде рд╣реА, рд╢реАрд░реНрд╖ рдХрд╛ рд░рдВрдЧ рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдкреИрдЯ рдореИрдк рд╣реИред void surf (Input IN, inout SurfaceOutputStandard o) { float2 uv = IN.worldPos.xz * 0.02; fixed4 c = UNITY_SAMPLE_TEX2DARRAY(_MainTex, float3(uv, 0)); Albedo = c.rgb * _Color; o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = ca; }
рд╕рдм рдХреБрдЫ рд░реЗрдд рд╣реЛ рдЧрдпрд╛ рд╣реИредunitypackageрдмрдирд╛рд╡рдЯ рдЪрдпрди
рд╣рдореЗрдВ рдПрдХ рд░рд╛рд╣рдд рд╕реНрдкреИрдЯ рдореИрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рддреНрд░рд┐рднреБрдЬ рдореЗрдВ рддреАрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрд▓рд╛рдХреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╢реЗрдбрд░ рд╣реИ рдЬреЛ рдмрдирд╛рд╡рдЯ рдХреА рдПрдХ рд╕рд░рдгреА рдХрд╛ рдирдореВрдирд╛ рд▓реЗрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░рд┐рднреБрдЬ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдмрдирд╛рд╡рдЯ рдЪреБрдирдирд╛ рд╣реИредрдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░рд┐рднреБрдЬ рддреАрди рдкреНрд░рдХрд╛рд░реЛрдВ рддрдХ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░рд┐рднреБрдЬ рдХреЗ рд╕рд╛рде рддреАрди рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рддреНрд░рд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдиреБрд▓рдВрдмреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреНрд░рдорд┐рдд рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рддреНрд░рд┐рдХреЛрдг рдХреЗ рд╕рднреА рддреАрди рдХреЛрдиреЗ рдмрд╕ рдареЛрд╕ рд░рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗредрдореЗрд╢ рдбреЗрдЯрд╛
рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо рдпреВрд╡реА рдЬрд╛рд▓ рдХреЗ рд╕реЗрдЯ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдкрд░ рддреАрди рдЗрдВрдбреЗрдХреНрд╕ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдореМрдЬреВрджрд╛ 2 рдбреА рдпреВрд╡реА рд╕реЗрдЯ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпреВрд╡реА рд╕реЗрдЯ рдореЗрдВ рдЪрд╛рд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рддрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо HexMesh
рджреВрд╕рд░реА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ Vector3
, рдЬрд┐рд╕реЗ рд╣рдо рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░реЗрдВрдЧреЗред public bool useCollider, useColors, useUVCoordinates, useUV2Coordinates; public bool useTerrainTypes; [NonSerialized] List<Vector3> vertices, terrainTypes;
рд╣реЗрдХреНрд╕ рдЧреНрд░рд┐рдб рдЪрдВрдХ рдкреНрд░реАрдлрд╝реИрдм рдХреЗ рдЗрд▓рд╛рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рд▓рд┐рдП рдЗрд▓рд╛рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ редрд╣рдо рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВредрдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╣рдо Vector3
рдЬрд╛рд▓ рдХреА рд╕рдлрд╛рдИ рдХреЗ рджреМрд░рд╛рди рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕реВрдЪреА рд▓реЗрдВрдЧреЗ ред public void Clear () { тАж if (useTerrainTypes) { terrainTypes = ListPool<Vector3>.Get(); } triangles = ListPool<int>.Get(); }
рдореЗрд╖ рдбреЗрдЯрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдо рддреАрд╕рд░реЗ рдпреВрд╡реА рд╕реЗрдЯ рдореЗрдВ рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╡реЗ рджреЛ рдЕрдиреНрдп рд╕реЗрдЯреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЕрдЧрд░ рд╣рдо рдХрднреА рднреА рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВред public void Apply () { тАж if (useTerrainTypes) { hexMesh.SetUVs(2, terrainTypes); ListPool<Vector3>.Add(terrainTypes); } hexMesh.SetTriangles(triangles, 0); тАж }
рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рддреНрд░рд┐рдХреЛрдг рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ Vector3
ред рдЪреВрдВрдХрд┐ рдкреВрд░реЗ рддреНрд░рд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рддреАрди рдмрд╛рд░ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред public void AddTriangleTerrainTypes (Vector3 types) { terrainTypes.Add(types); terrainTypes.Add(types); terrainTypes.Add(types); }
рдХреНрд╡рд╛рдб рдореЗрдВ рдорд┐рд▓рд╛рдиреЗ рд╕реЗ рд╡рд╣реА рдХрд╛рдо рд╣реЛрддрд╛ рд╣реИред рд╕рднреА рдЪрд╛рд░ рдХреЛрдиреЗ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реИрдВред public void AddQuadTerrainTypes (Vector3 types) { terrainTypes.Add(types); terrainTypes.Add(types); terrainTypes.Add(types); terrainTypes.Add(types); }
рдкрд╕рд▓рд┐рдпреЛрдВ рдХреЗ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ
рдЕрдм рд╣рдореЗрдВ рдЬрд╛рд▓ рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ HexGridChunk
ред рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ TriangulateEdgeFan
ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреЗрд╣рддрд░ рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЙрд▓ рдХреЛ рд╡рд░реНрдЯреЗрдХреНрд╕ рдФрд░ рд░рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░реЗрдВред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рд╣рдо рдЙрд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ color1
, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕реАрдзреЗ рдЗрд╕ рд░рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред void TriangulateEdgeFan (Vector3 center, EdgeVertices edge, Color color) { terrain.AddTriangle(center, edge.v1, edge.v2);
рд░рдВрдЧреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рддреНрд░рд┐рдХреЛрдг рдХреЗ рдкреНрд░рдХрд╛рд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд░рдВрдЧ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИред рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ Vector3
ред рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдЪрд╛рд░ рдЪреИрдирд▓ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдкреИрдЯ рдореИрдк рд╣рдореЗрд╢рд╛ рд▓рд╛рд▓ рд╣реЛрддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рднреА рддреАрди рдШрдЯрдХреЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд▓реЛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред void TriangulateEdgeFan (Vector3 center, EdgeVertices edge, float type) { тАж Vector3 types; types.x = types.y = types.z = type; terrain.AddTriangleTerrainTypes(types); terrain.AddTriangleTerrainTypes(types); terrain.AddTriangleTerrainTypes(types); terrain.AddTriangleTerrainTypes(types); }
рдЕрдм рд╣рдореЗрдВ рд╕реЗрд▓ рдХреЗ рднреВ-рднрд╛рдЧ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд░рдВрдЧ рддрд░реНрдХ рдХреА рдЬрдЧрд╣, рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рднреА рдХреЙрд▓ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди Vnesom TriangulateWithoutRiver
, TriangulateAdjacentToRiver
рдФрд░ TriangulateWithRiverBeginOrEnd
ред
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЬрдм рдЖрдк рдкреНрд▓реЗ рдореЛрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЖрдкрдХреЛ рдмрддрд╛рдПрдВрдЧреА рдХрд┐ рдпреВрд╡реА рдореЗрд╢ рдХреЗ рддреАрд╕рд░реЗ рд╕реЗрдЯ рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рддрдХ рдкреНрд░рддреНрдпреЗрдХ рддреНрд░рд┐рдХреЛрдг рдФрд░ рдХреНрд╡рд╛рдб рдореЗрдВ рд░рд╛рд╣рдд рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рдмрджрд▓рддреЗ рд░рд╣реЗрдВ HexGridChunk
редрд░рд┐рдм рдзрд╛рд░рд┐рдпрд╛рдБ
рдЕрдм рдПрдХ рдзрд╛рд░ рдкрдЯреНрдЯреА рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рджреЛрдиреЛрдВ рддрд░рдл рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрд▓рд╛рдХреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рджреЛ рдЪреИрдирд▓ рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рддреАрд╕рд░рд╛ рдЪреИрдирд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХреЗ рдмрд░рд╛рдмрд░ рдХрд░реЗрдВред рд░рдВрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдХреНрд╡рд╛рдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред void TriangulateEdgeStrip ( EdgeVertices e1, Color c1, float type1, EdgeVertices e2, Color c2, float type2, bool hasRoad = false ) { terrain.AddQuad(e1.v1, e1.v2, e2.v1, e2.v2); terrain.AddQuad(e1.v2, e1.v3, e2.v2, e2.v3); terrain.AddQuad(e1.v3, e1.v4, e2.v3, e2.v4); terrain.AddQuad(e1.v4, e1.v5, e2.v4, e2.v5); terrain.AddQuadColor(c1, c2); terrain.AddQuadColor(c1, c2); terrain.AddQuadColor(c1, c2); terrain.AddQuadColor(c1, c2); Vector3 types; types.x = types.z = type1; types.y = type2; terrain.AddQuadTerrainTypes(types); terrain.AddQuadTerrainTypes(types); terrain.AddQuadTerrainTypes(types); terrain.AddQuadTerrainTypes(types); if (hasRoad) { TriangulateRoadSegment(e1.v2, e1.v3, e1.v4, e2.v2, e2.v3, e2.v4); } }
рдЕрдм рд╣рдореЗрдВ рдЪреБрдиреМрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ TriangulateEdgeStrip
ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ TriangulateAdjacentToRiver
, TriangulateWithRiverBeginOrEnd
рдФрд░ TriangulateWithRiver
рд░рд┐рдм рдкрдЯреНрдЯреА рдХреЗ рджреЛрдиреЛрдВ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓рд╛ TriangulateConnection
рдирд┐рдХрдЯрддрдо рдХрд┐рдирд╛рд░реЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓ рдкреНрд░рдХрд╛рд░ рдФрд░ рджреВрд░ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдкрдбрд╝реЛрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реЗ рдПрдХ рд╣реА рдпрд╛ рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред void TriangulateConnection ( HexDirection direction, HexCell cell, EdgeVertices e1 ) { тАж if (cell.GetEdgeType(direction) == HexEdgeType.Slope) { TriangulateEdgeTerraces(e1, cell, e2, neighbor, hasRoad); } else {
рдпрд╣реА рдмрд╛рдд TriangulateEdgeTerraces
рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИ рдЬреЛ рддреАрди рдмрд╛рд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ TriangulateEdgeStrip
ред рд▓реАрдбреНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рд╣реИрдВред void TriangulateEdgeTerraces ( EdgeVertices begin, HexCell beginCell, EdgeVertices end, HexCell endCell, bool hasRoad ) { EdgeVertices e2 = EdgeVertices.TerraceLerp(begin, end, 1); Color c2 = HexMetrics.TerraceLerp(color1, color2, 1); float t1 = beginCell.TerrainTypeIndex; float t2 = endCell.TerrainTypeIndex; TriangulateEdgeStrip(begin, color1, t1, e2, c2, t2, hasRoad); for (int i = 2; i < HexMetrics.terraceSteps; i++) { EdgeVertices e1 = e2; Color c1 = c2; e2 = EdgeVertices.TerraceLerp(begin, end, i); c2 = HexMetrics.TerraceLerp(color1, color2, i); TriangulateEdgeStrip(e1, c1, t1, e2, c2, t2, hasRoad); } TriangulateEdgeStrip(e2, c2, t1, end, color2, t2, hasRoad); }
рдХреЛрдгреЛрдВ
рдХреЛрдг рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓рд╛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рддреНрд░рд┐рднреБрдЬ рд╣реИред рдирд┐рдЪрд▓рд╛ рд╕реЗрд▓ рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдмрд╛рдПрдВ рдХреЛ рджреВрд╕рд░рд╛, рдФрд░ рджрд╛рдПрдВ рдХреЛ рддреАрд╕рд░реЗ рдХреЛред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рддреНрд░рд┐рдХреЛрдг рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред void TriangulateCorner ( Vector3 bottom, HexCell bottomCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell ) { тАж else { terrain.AddTriangle(bottom, left, right); terrain.AddTriangleColor(color1, color2, color3); Vector3 types; types.x = bottomCell.TerrainTypeIndex; types.y = leftCell.TerrainTypeIndex; types.z = rightCell.TerrainTypeIndex; terrain.AddTriangleTerrainTypes(types); } features.AddWall(bottom, bottomCell, left, leftCell, right, rightCell); }
рд╣рдо рдЙрд╕реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ TriangulateCornerTerraces
, рдХреЗрд╡рд▓ рдпрд╣рд╛рдВ рд╣рдо рдХреНрд╡рд╛рдб-рдПрд╕ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рддреЗ рд╣реИрдВред void TriangulateCornerTerraces ( Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell ) { Vector3 v3 = HexMetrics.TerraceLerp(begin, left, 1); Vector3 v4 = HexMetrics.TerraceLerp(begin, right, 1); Color c3 = HexMetrics.TerraceLerp(color1, color2, 1); Color c4 = HexMetrics.TerraceLerp(color1, color3, 1); Vector3 types; types.x = beginCell.TerrainTypeIndex; types.y = leftCell.TerrainTypeIndex; types.z = rightCell.TerrainTypeIndex; terrain.AddTriangle(begin, v3, v4); terrain.AddTriangleColor(color1, c3, c4); terrain.AddTriangleTerrainTypes(types); for (int i = 2; i < HexMetrics.terraceSteps; i++) { Vector3 v1 = v3; Vector3 v2 = v4; Color c1 = c3; Color c2 = c4; v3 = HexMetrics.TerraceLerp(begin, left, i); v4 = HexMetrics.TerraceLerp(begin, right, i); c3 = HexMetrics.TerraceLerp(color1, color2, i); c4 = HexMetrics.TerraceLerp(color1, color3, i); terrain.AddQuad(v1, v2, v3, v4); terrain.AddQuadColor(c1, c2, c3, c4); terrain.AddQuadTerrainTypes(types); } terrain.AddQuad(v3, v4, left, right); terrain.AddQuadColor(c3, c4, color2, color3); terrain.AddQuadTerrainTypes(types); }
рдорд┐рд╢реНрд░рдгреЛрдВ рдФрд░ рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреЛ рдорд┐рд▓рд╛рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ TriangulateBoundaryTriangle
ред рдмрд╕ рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡реЗрдХреНрдЯрд░ рдкреИрд░рд╛рдореАрдЯрд░ рджреЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рднреА рддреНрд░рд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред void TriangulateBoundaryTriangle ( Vector3 begin, Color beginColor, Vector3 left, Color leftColor, Vector3 boundary, Color boundaryColor, Vector3 types ) { Vector3 v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, 1)); Color c2 = HexMetrics.TerraceLerp(beginColor, leftColor, 1); terrain.AddTriangleUnperturbed(HexMetrics.Perturb(begin), v2, boundary); terrain.AddTriangleColor(beginColor, c2, boundaryColor); terrain.AddTriangleTerrainTypes(types); for (int i = 2; i < HexMetrics.terraceSteps; i++) { Vector3 v1 = v2; Color c1 = c2; v2 = HexMetrics.Perturb(HexMetrics.TerraceLerp(begin, left, i)); c2 = HexMetrics.TerraceLerp(beginColor, leftColor, i); terrain.AddTriangleUnperturbed(v1, v2, boundary); terrain.AddTriangleColor(c1, c2, boundaryColor); terrain.AddTriangleTerrainTypes(types); } terrain.AddTriangleUnperturbed(v2, HexMetrics.Perturb(left), boundary); terrain.AddTriangleColor(c2, leftColor, boundaryColor); terrain.AddTriangleTerrainTypes(types); }
TriangulateCornerTerracesCliff
рдкреНрд░реЗрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реЗрдХреНрдЯрд░ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рддреНрд░рд┐рдХреЛрдг рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдкрд╛рд╕ рдХрд░реЗрдВ TriangulateBoundaryTriangle
ред void TriangulateCornerTerracesCliff ( Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell ) { float b = 1f / (rightCell.Elevation - beginCell.Elevation); if (b < 0) { b = -b; } Vector3 boundary = Vector3.Lerp( HexMetrics.Perturb(begin), HexMetrics.Perturb(right), b ); Color boundaryColor = Color.Lerp(color1, color3, b); Vector3 types; types.x = beginCell.TerrainTypeIndex; types.y = leftCell.TerrainTypeIndex; types.z = rightCell.TerrainTypeIndex; TriangulateBoundaryTriangle( begin, color1, left, color2, boundary, boundaryColor, types ); if (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { TriangulateBoundaryTriangle( left, color2, right, color3, boundary, boundaryColor, types ); } else { terrain.AddTriangleUnperturbed( HexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary ); terrain.AddTriangleColor(color2, color3, boundaryColor); terrain.AddTriangleTerrainTypes(types); } }
рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИ TriangulateCornerCliffTerraces
ред void TriangulateCornerCliffTerraces ( Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell ) { float b = 1f / (leftCell.Elevation - beginCell.Elevation); if (b < 0) { b = -b; } Vector3 boundary = Vector3.Lerp( HexMetrics.Perturb(begin), HexMetrics.Perturb(left), b ); Color boundaryColor = Color.Lerp(color1, color2, b); Vector3 types; types.x = beginCell.TerrainTypeIndex; types.y = leftCell.TerrainTypeIndex; types.z = rightCell.TerrainTypeIndex; TriangulateBoundaryTriangle( right, color3, begin, color1, boundary, boundaryColor, types ); if (leftCell.GetEdgeType(rightCell) == HexEdgeType.Slope) { TriangulateBoundaryTriangle( left, color2, right, color3, boundary, boundaryColor, types ); } else { terrain.AddTriangleUnperturbed( HexMetrics.Perturb(left), HexMetrics.Perturb(right), boundary ); terrain.AddTriangleColor(color2, color3, boundaryColor); terrain.AddTriangleTerrainTypes(types); } }
рдирджреА
рдмрджрд▓рдиреЗ рдХреА рдЕрдВрддрд┐рдо рд╡рд┐рдзрд┐ рдпрд╣ рд╣реИ TriangulateWithRiver
ред рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рдо рд╕реЗрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рдореЗрдВ рд╣реИрдВ, рд╣рдо рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рддреНрд░рд┐рдХреЛрдг рдФрд░ рдХреНрд╡рд╛рдб-рдПрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред void TriangulateWithRiver ( HexDirection direction, HexCell cell, Vector3 center, EdgeVertices e ) { тАж terrain.AddTriangleColor(color1); terrain.AddQuadColor(color1); terrain.AddQuadColor(color1); terrain.AddTriangleColor(color1); Vector3 types; types.x = types.y = types.z = cell.TerrainTypeIndex; terrain.AddTriangleTerrainTypes(types); terrain.AddQuadTerrainTypes(types); terrain.AddQuadTerrainTypes(types); terrain.AddTriangleTerrainTypes(types); тАж }
рдорд┐рдХреНрд╕ рдЯрд╛рдЗрдк рдХрд░реЗрдВ
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореЗрд╖реЛрдВ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдКрдВрдЪрд╛рдИ рд╡рд╛рд▓реЗ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реЛрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдмрдЪрд╛ рд╣реБрдЖ рд╣реИ, рд╡рд╣ рд╣реИ рдЯреЗрд░реЗрди рд╢реЗрдбрд░ рдХреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ред рдЦрдВрдбреЛрдВ рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рд╢реАрд░реНрд╖ рдЫрд╛рдпрд╛рдХрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╢реАрд░реНрд╖ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдПрд╕реНрддреЗрд░ рд╢реЗрдбрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрдирдкреБрдЯ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ float3 terrain
рдФрд░ рдЗрд╕реЗ рдЙрд╕рдореЗрдВ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВ v.texcoord2.xyz
ред #pragma surface surf Standard fullforwardshadows vertex:vert #pragma target 3.5 тАж struct Input { float4 color : COLOR; float3 worldPos; float3 terrain; }; void vert (inout appdata_full v, out Input data) { UNITY_INITIALIZE_OUTPUT(Input, data); data.terrain = v.texcoord2.xyz; }
рд╣рдореЗрдВ рдкреНрд░рддрд┐ рдЯреБрдХрдбрд╝реЗ рддреАрди рдмрд╛рд░ рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЪрд▓реЛ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдПрдХ рд╕рд░рдгреА рдХрд╛ рдирдореВрдирд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирдореВрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред float4 GetTerrainColor (Input IN, int index) { float3 uvw = float3(IN.worldPos.xz * 0.02, IN.terrain[index]); float4 c = UNITY_SAMPLE_TEX2DARRAY(_MainTex, uvw); return c * IN.color[index]; } void surf (Input IN, inout SurfaceOutputStandard o) { тАж }
рдХреНрдпрд╛ рд╣рдо рдПрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?рд╣рд╛рдВред - color[0]
color.r
. color[1]
color.g
, .
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдХреЗрд╡рд▓ рддреАрди рдмрд╛рд░ рдмрдирд╛рд╡рдЯ рд╕рд░рдгреА рдХрд╛ рдирдореВрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред void surf (Input IN, inout SurfaceOutputStandard o) { // float2 uv = IN.worldPos.xz * 0.02; fixed4 c = GetTerrainColor(IN, 0) + GetTerrainColor(IN, 1) + GetTerrainColor(IN, 2); o.Albedo = c.rgb * _Color; o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = ca; }
рд░рд╛рд╣рдд рдорд┐рд▓реАредрдЕрдм рд╣рдо рд░рд╛рд╣рдд рдХреЛ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡реЗ рдареЛрд╕ рд░рдВрдЧреЛрдВ рдХреА рддрд░рд╣ рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рджреБрдирд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпреВрд╡реА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рддреЗрдЬ рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде, рдмрдирд╛рд╡рдЯ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдмрдирд╛рд╡рдЯ рдХрд╛рдлреА рддрдЯрд╕реНрде рдФрд░ рдмрд╣реБрдд рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдВрдЧреЗред рдЕрдиреНрдпрдерд╛, рд╣рдореЗрдВ рдмрдбрд╝реЗ рдмрджрд╕реВрд░рдд рдЦрд┐рдВрдЪрд╛рд╡ рдХреЗ рдирд┐рд╢рд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВред рдЖрдк рдЗрд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬреНрдпрд╛рдорд┐рддрд┐ рдпрд╛ рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреА рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдЫрд┐рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗредрдорд┐рдЯрд╛рдирд╛
рдЕрдм, рдЬрдм рд╣рдо рд░рдВрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдВрдкрд╛рджрдХ рдкреИрдирд▓ рдХреЛ рдмрджрд▓рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рд╣рдо рдПрдХ рд╕реБрдВрджрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд░рд╛рд╣рдд рдмрдирд╛рд╡рдЯ рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрди рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЪрд┐рддреНрд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдореМрдЬреВрджрд╛ рдпреЛрдЬрдирд╛ рдХреА рд╢реИрд▓реА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВредрд░рд╛рд╣рдд рдХреЗ рд╡рд┐рдХрд▓реНрдкредрдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, HexCell
рд░рдВрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреА рдЕрдм рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрдВред
рдЖрдк HexGrid
рд░рдВрдЧреЛрдВ рдФрд░ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдХреЛ рднреА рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдВрдд рдореЗрдВ, рд░рдВрдЧреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ HexMetrics
ред
unitypackageрднрд╛рдЧ 15: рджреВрд░рд┐рдпрд╛рдБ
- рдЧреНрд░рд┐рдб рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред
- рд╕рдВрдкрд╛рджрди рдФрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЛрдб рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВред
- рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред
- рд╣рдо рдмрд╛рдзрд╛рдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рддрд░реАрдХреЗ рдЦреЛрдЬрддреЗ рд╣реИрдВред
- рд╣рдо рдЪрд▓рддреЗ рд╣реБрдП рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд▓рд╛рдЧрддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред
рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдирдХреНрд╢реЗ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗредрд╕рдмрд╕реЗ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рд╣рдореЗрд╢рд╛ рд╕реАрдзрд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИредрдЧреНрд░рд┐рдб рдкреНрд░рджрд░реНрд╢рди
рд╕реЗрд▓ рд╕реЗ рд╕реЗрд▓ рдореЗрдВ рд▓реЗ рдЬрд╛рдХрд░ рдореИрдк рдкрд░ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╣реАрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдЧреБрдЬрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреВрд░рд┐рдпреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЙрд╕ рд╖рдЯреНрднреБрдЬ рдЧреНрд░рд┐рдб рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕ рдкрд░ рд╣рдорд╛рд░рд╛ рдорд╛рдирдЪрд┐рддреНрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИредрдореЗрд╖ рдмрдирд╛рд╡рдЯ
рдорд╛рдирдЪрд┐рддреНрд░ рдЬрд╛рд▓ рдХреА рдЕрдирд┐рдпрдорд┐рддрддрд╛рдУрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЬрд╛рд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдкрд╛рдЯ рд╣реИред рд╣рдо рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдЧреНрд░рд┐рдб рдкреИрдЯрд░реНрди рдкреЗрд╢ рдХрд░рдХреЗ рдЗрд╕реЗ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЬрд╛рд▓ рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдмрд╛рд░-рдмрд╛рд░ рдЬрд╛рд▓ рдХреА рдмрдирд╛рд╡рдЯредрдКрдкрд░ рджрд┐рдЦрд╛рдИ рдЧрдИ рдмрдирд╛рд╡рдЯ рдореЗрдВ рд╖рдЯреНрднреБрдЬ рдЧреНрд░рд┐рдб рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 2 рдХреЛрд╢рд┐рдХрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдЖрдпрддрд╛рдХрд╛рд░ рд╣реИ, рд╡рд░реНрдЧрд╛рдХрд╛рд░ рдирд╣реАрдВред рдЪреВрдВрдХрд┐ рдмрдирд╛рд╡рдЯ рдЦреБрдж рдПрдХ рд╡рд░реНрдЧ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреИрдЯрд░реНрди рдлреИрд▓рд╛ рд╣реБрдЖ рджрд┐рдЦрддрд╛ рд╣реИред рдирдореВрдирд╛ рд▓реЗрддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЗрд╕рдХреА рднрд░рдкрд╛рдИ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредрдЧреНрд░рд┐рдб рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг
рдПрдХ рдореЗрд╖ рдкреИрдЯрд░реНрди рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЯреЗрд░реЗрди рд╢реЗрдбрд░ рдореЗрдВ рдПрдХ рдмрдирд╛рд╡рдЯ рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Terrain Texture Array", 2DArray) = "white" {} _GridTex ("Grid Texture", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 }
рдореЗрд╖ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рд░рд╛рд╣рдд рд╕рд╛рдордЧреНрд░реАредрджреБрдирд┐рдпрд╛ рдХреЗ XZ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рд╡рдЯ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрд▓реНрдмрд┐рдбреЛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВред рдЪреВрдВрдХрд┐ рдмрдирд╛рд╡рдЯ рдкрд░ рдЧреНрд░рд┐рдб рд▓рд╛рдЗрдиреЗрдВ рдЧреНрд░реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдкреИрдЯрд░реНрди рдХреЛ рд░рд╛рд╣рдд рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛ред sampler2D _GridTex; тАж void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = GetTerrainColor(IN, 0) + GetTerrainColor(IN, 1) + GetTerrainColor(IN, 2); fixed4 grid = tex2D(_GridTex, IN.worldPos.xz); o.Albedo = c.rgb * grid * _Color; o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = ca; }
рдЕрд▓реНрдмреЗрдбреЛ рдХреЛ рдорд╣реАрди рдЬрд╛рд▓реА рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╣рдореЗрдВ рдкреИрдЯрд░реНрди рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПред рдкрдбрд╝реЛрд╕реА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдХреЗрдВрджреНрд░реЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА 15 рд╣реИ, рдЗрд╕реЗ рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдЧреБрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рд╡реА рдЧреНрд░рд┐рдб рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ 30 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рдЖрдВрддрд░рд┐рдХ рддреНрд░рд┐рдЬреНрдпрд╛ 5 to3 рд╣реИ, рдФрд░ рджреЛ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рджрд╛рдИрдВ рдУрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрд╛рд░ рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпреВ рдЧреНрд░рд┐рдб рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ 20 .3 рддрдХ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред float2 gridUV = IN.worldPos.xz; gridUV.x *= 1 / (4 * 8.66025404); gridUV.y *= 1 / (2 * 15.0); fixed4 grid = tex2D(_GridTex, gridUV);
рд╕рд╣реА рдореЗрд╖ рдЖрдХрд╛рд░редрдЕрдм рдЧреНрд░рд┐рдб рд▓рд╛рдЗрдиреЗрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред рд░рд╛рд╣рдд рдмрдирд╛рд╡рдЯ рдХреА рддрд░рд╣, рд╡реЗ рдКрдВрдЪрд╛рдИ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдКрдВрдЪрд╛рдИ рдХреЗ рд╕рд╛рде рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрд╢рдиредрдореЗрд╖ рд╡рд┐рд░реВрдкрдг рдЖрдорддреМрд░ рдкрд░ рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд▓рдВрдмреА рджреВрд░реА рд╕реЗ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВредрджреВрд░реА рдореЗрдВ рдЬрд╛рд▓редрдЧреНрд░рд┐рдб рд╕рдорд╛рд╡реЗрд╢
рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЧреНрд░рд┐рдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╣рдореЗрд╢рд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд▓реЗрддреЗ рд╕рдордп рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рд░ рдХреЛрдИ рдЧреНрд░рд┐рдб рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕рдХреЗ рдмрд┐рдирд╛ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо shader рдореЗрдВ multi_compile рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ GRID_ON
ред рд╕рд╢рд░реНрдд рд╢реЗрдбрд░ рд╕рдВрдХрд▓рди рдХреЛ рд░реЗрдВрдбрд░рд┐рдВрдЧ 5 рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ , рдорд▓реНрдЯреАрдкрд▓ рд▓рд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред #pragma surface surf Standard fullforwardshadows vertex:vert #pragma target 3.5 #pragma multi_compile _ GRID_ON
рдПрдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо grid
рдкрд╣рд▓реЗ рдЗрд╕реЗ 1 рдХрд╛ рдорд╛рди рджреЗрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЧреНрд░рд┐рдб рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╣рдо рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓ рд╡реЗрд░рд┐рдПрдВрдЯ рдХреЗ рд▓рд┐рдП рдЧреНрд░рд┐рдб рдмрдирд╛рд╡рдЯ рдХрд╛ рдирдореВрдирд╛ рд▓реЗрдВрдЧреЗ GRID_ON
ред fixed4 grid = 1; #if defined(GRID_ON) float2 gridUV = IN.worldPos.xz; gridUV.x *= 1 / (4 * 8.66025404); gridUV.y *= 1 / (2 * 15.0); grid = tex2D(_GridTex, gridUV); #endif o.Albedo = c.rgb * grid * _Color;
рдЪреВрдВрдХрд┐ рдХреАрд╡рд░реНрдб GRID_ON
рднреВ-рднрд╛рдЧ рдХреЗ рдЫрд╛рдпрд╛рджрд╛рд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧреНрд░рд┐рдб рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрдкрд╛рджрдХ UI рдкрд░ рдПрдХ рд╕реНрд╡рд┐рдЪ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЯреЗрд░реЗрдиHexMapEditor
рд╕рд╛рдордЧреНрд░реА рдХрд╛ рд▓рд┐рдВрдХ рдФрд░ рдХреАрд╡рд░реНрдб рдХреЛ рд╕рдХреНрд╖рдо рдпрд╛ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдП редGRID_ON
public Material terrainMaterial; тАж public void ShowGrid (bool visible) { if (visible) { terrainMaterial.EnableKeyword("GRID_ON"); } else { terrainMaterial.DisableKeyword("GRID_ON"); } }
рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрдкрд╛рджрдХ рдорд╛рд░реНрдЪ рд╣реЗрдХреНрд╕рд╛рдЧреЛрдиреНрд╕редUI рдореЗрдВ рдЧреНрд░рд┐рдб рд╕реНрд╡рд┐рдЪ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ рд╡рд┐рдзрд┐ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ ShowGrid
редрдЧреНрд░рд┐рдб рд╕реНрд╡рд┐рдЪредрд░рд╛рдЬреНрдп рдмрдЪрд╛рдУ
рдЕрдм рдкреНрд▓реЗ рдореЛрдб рдореЗрдВ, рд╣рдо рдЧреНрд░рд┐рдб рдХреЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ, рдЧреНрд░рд┐рдб рд╢реБрд░реВ рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЬрдм рд╣рдо рд╕реНрд╡рд┐рдЪ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрд╕реЗ рдмрдВрдж рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЧреНрд░рд┐рдб рдлрд┐рд░ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЧреНрд░рд┐рдб рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдкрд░ рд╣рдо Play рдореЛрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк Play рдореЛрдб рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╕реНрд╡рд┐рдЪ рдмрдВрдж рд╣реИредрдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдЗрд▓рд╛рдХреЗ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдХреАрд╡рд░реНрдб рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ ред рд╣рдо рднреМрддрд┐рдХ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рд╕рдВрдкрд╛рджрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдПрдХрддрд╛ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рдмрдЪрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛редрдЦреЗрд▓ рд╣рдореЗрд╢рд╛ рдПрдХ рдЧреНрд░рд┐рдб рдХреЗ рдмрд┐рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд╣рдо рдХреАрд╡рд░реНрдб рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░ рджреЗрдЧрд╛ GRID_ON
рдЬрд╛рдЧ рдореЗрдВ HexMapEditor
ред void Awake () { terrainMaterial.DisableKeyword("GRID_ON"); }
unitypackageрдореЛрдб рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
рдпрджрд┐ рд╣рдо рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдЖрдВрджреЛрд▓рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо, рд╣рдореЗрдВ рдкрде рдХреЗ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╕реЗрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рд╕рднреА рд╕рдВрдкрд╛рджрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рдирдЪрд┐рддреНрд░ рд╕рдВрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рд╡рд┐рд╕реНрдерд╛рдкрди рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПред рддреЛ рдЪрд▓реЛ рдПрдХ рд╕реНрд╡рд┐рдЪ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рд╕рдВрдкрд╛рджрди рдореЛрдб рдореЗрдВ рд╣реИрдВредрд╕реНрд╡рд┐рдЪ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
HexMapEditor
рдмреВрд▓рд┐рдпрди рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ editMode
, рд╕рд╛рде рд╣реА рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдзрд┐ред рдлрд┐рд░ рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП UI рдореЗрдВ рдПрдХ рдФрд░ рд╕реНрд╡рд┐рдЪ рдЬреЛрдбрд╝реЗрдВред рдЪрд▓реЛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЛрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рд╕рдВрдкрд╛рджрди рдореЛрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред bool editMode; тАж public void SetEditMode (bool toggle) { editMode = toggle; }
рд╕рдВрдкрд╛рджрди рдореЛрдб рд╕реНрд╡рд┐рдЪредрд╕рдВрдкрд╛рджрди рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЙрд▓ рдХреЛ EditCells
рдирд┐рд░реНрднрд░ рдХрд░реЗрдВ editMode
ред void HandleInput () { Ray inputRay = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(inputRay, out hit)) { HexCell currentCell = hexGrid.GetCell(hit.point); if (previousCell && previousCell != currentCell) { ValidateDrag(currentCell); } else { isDrag = false; } if (editMode) { EditCells(currentCell); } previousCell = currentCell; } else { previousCell = null; } }
рд▓реЗрдмрд▓ рдбрд┐рдмрдЧрд┐рдВрдЧ
рдЕрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирдХреНрд╢реЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЗрдХрд╛рдИ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЖрдВрджреЛрд▓рди рдХреА рджреВрд░реА рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореМрдЬреВрджрд╛ рд╕реЗрд▓ рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕рдВрдкрд╛рджрди рдореЛрдб рдЕрдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред public void SetEditMode (bool toggle) { editMode = toggle; hexGrid.ShowUI(!toggle); }
рдЪреВрдВрдХрд┐ рд╣рдо рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЛрдб рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЗрдмрд▓ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрддрдорд╛рди рдореЗрдВ HexGridChunk.Awake
рдЙрдиреНрд╣реЗрдВ рдЕрдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрд╕реЗ рдЕрдм рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред void Awake () { gridCanvas = GetComponentInChildren<Canvas>(); cells = new HexCell[HexMetrics.chunkSizeX * HexMetrics.chunkSizeZ];
рд╕рдордиреНрд╡рд┐рдд рд▓реЗрдмрд▓редрд╕реЗрд▓ рдореЛрдб рдЕрдм рдкреНрд▓реЗ рдореЛрдб рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рджреГрд╢реНрдпрдорд╛рди рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рджреВрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд╕реЗрд▓ рдХреЗрд╡рд▓ рдПрдХ рдирдВрдмрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЖрдк рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХреЗред рд╣реЗрдХреНрд╕ рд╕реЗрд▓ рд▓реЗрдмрд▓ рдХреЗ рдкреНрд░реАрдлрд╝реИрдм рдХреЛ рдмрджрд▓реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдЖрдХрд╛рд░ 8 рдХреЗ рд╕рд╛рде рдмреЛрд▓реНрдб рдлрд╝реЙрдиреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗредрдмреЛрд▓реНрдб рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдЯреИрдЧ 8.рдЕрдм рдкреНрд▓реЗ рдореЛрдб рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдмрдбрд╝реЗ рдЯреИрдЧ рджреЗрдЦреЗрдВрдЧреЗред рд╕реЗрд▓ рдХреЗ рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдмрд╛рдХреА рдХреЛ рд▓реЗрдмрд▓ рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИредрдмрдбрд╝реЗ рдЯреИрдЧредрдЪреВрдВрдХрд┐ рдЕрдм рд╣рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо HexGrid.CreateCell
рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдореЗрдВ рдореВрд▓реНрдп рдХреЛ рд╣рдЯрд╛ рджреЗрдВрдЧреЗ label.text
ред void CreateCell (int x, int z, int i) { тАж Text label = Instantiate<Text>(cellLabelPrefab); label.rectTransform.anchoredPosition = new Vector2(position.x, position.z);
рдЖрдк UI рд╕реЗ рд▓реЗрдмрд▓ рд╕реНрд╡рд┐рдЪ рдФрд░ рдЙрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рднреА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ HexMapEditor.ShowUI
ред
рд╡рд┐рдзрд┐ рд╕реНрд╡рд┐рдЪ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИредunitypackageрджреВрд░рд┐рдпрд╛рдБ рдЦреЛрдЬрдирд╛
рдЕрдм рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЛрдб рд╣реИ, рд╣рдо рджреВрд░рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рд╕реЗрд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рдЗрд╕ рд╕реЗрд▓ рд╕реЗ рдореИрдк рдкрд░ рд╕рднреА рд╕реЗрд▓ рд╕реЗ рджреВрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗредрджреВрд░реА рдкреНрд░рджрд░реНрд╢рди
рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HexCell
рдкреВрд░реНрдгрд╛рдВрдХ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ distance
ред рдпрд╣ рдЗрд╕ рд╕реЗрд▓ рдФрд░ рдЪрдпрдирд┐рдд рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╢реВрдиреНрдп рд╣реЛрдЧрд╛, рддрддреНрдХрд╛рд▓ рдкрдбрд╝реЛрд╕реА рдХреЗ рд▓рд┐рдП рдпрд╣ 1 рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред int distance;
рдЬрдм рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрд╕рдХрд╛ рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓ рд▓реЗрдмрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред UI рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ HexCell
рд╕рдВрджрд░реНрдн рд╣реИ RectTransform
ред рд╣рдореЗрдВ GetComponent<Text>
рд╕реЗрд▓ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕реЗ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред Text
рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ UnityEngine.UI
, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред void UpdateDistanceLabel () { Text label = uiRect.GetComponent<Text>(); label.text = distance.ToString(); }
рдХреНрдпрд╛ рд╣рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕реЗ рд╕реАрдзрд╛ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП?, . , , , . , .
рдЖрдЗрдП рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдкрддреНрддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВ, рд╕рд╛рде рд╣реА рдЗрд╕рдХреЗ рд▓реЗрдмрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред public int Distance { get { return distance; } set { distance = value; UpdateDistanceLabel(); } }
рд╕реЗрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде HexGrid
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ FindDistancesTo
ред рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╕ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВрдЧреЗред public void FindDistancesTo (HexCell cell) { for (int i = 0; i < cells.Length; i++) { cells[i].Distance = 0; } }
рдпрджрд┐ рд╕рдВрдкрд╛рджрди рдореЛрдб рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо HexMapEditor.HandleInput
рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред if (editMode) { EditCells(currentCell); } else { hexGrid.FindDistancesTo(currentCell); }
рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░
рдЕрдм рдиреЗрд╡рд┐рдЧреЗрд╢рди рдореЛрдб рдореЗрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЫреВрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рднреА рд╕реЗрд▓ рд╢реВрдиреНрдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрдиреНрд╣реЗрдВ рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рджреВрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЙрдирд╕реЗ рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реЗрд▓ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЗрд╕рдХреА HexCoordinates
рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ DistanceTo
, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ HexGrid.FindDistancesTo
ред public void FindDistancesTo (HexCell cell) { for (int i = 0; i < cells.Length; i++) { cells[i].Distance = cell.coordinates.DistanceTo(cells[i].coordinates); } }
рдЕрдм HexCoordinates
рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ DistanceTo
ред рдЙрд╕реЗ рджреВрд╕рд░реЗ рд╕реЗрдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдЗрдП рдХреЗрд╡рд▓ рдПрдХреНрд╕ рдХреЛ рдорд╛рдкрдиреЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ, рдФрд░ рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдПрдХреНрд╕ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдШрдЯрд╛рдПрдВрдЧреЗред public int DistanceTo (HexCoordinates other) { return x - other.x; }
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ X рдХреЗ рд╕рд╛рде рдПрдХ рдСрдлрд╕реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рджреВрд░рд┐рдпрд╛рдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рд╕рдордиреНрд╡рдп рдЕрдВрддрд░ рдПрдХреНрд╕ рдореЛрдбреБрд▓реЛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред return x < other.x ? other.x - x : x - other.x;
рдПрдХреНрд╕ рдХреЗ рд╕рд╛рде рджреВрд░рд┐рдпрд╛рдВредрдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд╣реА рджреВрд░реА рддрднреА рдорд┐рд▓рддреА рд╣реИ рдЬрдм рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдЖрдпрд╛рдо рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣реЗрдХреНрд╕рд╛рдЧреЛрдиреНрд╕ рдХреА рдПрдХ рдЧреНрд░рд┐рдб рдореЗрдВ рддреАрди рдЖрдпрд╛рдо рд╣реИрдВред рддреЛ рдЖрдЗрдП рддреАрдиреЛрдВ рдЖрдпрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд░рд┐рдпрд╛рдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИред return (x < other.x ? other.x - x : x - other.x) + (Y < other.Y ? other.Y - Y : Y - other.Y) + (z < other.z ? other.z - z : z - other.z);
XYZ рджреВрд░рд┐рдпреЛрдВ рдХрд╛ рдпреЛрдЧредрдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╣рдо рджреБрдЧреБрдиреА рджреВрд░реА рдкрд░ рд╣реИрдВред рдпрд╣реА рд╣реИ, рд╕рд╣реА рджреВрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд░рд╛рд╢рд┐ рдХреЛ рдЖрдзрд╛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред return ((x < other.x ? other.x - x : x - other.x) + (Y < other.Y ? other.Y - Y : Y - other.Y) + (z < other.z ? other.z - z : z - other.z)) / 2;
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреВрд░рд┐рдпрд╛рдБредрд░рд╛рд╢рд┐ рджреБрдЧреБрдиреА рджреВрд░реА рдХреЗ рдмрд░рд╛рдмрд░ рдХреНрдпреЛрдВ рд╣реИ?, . , (1, тИТ3, 2). . , . . , . .
. unitypackageрдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЧрдгрдирд╛ рдХреА рдЧрдИ рджреВрд░реА рдЪрдпрдирд┐рдд рд╕реЗрд▓ рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗрд▓ рдХреЗ рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддреА рд╣реИред рд╣рдореЗрдВ рдЗрд╕рд╕реЗ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрди рд░рд╛рд╕реНрддреЛрдВ рдХреЛ рд╕рд╣реА рд╣реЛрдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ рдпрджрд┐ рдорд╛рд░реНрдЧ рдХреБрдЫ рднреА рдЕрд╡рд░реБрджреНрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЪрдЯреНрдЯрд╛рдиреЗрдВ, рдкрд╛рдиреА рдФрд░ рдЕрдиреНрдп рдмрд╛рдзрд╛рдПрдБ рд╣рдореЗрдВ рдШреЗрд░ рд╕рдХрддреА рд╣реИрдВред рд╢рд╛рдпрдж рдХреБрдЫ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрдмрд╛рдзрд╛рдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рддрдм рддрдХ рдЦреЛрдЬрдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╣рдореЗрдВ рд╣рд░ рд╕реЗрд▓ рди рдорд┐рд▓ рдЬрд╛рдПредрдЦреЛрдЬ рджреГрд╢реНрдп
рдорд╛рдирдЪрд┐рддреНрд░ рдЦреЛрдЬ рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЦреЛрдЬ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХреЛ рджреЗрдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рд╣рдо рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдПрдХ coroutine рдореЗрдВ рдмрджрд▓рдХрд░ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЦреЛрдЬ рд╕реНрдерд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ System.Collections
ред рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб 60 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рддрд╛рдЬрд╝рд╛ рджрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдирдХреНрд╢реЗ рдкрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдирд╣реАрдВ рд▓рдЧрд╛ред public void FindDistancesTo (HexCell cell) { StartCoroutine(Search(cell)); } IEnumerator Search (HexCell cell) { WaitForSeconds delay = new WaitForSeconds(1 / 60f); for (int i = 0; i < cells.Length; i++) { yield return delay; cells[i].Distance = cell.coordinates.DistanceTo(cells[i].coordinates); } }
рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рдХреЗрд╡рд▓ рдПрдХ рдЦреЛрдЬ рд╕рдХреНрд░рд┐рдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирдИ рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕рднреА рдХреЛрд░рдЖрдЙрдЯреНрд╕ рдХреЛ рд░реЛрдХрддреЗ рд╣реИрдВред public void FindDistancesTo (HexCell cell) { StopAllCoroutines(); StartCoroutine(Search(cell)); }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдирдХреНрд╢рд╛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЦреЛрдЬ рдкреВрд░реА рдХрд░рдиреА рд╣реЛрдЧреАред public void Load (BinaryReader reader, int header) { StopAllCoroutines(); тАж }
рдЪреМрдбрд╝рд╛рдИ-рдкрд╣рд▓реА рдЦреЛрдЬ
рдЦреЛрдЬ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣реА, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдХреА рджреВрд░реА рд╢реВрдиреНрдп рд╣реИред рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдкрдиреЗ рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд░реА 1 рд╣реИ, рдЕрдЧрд░ рд╡реЗ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рдЗрди рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╕реЗрд▓ рдХреА рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдЕрдкрдиреЗ рдкрдбрд╝реЛрд╕реА рд╣реИрдВ, рдЬрд┐рди рддрдХ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрди рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рджреВрд░реА 2 рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╣рдо рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ 1. рдХреА рджреВрд░реА рдкрд░ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЗрд╕реЗ рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП 2 рдХреА рджреВрд░реА рдкрд░ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рд╣рдо рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдБрдЪ рдЬрд╛рддреЗредрдпрд╣реА рд╣реИ, рдкрд╣рд▓реЗ рд╣рдо 1 рдХреА рджреВрд░реА рдкрд░ рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо 2 рдХреА рджреВрд░реА рдкрд░ рд╕рдм рдХреБрдЫ рдкрд╛рддреЗ рд╣реИрдВ, рдлрд┐рд░ 3 рдХреА рджреВрд░реА рдкрд░, рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЬрдм рддрдХ рд╣рдо рдЦрддреНрдо рдирд╣реАрдВ рдХрд░рддреЗред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд▓рдмреНрдз рд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЫреЛрдЯреА рджреВрд░реА рдкрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЪреМрдбрд╝рд╛рдИ-рдкреНрд░рдердо рдЦреЛрдЬ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИредрдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕реЗрд▓ рд╕реЗ рджреВрд░реА рддрдп рдХрд░ рд▓реА рд╣реИред рдЕрдХреНрд╕рд░ рдЗрд╕рдХреЗ рд▓рд┐рдП, рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рдпрд╛ рд╕рдВрд▓рдЧреНрди рд╕реЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ int.MaxValue
рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд▓ рдореЗрдВ рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХрд╛ рджреМрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд╣рдореЗрдВ рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред IEnumerator Search (HexCell cell) { for (int i = 0; i < cells.Length; i++) { cells[i].Distance = int.MaxValue; } тАж }
рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрджрд▓рдХрд░ рд╕рднреА рдЧреИрд░-рдкреНрд░рдорд╛рдгрд┐рдд рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЫрд┐рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ HexCell.UpdateDistanceLabel
ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрдЬ рдХреЛ рдПрдХ рд░рд┐рдХреНрдд рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред void UpdateDistanceLabel () { Text label = uiRect.GetComponent<Text>(); label.text = distance == int.MaxValue ? "" : distance.ToString(); }
рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЙрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рджреМрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рд╡реЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдХреНрд╕рд░ рд╕реАрдорд╛ рдпрд╛ рдПрдХ рдЦреБрд▓реЗ рд╕реЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрд╕реА рдХреНрд░рдо рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЙрдирд╕реЗ рдорд┐рд▓реЗ рдереЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ Queue
, рдЬреЛ рдирд╛рдо рд╕реНрдерд╛рди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ System.Collections.Generic
ред рдЪрдпрдирд┐рдд рд╕реЗрд▓ рдкрд╣рд▓реЗ рдЗрд╕ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕рдХреА рджреВрд░реА 0 рд╣реЛрдЧреАред IEnumerator Search (HexCell cell) { for (int i = 0; i < cells.Length; i++) { cells[i].Distance = int.MaxValue; } WaitForSeconds delay = new WaitForSeconds(1 / 60f); Queue<HexCell> frontier = new Queue<HexCell>(); cell.Distance = 0; frontier.Enqueue(cell);
рдЗрд╕ рдХреНрд╖рдг рд╕реЗ, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓реВрдк рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдХрддрд╛рд░ рдореЗрдВ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╕рд╛рдордиреЗ рдХреА рдХреЛрд╢рд┐рдХрд╛ рдХрддрд╛рд░ рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред frontier.Enqueue(cell); while (frontier.Count > 0) { yield return delay; HexCell current = frontier.Dequeue(); }
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рд╕реЗрд▓ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рджреВрд░реА рдкрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдХрддрд╛рд░ рдореЗрдВ рдЪрдпрдирд┐рдд рд╕реЗрд▓ рд╕реЗ рдПрдХ рдХрджрдо рдЖрдЧреЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред while (frontier.Count > 0) { yield return delay; HexCell current = frontier.Dequeue(); for (HexDirection d = HexDirection.NE; d <= HexDirection.NW; d++) { HexCell neighbor = current.GetNeighbor(d); if (neighbor != null) { neighbor.Distance = current.Distance + 1; frontier.Enqueue(neighbor); } } }
рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрди рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЕрднреА рддрдХ рдХреЛрдИ рджреВрд░реА рдирд╣реАрдВ рджреА рдЧрдИ рд╣реИред if (neighbor != null && neighbor.Distance == int.MaxValue) { neighbor.Distance = current.Distance + 1; frontier.Enqueue(neighbor); }
рд╡реНрдпрд╛рдкрдХ рдЦреЛрдЬредрдкрд╛рдиреА рд╕реЗ рдмрдЪреЗрдВ
рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдЪреМрдбрд╝рд╛рдИ-рдкреНрд░рдердо рдЦреЛрдЬ рдиреАрд░рд╕ рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рд╕рд╣реА рджреВрд░реА рдкрд╛рддреА рд╣реИ, рд╣рдо рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреБрдЫ рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрддрд╛рд░ рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдХреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИредрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ: рд╡реЗ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЬрд┐рди рдкрд░ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рджреВрд░реА рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рд╣реИред рдЖрдЗрдП рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВ рддрд╛рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВред for (HexDirection d = HexDirection.NE; d <= HexDirection.NW; d++) { HexCell neighbor = current.GetNeighbor(d); if (neighbor == null || neighbor.Distance != int.MaxValue) { continue; } neighbor.Distance = current.Distance + 1; frontier.Enqueue(neighbor); }
рдЪрд▓реЛ рдЙрди рд╕рднреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рднреА рдЫреЛрдбрд╝ рджреЗрдВ рдЬреЛ рдкрд╛рдиреА рдХреЗ рдиреАрдЪреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рджреВрд░реА рдХреА рдЦреЛрдЬ рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЬрдореАрди рдкрд░ рдХреЗрд╡рд▓ рдЖрдВрджреЛрд▓рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред if (neighbor == null || neighbor.Distance != int.MaxValue) { continue; } if (neighbor.IsUnderwater) { continue; }
рдкрд╛рдиреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рджреВрд░рд┐рдпрд╛рдВредрдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрднреА рднреА рд╕рдмрд╕реЗ рдХрдо рджреВрд░реА рдкрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рд╕рднреА рдкрд╛рдиреА рд╕реЗ рдмрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдкрд╛рдиреА рдХреЗ рдиреАрдЪреЗ рдХреА рдХреЛрд╢рд┐рдХрд╛рдПрдВ рдХрднреА рднреА рджреВрд░реА рд╣рд╛рд╕рд┐рд▓ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЬрдореАрди рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╖реЗрддреНрд░ред рдпрджрд┐ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЕрдВрдбрд░рд╡рд╛рдЯрд░ рд╕реЗрд▓ рдХреЗрд╡рд▓ рджреВрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИредрдЪрдЯреНрдЯрд╛рдиреЛрдВ рд╕реЗ рдмрдЪреЗрдВ
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдкрдбрд╝реЛрд╕реА рдХреА рдпрд╛рддреНрд░рд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░рд┐рдм рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреЛ рдкрде рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдврд▓рд╛рдиреЛрдВ рдкрд░ рдЖрд╡рд╛рдЬрд╛рд╣реА рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЪрдЯреНрдЯрд╛рди рдХреЗ рджреВрд╕рд░реА рддрд░рдл рдХреА рдХреЛрд╢рд┐рдХрд╛рдУрдВ рддрдХ рдЕрднреА рднреА рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдЕрдиреНрдп рд░рд╛рд╕реНрддреЛрдВ рдкрд░ред рдЗрд╕рд▓рд┐рдП, рд╡реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рджреВрд░реА рдкрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред if (neighbor.IsUnderwater) { continue; } if (current.GetEdgeType(neighbor) == HexEdgeType.Cliff) { continue; }
рдЪрдЯреНрдЯрд╛рдиреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд┐рдП рдмрд┐рдирд╛ рджреВрд░рд┐рдпрд╛рдВредunitypackageрдпрд╛рддреНрд░рд╛ рдХрд╛ рдЦрд░реНрдЪ
рд╣рдо рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдФрд░ рдХрд┐рдирд╛рд░реЛрдВ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпреЗ рд╡рд┐рдХрд▓реНрдк рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╣реИрдВред рдХреЛрдИ рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХреБрдЫ рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреВрд░реА рдХреЛ рд╢реНрд░рдо рдпрд╛ рд╕рдордп рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИредрддреЗрдЬ рд╕рдбрд╝рдХреЗрдВ
рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдбрд╝рдХреЛрдВ рдкрд░ рдпрд╛рддреНрд░рд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдФрд░ рддреЗрдЬрд╝ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЗрдП рд╕рдбрд╝рдХреЛрдВ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдХрдо рдЦрд░реНрдЪреАрд▓рд╛ рдмрдирд╛рдПрдВред рдЪреВрдВрдХрд┐ рд╣рдо рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдбрд╝рдХреЛрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЪрд▓рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ 1 рдХреЗ рдмрд░рд╛рдмрд░ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рдЕрдиреНрдп рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ рдмрдврд╝рд╛рдХрд░ 10. рдХрд░ рджреЗрдВрдЧреЗред рдпрд╣ рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рдиреЗ рдкрд░ рддреБрд░рдВрдд рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред int distance = current.Distance; if (current.HasRoadThroughEdge(d)) { distance += 1; } else { distance += 10; } neighbor.Distance = distance;
рдЧрд▓рдд рджреВрд░реА рд╡рд╛рд▓реА рд╕рдбрд╝рдХреЗрдВредрдмреЙрд░реНрдбрд░ рд╕реЙрд░реНрдЯ
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЪреМрдбрд╝рд╛рдИ-рдкрд╣рд▓реА рдЦреЛрдЬ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд▓рд╛рдЧрддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред рд╡рд╣ рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдмрдврд╝рддреА рджреВрд░реА рдХреЗ рдХреНрд░рдо рдореЗрдВ рд╕реАрдорд╛ рдкрд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рдЕрдм рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реИред рд╣рдореЗрдВ рдПрдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдПрдХ рдХрддрд╛рд░ рд╣реИ рдЬреЛ рд╕реНрд╡рдпрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреА рд╣реИред рдХреЛрдИ рдорд╛рдирдХ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╡реЗ рд╕рднреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдВредрд╣рдо рдЕрдкрдиреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрддрд╛рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдХрддрд╛рд░ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реЛрдЧреА Sort
ред List<HexCell> frontier = new List<HexCell>(); cell.Distance = 0; frontier.Add(cell); while (frontier.Count > 0) { yield return delay; HexCell current = frontier[0]; frontier.RemoveAt(0); for (HexDirection d = HexDirection.NE; d <= HexDirection.NW; d++) { тАж neighbor.Distance = distance; frontier.Add(neighbor); } }
рдХреНрдпрд╛ рдореИрдВ ListPool <HexCell> рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛?, , . , , .
рд╕реАрдорд╛ рд╕рд╣реА рд╣реЛ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдХрдХреНрд╖ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕реЗ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЫрдВрдЯрд╛рдИ рдХреЛ рддрдм рддрдХ рд╕реНрдердЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╕реЗрд▓ рдХреЗ рд╕рднреА рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдореИрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реВрдВ, рдЬрдм рддрдХ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд▓реЗрддреЗредрд╣рдо рджреВрд░реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрд╕ рд╕реВрдЪреА рдХреА рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рддреБрд▓рдирд╛ рдХреЛ рдХрд░рддрд╛ рд╣реИред frontier.Add(neighbor); frontier.Sort((x, y) => x.Distance.CompareTo(y.Distance));
рдпрд╣ рдХреНрд░рдордмрджреНрдз рд╡рд┐рдзрд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИ?. , . .
frontier.Sort(CompareDistances); тАж static int CompareDistances (HexCell x, HexCell y) { return x.Distance.CompareTo(y.Distance); }
рд╕реЙрд░реНрдЯ рдХреА рдЧрдИ рд╕реАрдорд╛ рдЕрднреА рднреА рдЧрд▓рдд рд╣реИредрд╕реАрдорд╛ рдЕрджреНрдпрддрди
рдЬрдм рд╣рдордиреЗ рд╕реАрдорд╛ рдХреЛ рдЫрд╛рдБрдЯрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рд╣рдореЗрдВ рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рдиреЗ рд▓рдЧреЗ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╣реИрдВред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрдм рдПрдХ рд╕реЗрд▓ рдХреЛ рд╕реАрдорд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЗрд╕ рд╕реЗрд▓ рдореЗрдВ рд╕рдмрд╕реЗ рдХрдо рджреВрд░реА рддрдп рдХрд░реЗрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рдЙрди рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреЛ рдирд╣реАрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рджреВрд░реА рд╕реМрдВрдкреА рдЧрдИ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд░рд╛рд╕реНрддрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рд╕реАрдорд╛ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрдбрд╝реЛрд╕реА рд╕реЗ рджреВрд░реА рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред HexCell neighbor = current.GetNeighbor(d); if (neighbor == null) { continue; } if (neighbor.IsUnderwater) { continue; } if (current.GetEdgeType(neighbor) == HexEdgeType.Cliff) { continue; } int distance = current.Distance; if (current.HasRoadThroughEdge(d)) { distance += 1; } else { distance += 10; } if (neighbor.Distance == int.MaxValue) { neighbor.Distance = distance; frontier.Add(neighbor); } else if (distance < neighbor.Distance) { neighbor.Distance = distance; } frontier.Sort((x, y) => x.Distance.CompareTo(y.Distance));
рд╕рд╣реА рджреВрд░реАредрдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд╣реА рджреВрд░реА рд╣реИ, рддреЛ рд╣рдо рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рд▓рд╛рдЧрддреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рджреВрд░реА рд╢реБрд░реВ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реАрдорд╛ рд╕реЗ рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдбреЗрдЬреНрдХреНрд╕реНрдЯреНрд░рд╛ рдХреЗ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдирд╛рдо рдПрджреНрдЬрд░ рджрд┐рдЬрдХреНрд╕реНрдЯреНрд░рд╛ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХреЗ рдмрд╛рдж рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИредрдврд▓рд╛рдиреЛрдВ
рд╣рдо рдХреЗрд╡рд▓ рд╕рдбрд╝рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рд▓рд╛рдЧрдд рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рдбрд╝рдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд╕рдкрд╛рдЯ рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреА рд▓рд╛рдЧрдд рдХреЛ 5 рддрдХ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдбрд╝рдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдврд▓рд╛рди рдХреЛ 10 рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред HexEdgeType edgeType = current.GetEdgeType(neighbor); if (edgeType == HexEdgeType.Cliff) { continue; } int distance = current.Distance; if (current.HasRoadThroughEdge(d)) { distance += 1; } else { distance += edgeType == HexEdgeType.Flat ? 5 : 10; }
рдврд▓рд╛рди рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╕рдбрд╝рдХреЗрдВ рд╣рдореЗрд╢рд╛ рддреЗрдЬ рд╣реЛрддреА рд╣реИрдВредрд░рд╛рд╣рдд рджреЗрдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБ
рд╣рдо рд░рд╛рд╣рдд рд╡рд╕реНрддреБрдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдЧрдд рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдИ рдЦреЗрд▓реЛрдВ рдореЗрдВ рд╡рдиреЛрдВ рдХреЛ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдмрд╕ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рднреА рд╕реНрддрд░реЛрдВ рдХреЛ рджреВрд░реА рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдБ рдлрд┐рд░ рд╕реЗ рд╕рдбрд╝рдХ рд╕рдм рдХреБрдЫ рддреЗрдЬ рдХрд░ рджреЗрддреА рд╣реИред if (current.HasRoadThroughEdge(d)) { distance += 1; } else { distance += edgeType == HexEdgeType.Flat ? 5 : 10; distance += neighbor.UrbanLevel + neighbor.FarmLevel + neighbor.PlantLevel; }
рд╕рдбрд╝рдХ рди рд╣реЛрдиреЗ рдкрд░ рд╡рд╕реНрддреБрдПрдВ рдзреАрдореА рд╣реЛ рдЬрд╛рддреА рд╣реИрдВредрджреАрд╡рд╛рд░реЗрдВ
рдЕрдВрдд рдореЗрдВ, рдЪрд▓реЛ рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рд╕рдбрд╝рдХ рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд╣реАрдВ рдЧреБрдЬрд░рддреА рд╣реИ рддреЛ рджреАрд╡рд╛рд░реЛрдВ рдХреЛ рдЖрдВрджреЛрд▓рди рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред if (current.HasRoadThroughEdge(d)) { distance += 1; } else if (current.Walled != neighbor.Walled) { continue; } else { distance += edgeType == HexEdgeType.Flat ? 5 : 10; distance += neighbor.UrbanLevel + neighbor.FarmLevel + neighbor.PlantLevel; }
рджреАрд╡рд╛рд░реЗрдВ рд╣рдореЗрдВ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрддреА рд╣реИрдВ, рдЖрдкрдХреЛ рдЧреЗрдЯ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИредunitypackage