рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рдордп рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдХреЗ
рд▓рд┐рдП рдмрд╣реБрдд
рдЖрд▓рд╕реА рд╣реИрдВ, рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрддрд░ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдЖрдП рд╣реИрдВред
рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдк рд╣рд╛рдЗрд▓реИрдВрдбреНрд╕ рдФрд░ рдЧреБрдлрд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдХрдИ рдЕрдиреНрдп рдкреАрдврд╝реА рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо
рдПрд▓реНрдбрд╕-рдмреНрд░реЛрдб рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрддреНрдкрдиреНрди рдЧреБрдлрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:
рд╕рд┐рджреНрдзрд╛рдВрдд
рдкрд╣рд╛рдбрд╝
рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреБрдлрд╛ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдмрджрд╕реВрд░рдд рд╣реЛрдЧрд╛? рдЦрд╛рдиреЛрдВ рдХреА рдирд┐рдпреБрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП
"рдордВрдЪ" рдХреА рднреВрдорд┐рдХрд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдкрд░реНрд╡рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЪреБрдирд╛ред
рдпрд╣ рдкрд░реНрд╡рдд рдХрд╛рдлреА рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ: рдЖрдЗрдП рд╣рдо
рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдФрд░ рдПрдХ
рдЪрд░ рдКрдБрдЪрд╛рдИ рд░рдЦрддреЗ рд╣реИрдВ , рд╢реБрд░реВ рдореЗрдВ рджреВрд╕рд░реЗ рдЖрдпрд╛рдо рдореЗрдВ
рд╕рд░рдгреА рдХреА рдЖрдзреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░; рд╣рдо рдмрд╕ рдЗрд╕рдХреЗ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрддрдВрдн рдХреА рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ
рдЪрд░ рдКрдВрдЪрд╛рдИ рдорд╛рди рдореЗрдВ рдХреБрдЫ рднрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореМрдХрд╛ рдпрд╛ рдКрдкрд░ рд╕реЗ рдмрджрд▓рдХрд░ред
рдЧреБрдлрд╛
рдЦреБрдж рдХреЛ рдХрд╛рд▓ рдХреЛрдард░реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЪреБрдирд╛ -
рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ - рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ (рд╢рд╛рдпрдж рджрд╕) рдЪрд░
рдПрдХреНрд╕ рдФрд░
рд╡рд╛рдИ рд╣реИрдВ , рдФрд░ 50 рдХреЗ 50 рдХреЗ рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА, рд╣рдо рдЗрди рдЪрд░ рдХреЛ рдЕрдкрдиреЗ рд╕рд░рдгреА рдХреЗ рднреАрддрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрдХреНрд╕ = 26 , рдФрд░
рд╡рд╛рдИ = 28ред ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ: рд╣рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдорд┐рд▓рддреА рд╣реИ
, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
рдЪрд╛рд░ рддрдХ ; рдФрд░ рдлрд┐рд░, рдмрд╛рд╣рд░ рдЧрд┐рд░рд╛рдП рдЧрдП рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдмрджрд▓рддреЗ рд╣реИрдВ
рд╣рдорд╛рд░реЗ рдЪрд░:
switch (Random.Range(0, 4)) { case 0: X += 1; break; case 1: X -= 1; break; case 2: Y += 1; break; case 3: Y -= 1; break; }
рдлрд┐рд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЪрд░ рд╣рдорд╛рд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЗ рдмрд╛рд╣рд░ рдЧрд┐рд░ рдЧрдпрд╛ рд╣реИ:
X = X < 0 ? 0 : (X >= 50 ? 49 : X); Y = Y < 0 ? 0 : (Y >= 50 ? 49 : Y);
рдЗрди рд╕рднреА рдЬрд╛рдВрдЪреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдирдП
X рдФрд░
Y рдорд╛рдиреЛрдВ рдореЗрдВ рдХреБрдЫ рдХрд░рддреЗ рд╣реИрдВ
(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: рддрддреНрд╡ рдореЗрдВ рдПрдХ рдЬреЛрдбрд╝реЗрдВ) ред
array[X, Y] += 1;
рдЯреНрд░реЗрдирд┐рдВрдЧ
рд╣рдорд╛рд░реЗ рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рджреГрд╢реНрдп рдХреА рд╕рд╛рджрдЧреА рдХреЗ рд▓рд┐рдП, рдХреНрдпрд╛ рд╣рдо рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВрдЧреЗ? рдореБрдЭреЗ рдЦреБрд╢реА рд╣реИ рдХрд┐ рдЖрдк рдмреБрд░рд╛ рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВ! рд╣рдо рдЗрд╕реЗ
Texture2D рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗред
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд╛рд╣рд┐рдП:
ground_libray рд╡рд╣ рд╣реИ рдЬреЛ рд▓реЗрдЦ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдореЗрдЧрд╛ ред рдпрд╣рд╛рдБ рд╣рдо рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрд╡рдЪреНрдЫ, рдФрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдЧреНрд░рд╛рдЙрдВрдб_рдЬреЗрдирд░реЗрдЯрд░ рд╡рд╣ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЧреНрд░рд╛рдЙрдВрдб_рд▓рд┐рдмреНрд░рд╛рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛
рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЛ
рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рджреЗрдВ рдФрд░ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛:
public static class ground_libray
рдФрд░ рджреВрд╕рд░рд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдХреЗрд╡рд▓ рд╣рдореЗрдВ
рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
SpriteRenderer рдШрдЯрдХ рдХреЗ рд╕рд╛рде, рдордВрдЪ рдкрд░ рдПрдХ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ
рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ?
рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЖрдк
рдмрд╛рдЗрдЯ рдпрд╛
рдЗрдВрдЯ рд╕реЗ рд▓реЗрдХрд░
рдХрд▓рд░ рддрдХ , рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:
рдирдпрд╛ рдкреНрд░рдХрд╛рд░рдЗрд╕ рдмрд╛рдд рдХреЛ рд╣рдо
рдЧреНрд░рд╛рдЙрдВрдб_рд▓рд┐рдмреНрд░рд╛рдп рдореЗрдВ
рд▓рд┐рдЦрддреЗ рд╣реИрдВ ред
[System.Serializable] public class block { public float[] color = new float[3]; public block(Color col) { color = new float[3] { col.r, col.g, col.b }; } }
рдореИрдВ рдЗрд╕реЗ рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдордЭрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕рд░рдгреА рдХреЛ
рдмрдЪрд╛рдиреЗ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЗрд╕реЗ
рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдкреБрдВрдЬрдХ
рдЖрдЗрдП, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рдкрд╣рд╛рдбрд╝ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рдЙрд╕ рд╕реНрдерд╛рди рдХреЛ рдирд╛рдорд┐рдд рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЗрд╕реЗ
рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ ред
рдЧреНрд░рд╛рдЙрдВрдб_рдЧреЗрдВрд╕рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ
, рдореИрдВрдиреЗ рдпрд╣ рд▓рд┐рдЦрд╛:
public int ground_size = 128; ground_libray.block[,] ground; Texture2D myT;
рдЧреНрд░рд╛рдЙрдВрдб_рд╕рд╛рдЗрдЬрд╝ - рд╣рдорд╛рд░реЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдЖрдХрд╛рд░ (рдпрд╛рдиреА, рд╕рд░рдгреА рдореЗрдВ 16384 рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ)ред
ground_libray.block [,] рдЧреНрд░рд╛рдЙрдВрдб - рдпрд╣ рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред
Texture2D myT рд╡рд╣ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдЖрдХрд░реНрд╖рд┐рдд рд╣реЛрдВрдЧреЗред
рдХреИрд╕реЗ рдЪрд▓реЗрдЧрд╛?рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛ - рд╣рдо рдЧреНрд░рд╛рдЙрдВрдб_рдЧреЗрдВрдиреЗрдЯрд░ рд╕реЗ рдХреБрдЫ рдЧреНрд░рд╛рдЙрдВрдб_рд▓рд┐рдмрд░реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХрд╣реЗрдВрдЧреЗ , рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╣рд▓реЗ рдЧреНрд░рд╛рдЙрдВрдб рдлреАрд▓реНрдб рдХреЛ рджреЗ рд░рд╣реЗ рд╣реИрдВред
рдЪрд▓рд┐рдП рдЧреНрд░рд╛рдЙрдВрдб_рд▓рд┐рдмрд░реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ:
рдкрд╣рд╛рдбрд╝ рдмрдирд╛рдирд╛ public static float mount_noise = 0.02f; public static void generate_mount(ref block[,] b) { int h_now = b.GetLength(1) / 2; for (int x = 0; x < b.GetLength(0); x++) for (int y = 0; y < h_now; y++) { b[x, y] = new block(new Color(0.7f, 0.4f, 0)); h_now += Random.value > (1.0f - mount_noise) ? (Random.value > 0.5 ? 1 : -1) : 0; } }
рдФрд░ рддреБрд░рдВрдд рд╣реА рд╣рдо рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ: рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рд╣рдо рдЕрднреА рдЕрдкрдиреЗ рд╕рд░рдгреА
b рдХреЗ рд╕реНрддрдВрднреЛрдВ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ,
рдЙрд╕реА рд╕рдордп рдКрдБрдЪрд╛рдИ рдЪрд░
h_now рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдЖрдзреЗ
128 (64) рдХреЗ рдмрд░рд╛рдмрд░ рдерд╛ред рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХреБрдЫ рдирдпрд╛ рд╣реИ -
рдЖрд░реЛрд╣_рдирд╣реАрдВ ред рдпрд╣ рдЪрд░
h_now рдмрджрд▓рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдЖрдк рдКрдБрдЪрд╛рдИ рдХреЛ рдмрд╣реБрдд рдмрд╛рд░ рдмрджрд▓рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд╛рдбрд╝ рдПрдХ
рдХрдВрдШреА рдХреА рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ред
рд░рдВрдЧрдореИрдВрдиреЗ рддреБрд░рдВрдд рдереЛрдбрд╝рд╛ рднреВрд░рд╛ рд░рдВрдЧ рд╕реЗрдЯ рдХрд┐рдпрд╛, рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╣реЛрдиреЗ рджреЗрдВ - рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЕрдм рдЪрд▓рд┐рдП
ground_generator рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдЗрд╕реЗ
Start рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд┐рдЦреЗрдВ:
ground = new ground_libray.block [ground_size, ground_size]; ground_libray.generate_mount(ref ground);
рд╡реИрд░рд┐рдПрдмрд▓
рдЧреНрд░рд╛рдЙрдВрдб рдХреЛ рд╣рдо
рдПрдХ рдмрд╛рд░ рд╢реБрд░реВ рдХрд░ рджреЗрддреЗ
рд╣реИрдВ рдЬрдм рдЗрд╕реЗ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдЗрд╕реЗ
ground_libray рдкрд░
рднреЗрдЬреЗрдВ ред
рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдкрд╣рд╛рдбрд╝ рдкреИрджрд╛ рдХрд┐рдпрд╛ред
рдореИрдВ рдЕрдкрдирд╛ рдкрд╣рд╛рдбрд╝ рдХреНрдпреЛрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛?
рдЪрд▓реЛ рдЕрдм рд╣рдо рдХреНрдпрд╛ рдорд┐рд▓рд╛!
рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ
рдЧреНрд░рд╛рдЙрдВрдб_рд▓рд┐рдмреНрд░рд╛рдп рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐
рд▓рд┐рдЦреЗрдВрдЧреЗ :
рдбреНрд░рд╛рдЗрдВрдЧ public static void paint(block[,] b, ref Texture2D t) { t = new Texture2D(b.GetLength(0), b.GetLength(1)); t.filterMode = FilterMode.Point; for (int x = 0; x < b.GetLength(0); x++) for (int y = 0; y < b.GetLength(1); y++) { if (b[x, y] == null) { t.SetPixel(x, y, new Color(0, 0, 0, 0)); continue; } t.SetPixel(x, y, new Color( b[x, y].color[0], b[x, y].color[1], b[x, y].color[2] ) ); } t.Apply(); }
рдпрд╣рд╛рдВ рд╣рдо рдЕрдм рдХрд┐рд╕реА рдХреЛ рдЕрдкрдирд╛ рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рджреЗрдВрдЧреЗ, рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕рдХреА рдПрдХ рдкреНрд░рддрд┐ рджреЗрдВрдЧреЗ
(рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╢рдмреНрдж рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░рдг, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рддрд┐ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рджрд┐рдпрд╛) ред рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐
рдХреЛ рдЕрдкрдирд╛
Texture2D рднреА рджреЗрдВрдЧреЗред
рдкрд╣рд▓реА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: рд╣рдо рдЕрдкрдиреА рдмрдирд╛рд╡рдЯ
рдХреНрд╖реЗрддреНрд░ рдХреЗ
рдЖрдХрд╛рд░ рдХреЛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░
рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ ред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдкреВрд░реЗ рд╕рд░рдгреА рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рд╣реИ
(рд╡рд░реНрдЧ рдХреЛ рдЖрд░рдВрднреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) - рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╡рд░реНрдЧ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рддрддреНрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрдЪрд╛рдпрд╛ рд╣реИред
рдФрд░, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЬрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо
ground_generator рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
ground = new ground_libray.block [ground_size, ground_size]; ground_libray.generate_mount(ref ground);
рд▓реЗрдХрд┐рди рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреА рдмрдирд╛рд╡рдЯ рдкрд░ рдХрд┐рддрдирд╛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЦреЗрд▓ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рд░рдЦрдХрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
SpriteRenderer Texture2D рдХреЛ рдХрд╣реАрдВ рднреА рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рд╣рдореЗрдВ рдЗрд╕ рдмрдирд╛рд╡рдЯ рд╕реЗ
рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдирд╛рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИ -
Sprite.Create (
рдмрдирд╛рд╡рдЯ ,
рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдВ рдХреЛрдиреЗ рдХреЗ
рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдФрд░ рдКрдкрд░реА рджрд╛рдПрдВ ,
рдЕрдХреНрд╖ рдХрд╛ рд╕рдордиреНрд╡рдп )ред
рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдирд╡реАрдирддрдо рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдо рдмрд╛рдХреА рдХреЛ
рдкреЗрдВрдЯ рд╡рд┐рдзрд┐ рдХреЗ рдКрдкрд░ рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ!
рдореЗрд░рд╛
рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЦреЗрддреЛрдВ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЧреБрдлрд╛рдУрдВ рд╕реЗ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо
ground_libray рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рднреА рдмрдирд╛рдПрдВрдЧреЗред рдореИрдВ рддреБрд░рдВрдд рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
ref block[,] b - . int thick - int size - Color outLine -
рдЧреБрдлрд╛ public static void make_cave(ref block[,] b, int thick, int size, Color outLine) { int xNow = Random.Range(0, b.GetLength(0)); int yNow = Random.Range(0, b.GetLength(1) / 2); for (int i = 0; i < size; i++) { b[xNow, yNow] = null; make_thick(ref b, thick, new int[2] { xNow, yNow }, outLine); switch (Random.Range(0, 4)) { case 0: xNow += 1; break; case 1: xNow -= 1; break; case 2: yNow += 1; break; case 3: yNow -= 1; break; } xNow = xNow < 0 ? 0 : (xNow >= b.GetLength(0) ? b.GetLength(0) - 1 : xNow); yNow = yNow < 0 ? 0 : (yNow >= b.GetLength(1) ? b.GetLength(1) - 1 : yNow); } }
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЕрдкрдиреЗ рдЪрд░
X рдФрд░
Y рдШреЛрд╖рд┐рдд рдХрд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдХреНрд░рдорд╢рдГ
xNow рдФрд░
yNow рдХрд╣рд╛ред
рдкрд╣рд▓рд╛, рдЕрд░реНрдерд╛рддреН
xNow , рдкрд╣рд▓реЗ рдЖрдпрд╛рдо рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдХрд╛рд░ рддрдХ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдФрд░ рджреВрд╕рд░рд╛ -
yNow - рднреА рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ: рд╢реВрдиреНрдп рд╕реЗ рджреВрд╕рд░реЗ рдЖрдпрд╛рдо рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдордзреНрдп рддрдХред
рдХреНрдпреЛрдВ? рд╣рдо рдЕрдкрдиреЗ рдкрд╣рд╛рдбрд╝ рдХреЛ рдмреАрдЪ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рдореМрдХрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рдЫрдд" рддрдХ рдмрдврд╝реЗрдЧрд╛
рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИ ред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВ рд╣рд╡рд╛ рдореЗрдВ рдЧреБрдлрд╛рдПрдВ рдмрдирд╛рдирд╛ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рдорд╛рдирддрд╛ред
рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рд▓реВрдк рддреБрд░рдВрдд рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЯрд┐рдХ рдХреА рд╕рдВрдЦреНрдпрд╛
рдЖрдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЯрд┐рдХ рд╣рдо
xNow рдФрд░
yNow рдкрджреЛрдВ рдкрд░ рдлрд╝реАрд▓реНрдб рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдпрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ
(рдлрд╝реАрд▓реНрдб рдЕрдкрдбреЗрдЯ рдХреЛ рдЕрдВрдд рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдЖрдкрдХреЛ рдЕрдВрддрд░ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реЛрдЧрд╛)рдПрдХ
рдореЗрдХ_рдерд┐рдХ рд╡рд┐рдзрд┐ рднреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ
рдХреНрд╖реЗрддреНрд░ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ
рд╣реИрдВ ,
рдЧреБрдлрд╛ рд╕реНрдЯреНрд░реЛрдХ рдХреА
рдЪреМрдбрд╝рд╛рдИ, рдЧреБрдлрд╛ рдХреА
рд╡рд░реНрддрдорд╛рди рдЕрджреНрдпрддрди рд╕реНрдерд┐рддрд┐ рдФрд░
рд╕реНрдЯреНрд░реЛрдХ рдХрд╛ рд░рдВрдЧ :
рд╕реНрдЯреНрд░реЛрдХ static void make_thick (ref block[,] b, int t, int[] start, Color o) { for (int x = (start[0] - t); x < (start[0] + t); x++) { if (x < 0 || x >= b.GetLength(0)) continue; for (int y = (start[1] - t); y < (start[1] + t); y++) { if (y < 0 || y >= b.GetLength(1)) continue; if (b[x, y] == null) continue; b[x, y] = new block(o); } } }
рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд
рд╢реБрд░реВ рд╕рдордиреНрд╡рдп рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рджреВрд░реА рдкрд░
рдЯреА рд░рдВрдЧ
рдУ рдореЗрдВ рд╕рднреА рдмреНрд▓реЙрдХреЛрдВ repaints - рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ!
рдЕрдм рдЗрд╕ рд▓рд╛рдЗрди рдХреЛ рд╣рдорд╛рд░реЗ
рдЧреНрд░рд╛рдЙрдВрдб_рдЧреЗрдЯрд░ рд╕реЗ
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ :
ground_libray.make_cave(ref ground, 2, 10000, new Color(0.3f, 0.3f, 0.3f));
рдЖрдк рд╣рдорд╛рд░реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ
ground_generator рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

рдЧреБрдлрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ ...- рдЕрдзрд┐рдХ рдЧреБрдлрд╛рдПрдБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдореЗрдХ_рдХрд╡реЗ рд╡рд┐рдзрд┐ рдХреЛ рдХрдИ рдмрд╛рд░ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдПрдХ рд▓реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ)
- рдЖрдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рдЧреБрдлрд╛ рдХрд╛ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдмрдврд╝рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдпрд╣ рдмрдбрд╝рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ
- рдореЛрдЯреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдмрджрд▓рдХрд░, рдЖрдк рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХрд░рддреЗ рд╣реИрдВ:
рдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ 3 рд╣реИ, рддреЛ 3 рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ 36 рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдЖрдХрд╛рд░ = 40,000 рдХреЗ рд╕рд╛рде , рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ 36 * 40,000 = 1440000 рд╣реЛрдЧреА
рдЧреБрдлрд╛ рд╕реБрдзрд╛рд░

рдХреНрдпрд╛ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рджреГрд╢реНрдп рдореЗрдВ рдЧреБрдлрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИ? рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг
(рд╢рд╛рдпрдж рдЖрдк рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕реЛрдЪрддреЗ рд╣реИрдВ) ред
рдХреБрдЫ
# 4d4d4d рдХреЗ рд╕рдорд╛рд╡реЗрд╢рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ
ground_libray рдореЗрдВ
рд▓рд┐рдЦреЗрдВрдЧреЗ :
рдХреНрд▓реАрдирд░ public static void clear_caves(ref block[,] b) { for (int x = 0; x < b.GetLength(0); x++) for (int y = 0; y < b.GetLength(1); y++) { if (b[x, y] == null) continue; if (solo(b, 2, 13, new int[2] { x, y })) b[x, y] = null; } }
рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдордЭрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐
рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ:
static bool solo (block[,] b, int rad, int min, int[] start) { int cnt = 0; for (int x = (start[0] - rad); x <= (start[0] + rad); x++) { if (x < 0 || x >= b.GetLength(0)) continue; for (int y = (start[1] - rad); y <= (start[1] + rad); y++) { if (y < 0 || y >= b.GetLength(1)) continue; if (b[x, y] == null) cnt += 1; else continue; if (cnt >= min) return true; } } return false; }
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ, рд╣рдорд╛рд░реЗ
рдХреНрд╖реЗрддреНрд░ ,
рдмрд┐рдВрджреБ рд╕рддреНрдпрд╛рдкрди рдХреА
рддреНрд░рд┐рдЬреНрдпрд╛ ,
"рд╡рд┐рдирд╛рд╢ рд╕реАрдорд╛" рдФрд░
рдмрд┐рдВрджреБ рдХреЗ
рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
int cnt рд╡рд░реНрддрдорд╛рди "рдереНрд░реЗрд╢реЛрд▓реНрдб" рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рд╣реИ
рдЕрдЧрд▓реЗ рджреЛ рдЪрдХреНрд░ рд╣реИрдВ рдЬреЛ рдЙрд╕ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рдордиреНрд╡рдп рдХреЗ рд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХреА рдЬрд╛рддреА рд╣реИ ред рдпрджрд┐ рдХреЛрдИ рдЦрд╛рд▓реА рдмрд┐рдВрджреБ рд╣реИ , рддреЛ рд╣рдо рдПрдХ рдХреЛ cnt рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, "рд╡рд┐рдирд╛рд╢ рдХреА рджрд╣рд▓реАрдЬ" рдкрд░ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░ рд╣рдо рд╕рдЪреНрдЪрд╛рдИ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрддреЗ рд╣реИрдВ - рдмрд┐рдВрджреБ рдЕрддрд┐рд░реЗрдХ рд╣реИ ред рдЕрдиреНрдпрдерд╛, рд╣рдо рдЙрд╕реЗ рд╕реНрдкрд░реНрд╢ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рдореИрдВрдиреЗ 13 рдЦрд╛рд▓реА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд╛рд╢ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рд╣реИ, рдФрд░ рд╕рддреНрдпрд╛рдкрди рддреНрд░рд┐рдЬреНрдпрд╛ 2 рд╣реИ (рдЕрд░реНрдерд╛рдд, рдпрд╣ 24 рдмрд┐рдВрджреБрдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛, рдХреЗрдВрджреНрд░реАрдп рдПрдХ рд╕рд╣рд┐рдд рдирд╣реАрдВ)
рдЙрджрд╛рд╣рд░рдгрдпрд╣ рдХреЗрд╡рд▓
9 рдЦрд╛рд▓реА рдмрд┐рдВрджреБ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рд░рд╣реЗрдЧрд╛ред

рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдирд╣реАрдВ рдерд╛ - рд▓рдЧрднрдЧ
14 рдЦрд╛рд▓реА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг:
рд╣рдо рдкреВрд░реЗ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╡реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ
рдЧреНрд░рд╛рдЙрдВрдб_рдЧреЗрдВрдиреЗрдЯрд░ рдореЗрдВ рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
ground_libray.clear_caves(ref ground);
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрдг рдмрд╕ рдЪрд▓реЗ рдЧрдПредрдХреБрдЫ рд░рдВрдЧ рдЬреЛрдбрд╝реЗрдВ
рд╣рдорд╛рд░рд╛ рдкрд╣рд╛рдбрд╝ рдмрд╣реБрдд рдиреАрд░рд╕ рджрд┐рдЦрддрд╛ рд╣реИ, рдореБрдЭреЗ рдпрд╣ рдЙрдмрд╛рдК рд▓рдЧрддрд╛ рд╣реИред
рдЪрд▓реЛ рдХреБрдЫ рд░рдВрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред
Level_paint рдкрджреНрдзрддрд┐ рдХреЛ
рдЧреНрд░рд╛рдЙрдВрдб_рд▓рд┐рдмреНрд░рд╛рдп рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
рдкрд╣рд╛рдбрд╝реЛрдВ рдкрд░ рдЪрд┐рддреНрд░рдХрд╛рд░реА public static void level_paint(ref block[,] b, Color[] all_c) { for (int x = 0; x < b.GetLength(0); x++) { int lvl_div = -1; int counter = 0; int lvl_now = 0; for (int y = b.GetLength(1) - 1; y > 0; y--) { if (b[x, y] != null && lvl_div == -1) lvl_div = y / all_c.Length; else if (b[x, y] == null) continue; b[x, y] = new block(all_c[lvl_now]); lvl_now += counter >= lvl_div ? 1 : 0; lvl_now = (lvl_now >= all_c.Length) ? (all_c.Length - 1) : lvl_now; counter = counter >= lvl_div ? 0 : (counter += 1); } } } </ <cut />source> . , , . , . <b>Y </b> , . </spoiler> <b>ground_generator </b> : <source lang="cs"> ground_libray.level_paint(ref ground, new Color[3] { new Color(0.2f, 0.8f, 0), new Color(0.6f, 0.2f, 0.05f), new Color(0.2f, 0.2f, 0.2f), });
рдореИрдВрдиреЗ рдХреЗрд╡рд▓ 3 рд░рдВрдЧ рдЪреБрдиреЗ:
рд╣рд░рд╛ ,
рдЧрд╣рд░рд╛ рд▓рд╛рд▓ рдФрд░
рдЧрд╣рд░рд╛ рднреВрд░рд╛ ред
рдмреЗрд╢рдХ, рдЖрдк рд░рдВрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рдирд┐рдХрд▓рд╛:
рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд░рдВрдЧреЛрдВ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдмреЗрддрд░рддреАрдм рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕рдЦреНрдд рд╣реИ, рд╣рдо рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ
ground_libray рдореЗрдВ
рд▓рд┐рдЦреЗрдВрдЧреЗ :
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рдВрдЧ public static float color_randomize = 0.1f; static float crnd { get { return Random.Range(1.0f - color_randomize, 1.0f + color_randomize); } }
рдФрд░ рдЕрдм
level_paint рдФрд░
make_thick рдореЗрдердб рдореЗрдВ, рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдЬрд╣рд╛рдБ рд╣рдо рд░рдВрдЧ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
make_thick рдореЗрдВ :
b[x, y] = new block(o);
рд╣рдо рдЗрд╕реЗ рд▓рд┐рдЦреЗрдВрдЧреЗ:
b[x, y] = new block(o * crnd);
рдФрд░
level_paint рдореЗрдВ b[x, y] = new block(all_c[lvl_now] * crnd);
рдЕрдВрдд рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
рдХрдорд┐рдпреЛрдВ
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 1024 рд╕реЗ 1024 рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИ, рд╣рдореЗрдВ 24 рдЧреБрдлрд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреА рдореЛрдЯрд╛рдИ 4 рд╣реЛрдЧреА, рдФрд░ рдЖрдХрд╛рд░ 80,000 рд╣реИред
1024 * 1024 + 24 * 64 * 80,000 =
5,368,832,000,000 рдСрдкрд░реЗрд╢рдиред
рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЦреЗрд▓ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдЙрддреНрдкрдиреНрди
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ
, рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреБрдЫ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЙрддреНрдкрдиреНрди
рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ ред