рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджреЛ-рдЖрдпрд╛рдореА рдЧреБрдлрд╛ рдЬрдирд░реЗрдЯрд░

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕рдордп рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рд╣реИрдВ, рдЕрдкрдиреЗ рдЦреЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрддрд░ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдЖрдП рд╣реИрдВред

рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдЖрдк рд╣рд╛рдЗрд▓реИрдВрдбреНрд╕ рдФрд░ рдЧреБрдлрд╛рдУрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдЕрдиреНрдп рдкреАрдврд╝реА рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдПрд▓реНрдбрд╕-рдмреНрд░реЛрдб рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЙрддреНрдкрдиреНрди рдЧреБрдлрд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред

рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдкрд░рд┐рдгрд╛рдо


рд╕рд┐рджреНрдзрд╛рдВрдд


рдкрд╣рд╛рдбрд╝


рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреБрдлрд╛ рдХреЛ рдЦрд░реЛрдВрдЪ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдпрд╣ рдХрд┐рд╕реА рддрд░рд╣ рдмрджрд╕реВрд░рдд рд╣реЛрдЧрд╛? рдЦрд╛рдиреЛрдВ рдХреА рдирд┐рдпреБрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП "рдордВрдЪ" рдХреА рднреВрдорд┐рдХрд╛ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдкрд░реНрд╡рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЪреБрдирд╛ред
рдпрд╣ рдкрд░реНрд╡рдд рдХрд╛рдлреА рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ: рдЖрдЗрдП рд╣рдо рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдФрд░ рдПрдХ рдЪрд░ рдКрдБрдЪрд╛рдИ рд░рдЦрддреЗ рд╣реИрдВ , рд╢реБрд░реВ рдореЗрдВ рджреВрд╕рд░реЗ рдЖрдпрд╛рдо рдореЗрдВ рд╕рд░рдгреА рдХреА рдЖрдзреА рд▓рдВрдмрд╛рдИ рдХреЗ рдмрд░рд╛рдмрд░; рд╣рдо рдмрд╕ рдЗрд╕рдХреЗ рд╕реНрддрдВрднреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╕реНрддрдВрдн рдХреА рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЪрд░ рдКрдВрдЪрд╛рдИ рдорд╛рди рдореЗрдВ рдХреБрдЫ рднрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореМрдХрд╛ рдпрд╛ рдКрдкрд░ рд╕реЗ рдмрджрд▓рдХрд░ред

рдЧреБрдлрд╛


рдЦреБрдж рдХреЛ рдХрд╛рд▓ рдХреЛрдард░реА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЪреБрдирд╛ - рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ - рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдоред рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рднрд▓реЗ рд╣реА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ (рд╢рд╛рдпрдж рджрд╕) рдЪрд░ рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рд╣реИрдВ , рдФрд░ 50 рдХреЗ 50 рдХреЗ рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА, рд╣рдо рдЗрди рдЪрд░ рдХреЛ рдЕрдкрдиреЗ рд╕рд░рдгреА рдХреЗ рднреАрддрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕ = 26 , рдФрд░ рд╡рд╛рдИ = 28ред ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдИ рдмрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ: рд╣рдореЗрдВ рд╢реВрдиреНрдп рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдорд┐рд▓рддреА рд╣реИ

рдЪрд░рдХреАрд╕рдВрдЦреНрдпрд╛тИЧ2

, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрд╛рд░ рддрдХ ; рдФрд░ рдлрд┐рд░, рдмрд╛рд╣рд░ рдЧрд┐рд░рд╛рдП рдЧрдП рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдо рдмрджрд▓рддреЗ рд╣реИрдВ
рд╣рдорд╛рд░реЗ рдЪрд░:

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); //   ground_libray.paint(ground, ref myT); GetComponent<SpriteRenderer>().sprite = Sprite.Create(myT, new Rect(0, 0, ground_size, ground_size), Vector3.zero ); 

рд▓реЗрдХрд┐рди рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╣рдо рдЕрдкрдиреА рдмрдирд╛рд╡рдЯ рдкрд░ рдХрд┐рддрдирд╛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЦреЗрд▓ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдкрд░ рд░рдЦрдХрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

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 рдСрдкрд░реЗрд╢рдиред

рдпрд╣ рд╡рд┐рдзрд┐ рдХреЗрд╡рд▓ рдЦреЗрд▓ рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдореЙрдбреНрдпреВрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ , рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреБрдЫ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ ред

Source: https://habr.com/ru/post/hi416419/


All Articles