рдПрдХрддрд╛ + рдбреЙрдЯреНрд╕ рдкрд░ рд╕реИрдХрдбрд╝реЛрдВ рд╣рдЬрд╛рд░реЛрдВ рдХрдгреЛрдВ рдХрд╛ рднреМрддрд┐рдХ рдЕрдиреБрдХрд░рдг

рдПрдХ рдмрд┐рдВрджреБ рдкрд░, рдПрдХ рд╕рд╛рдЗрдЯ рдкрд░ рд╡рд░реНрд▓реНрдб рд╡рд╛рдЗрдб рд╡реЗрдм рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдШреВрдорддреЗ рд╣реБрдП, рдореБрдЭреЗ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЬреЗрдПрд╕ рддрддреНрд╡ рдорд┐рд▓рд╛ - рдПрдХ рдорд╛рдЙрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдбрд╝рддреЗ рд╣реБрдП рдХрдгреЛрдВ рд╕реЗ рдмрдирд╛ рдПрдХ рдЪрд┐рддреНрд░ред рдПрдХрддрд╛ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдФрд░ рдЗрдВрдЬрди рдХреЗ рдмрд╛рд╣рд░ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рди рдирд┐рдЪреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереАред рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рддрдХрдиреАрдХреА рд╕рдорд╛рдзрд╛рди рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЫрд╡рд┐

рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдПрдиреАрдореЗрд╢рди


рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдХрдг рднреМрддрд┐рдХреА рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ;
  • рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдкрд░ рд╕реНрдерд┐рддрд┐ рдЧрдгрдирд╛ рдХреА рдЗрд╖реНрдЯрддрдо рдЧрддрд┐ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ;
  • рд╕реНрдХреНрд░реАрди рдкрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдгреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЪреБрдиреЗрдВред

рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди


рд╡рд╛рдВрдЫрд┐рдд рдХрдг рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рд╕рд┐рджреНрдзрд╛рдВрдд рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рд╕реЗ рджреВрд░реА рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛, рдорд╛рдЙрд╕ рдХрд░реНрд╕рд░ рд╕реЗ "рджреВрд░ рдЙрдбрд╝рдиреЗ" рдХреА рдЗрдЪреНрдЫрд╛ рдФрд░ рдЖрдВрджреЛрд▓рди рдХреА рднрд┐рдЧреЛрдирд╛ред рд╣рдореЗрдВ рд╕рдЯреАрдХ рднреМрддрд┐рдХ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдФрд░ рдлрд╝рд╛рд░реНрдореБрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдг рдЬрд╛рдирдмреВрдЭрдХрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВрдЧреЗред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рджреНрд░рд╡реНрдпрдорд╛рди рдХреЛ рд╕рднреА рд╕реВрддреНрд░реЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ - рд╣рдо рдЗрд╕реЗ рдПрдХрд▓ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реИрдВред

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреЛ рдХрдо рдХрд░рдирд╛


рдХрдг рдХреЛ тАЛтАЛрдЙрд╕рдХреА рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реМрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣реБрдХ рдХрд╛ рдирд┐рдпрдо рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ : рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдд рдмрд▓ рдЙрд╕рдХреЗ рд▓рд┐рдП рджреВрд░реА рдХреЗ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реЛрдЧрд╛ред рдХрдг рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╕реЗ рджреЛ рдЧреБрдирд╛ рджреВрд░ рдЙрдбрд╝ рдЧрдпрд╛ - рджреЛ рдмрд╛рд░ рдордЬрдмреВрдд рдпрд╣ "рдкреАрдЫреЗ" рдЦреАрдВрдЪрддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред

рдХрд░реНрд╕рд░ рд╕реЗ рджреВрд░реА


рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдгреЛрдВ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдХрд░реНрд╕рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдЦреБрдж рдХреЛ рд╢реБрд░реБрдЖрддреА рд╕реНрдерд┐рддрд┐ рд╕реЗ "рдкреБрд╢" рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдореИрдВрдиреЗ рдЗрд╕ рд╕рдВрдкрд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдкрд░реАрдд рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдЧреБрд░реБрддреНрд╡рд╛рдХрд░реНрд╖рдг рд▓рд┐рдпрд╛ : рдХрдгреЛрдВ рдХреЛ рдорд╛рдЙрд╕ рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рдХрдг рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЗ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЖрдиреБрдкрд╛рддрд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдмрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░рд╕реНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдХрдг рд╕реЗ рдХрдг рддрдХ рд╡реЗрдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редрдПрдл=-рд╕реА/рдЖрд░2 , рдЬрд╣рд╛рдВрд╕реА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИ рдЬреЛ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдХреНрд╖реАрдгрди


рдпрджрд┐ рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ рджреЛ рдкрд┐рдЫрд▓реЗ рд╕реВрддреНрд░реЛрдВ рддрдХ рд╕реАрдорд┐рдд рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдпрд╛рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрдг рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рджреЛрд▓рди рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕реЗ рдореЙрдбрд▓ рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдКрд░реНрдЬрд╛ рдЦреЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХреНрд╖реАрдгрди рдХреЛ рдорд╛рдзреНрдпрдо рдХреЗ рдЪрд┐рдкрдЪрд┐рдкрд╛ рдкреНрд░рддрд┐рд░реЛрдз рдХреЗ рдмрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╕реНрдЯреЛрдХреНрд╕ рдХрд╛рдиреВрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ , рдХрдг рд╡реЗрдЧ рдХреЗ рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдЖрдиреБрдкрд╛рддрд┐рдХ рд╣реИ рдФрд░ рдЧрддрд┐ рдХреЗ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИред рд╣рдо рдЗрд╕ рд╕реВрддреНрд░ рдХреА рдкреНрд░рдпреЛрдЬреНрдпрддрд╛ рдкрд░ рд▓рдЧрд╛рдП рдЧрдП рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо рднреМрддрд┐рдХ рдмрд╛рддрдЪреАрдд рдХреА рдкреВрд░реНрдг рд╕рдЯреАрдХрддрд╛ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ред

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


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд╕рдордп рдкрд░ рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдХреНрд╖рдг рдореЗрдВ рдХрдг рдкрд░ рдЕрднрд┐рдирдп рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрд▓ рдХрд╛ рд╕реВрддреНрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

рдПрдлтЖТрд░реЛрдВ=рд╕реАрдП*(рдПрдХреНрд╕тЖТ-рдПрдХреНрд╕тЖТ0)-рд╕реАрдЖрд░||рдПрдХреНрд╕тЖТ-рдПрдХреНрд╕тЖТрдЖрд░||2*рдПрдХреНрд╕тЖТ-рдПрдХреНрд╕тЖТрдЖрд░||рдПрдХреНрд╕тЖТ-рдПрдХреНрд╕тЖТрдЖрд░||-рд╕реАрдШ*vтЖТ,


рдХрд╣рд╛рдБ рдкреЗ рдПрдХреНрд╕,v- рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░ рдХрдг рд╡реЗрдЧ,рдПрдХреНрд╕0 рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд┐рддрд┐ рд╣реИ,рдПрдХреНрд╕рдЖрд░ - рдХрд░реНрд╕рд░ рд╕реНрдерд┐рддрд┐,рд╕реАрдП,рд╕реАрдЖрд░,рд╕реАрдШ рдХреНрд░рдорд╢рдГ рдЖрдХрд░реНрд╖рдг, рдкреНрд░рддрд┐рдХрд░реНрд╖рдг рдФрд░ рдХреНрд╖реАрдгрди рдХреЗ рдЧреБрдгрд╛рдВрдХ рд╣реИрдВред

рдПрдХ рдФрд░ рдПрдиреАрдореЗрд╢рди


рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░


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

рдбреЙрдЯреНрд╕ рдПрдХрддрд╛ рдЗрдВрдЬрди рдХрд╛ рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╣рд╛рд▓рд┐рдпрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИ, рдПрдХ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдвреЗрд░ рдЬреЛ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред Habr├й рдкрд░ DOTS рдореЗрдВ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИ ред рдИрд╕реАрдПрд╕ , рдЬреЙрдмреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рд▓ рдкреИрдЯрд░реНрди рдФрд░ рдмрд░реНрд╕реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж , рдбреАрдУрдЯреАрдПрд╕ рддреЗрдЬреА рд╕реЗ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдкреИрд░ рдореЗрдВ рдПрдХ рд╢реЙрдЯ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

рдИрд╕реАрдПрд╕ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рд╛рд░ рдХреЛрдб рдХреЛ рдШрдЯрдХреЛрдВ ( рдШрдЯрдХреЛрдВ ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреЛ рд░рд╛рдЬреНрдп, рд╕рд┐рд╕реНрдЯрдо ( рд╕рд┐рд╕реНрдЯрдо ) рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдШрдЯрдХреЛрдВ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рдмрд╛рддрдЪреАрдд рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдПрдВрдЯрд┐рдЯреАрдЬ - рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд┐рд╕рдореЗрдВ рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред

рдЕрд╡рдпрд╡


рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

//    ( )
public struct AttractorPosData : IComponentData
{
   public float2 Value;
}

//  
public struct VelocityData : IComponentData
{
   public float2 Value;
} 

//  
public struct AccelerationData : IComponentData
{
   public float2 Value;
}

//   
public struct ParticleData : IComponentData 
{
    public Color color;
    public Matrix4x4 matrix;
}

рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЬрд╛рдПрдВ:

//   
[UpdateBefore(typeof(MoveSystem))]
public class VelocityUpdateSystem : SystemBase
{
    protected override void OnUpdate()
    {
        var time = Time.DeltaTime;
        Entities.ForEach((ref VelocityData velocity, 
                in AccelerationData acceleration) =>
            {
                velocity.Value += time * acceleration.Value;
            })
            .ScheduleParallel();
    }
}

//   
public class MoveSystem : SystemBase
{
    protected override void OnUpdate()
    {
        var time = Time.DeltaTime;
        Entities.ForEach((ref Translation t, in VelocityData velocity) =>
            {
                t.Value.xy += time * velocity.Value;
            })
            .ScheduleParallel();
    }
}

рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

[UpdateBeforeAttribute]
[UpdateAfterAttribute]

рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдкреНрд░рдгрд╛рд▓реА рддреНрд╡рд░рдг рдЕрджреНрдпрддрди рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдЧреА, рдЬреЛ рд╡реНрдпреБрддреНрдкрдиреНрди рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИ :

[UpdateBefore(typeof(VelocityUpdateSystem))]
public class AccelerationSystem : SystemBase
{
    protected override void OnUpdate()
    {
        float2 repulsorPos = Globals.Repulsor.Position;

        //   
        var attractionPower = Globals.SettingsHolder.SettingsModel.Attraction;
        //  
        var repulsionPower = Globals.SettingsHolder.SettingsModel.Repulsion;
        //  
        var dampingPower = Globals.SettingsHolder.SettingsModel.Damping;
        Entities.ForEach((
                ref AccelerationData acceleration, 
                in AttractorPosData attractorPos, 
                in Translation t,
                in VelocityData velocity) =>
            {
                //  
                var attraction = (attractorPos.Value - t.Value.xy) * attractionPower;

                var distSqr = math.distancesq(repulsorPos, t.Value.xy);
                //  
                var repulsion = -math.normalizesafe(repulsorPos - t.Value.xy) 
                    / distSqr * repulsionPower;

                //  
                var damping = -velocity.Value * dampingPower;

                acceleration.Value = attraction + repulsion + damping;
            })
            .ScheduleParallel();
    }
}

рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛


рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдгреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕рднреА рдХреЗ рд▓рд┐рдП рдЖрдк рджреЛ рдмрд╣реБрднреБрдЬ рдХреЗ рд╕рдорд╛рди рд╡рд░реНрдЧ рдЬрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдПрдХ рд╣реА рд╕рд╛рдордЧреНрд░реА, рдЬреЛ рдПрдХ рдбреНрд░реЙ рдХреЙрд▓ рдореЗрдВ рдЙрди рд╕рднреА рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИ, рдпрджрд┐ рдПрдХ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ " рд▓реЗрдХрд┐рди ": рд╕рднреА рдХрдгреЛрдВ, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдВрдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдиреНрдпрдерд╛ рдкрд░рд┐рдгрд╛рдореА рддрд╕реНрд╡реАрд░ рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реЛрдЧреАред

рдорд╛рдирдХ рдпреВрдирд┐рдЯреА рд╢реИрдбрд░ "рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ / рдбрд┐рдлрд╛рд▓реНрдЯ" рдЬреАрдкреАрдУ рдЗрдВрд╕реНрдЯреЗрдВрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрд╕рдорд╛рди рд╕реНрдкреНрд░рд╛рдЗрдЯреНрд╕ рдФрд░ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддрд╛ рд╣реИ , рдЙрдиреНрд╣реЗрдВ рдПрдХ рдбреНрд░реЙ рдХреЙрд▓ рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдмрдирд╛рд╡рдЯ рдФрд░ рд░рдВрдЧ рдХрд╛ рд▓рд┐рдВрдХ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ ECS рд╕реЗ рд╣рдорд╛рд░реА рдкрд╣реБрдБрдЪ рдирд╣реАрдВ рд╣реИред

рд╕рдорд╛рдзрд╛рди Graphics.DrawMeshInstanced рдореЗрдердб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рд╣реА рдЬреАрдкреАрдУ рдЗрдВрд╕реНрдЯреЗрдВрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдордЧреНрд░реА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреНрд░реЙ рдХреЙрд▓ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдПрдХ рдЬрд╛рд▓ рдЦреАрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ:

[UpdateAfter(typeof(TrsMatrixCalculationSystem))]
public class SpriteSheetRenderer : SystemBase
{
    // DrawMeshInstanced     1023    
    private const int BatchCount = 1023;
    //   
    private readonly List<Matrix4x4> _matrixList = new List<Matrix4x4>(BatchCount);
    //  
    private readonly List<Vector4> _colorList = new List<Vector4>(BatchCount);

    protected override void OnUpdate()
    {
        var materialPropertyBlock = new MaterialPropertyBlock();
        var quadMesh = Globals.Quad;
        var material = Globals.ParticleMaterial;

        //        
        //   
        var shaderPropertyId = Shader.PropertyToID("_Color");

        var entityQuery = GetEntityQuery(typeof(ParticleData));
        //   ,   ParticleData
        var animationData = 
                   entityQuery.ToComponentDataArray<ParticleData>(Allocator.TempJob);
        var layer = LayerMask.NameToLayer("Particles");

        for (int meshCount = 0; 
              meshCount < animationData.Length; 
              meshCount += BatchCount)
        {
            var batchSize = math.min(BatchCount, animationData.Length - meshCount);
            _matrixList.Clear();
            _colorList.Clear();

            for (var i = meshCount; i < meshCount + batchSize; i++)
            {
                _matrixList.Add(animationData[i].matrix);
                _colorList.Add(animationData[i].color);
            }

            materialPropertyBlock.SetVectorArray(shaderPropertyId, _colorList);
            Graphics.DrawMeshInstanced(
                quadMesh,
                0,
                material,
                _matrixList,
                materialPropertyBlock,
                ShadowCastingMode.Off, false, layer);
        }

        animationData.Dispose();
    }
}

рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдВрдХреНрд░рдордг рдореИрдЯреНрд░рд┐рд╕ рдФрд░ рдЙрди рднреМрддрд┐рдХ рдЧреБрдгреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡рд┐рд╡рд┐рдз рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, TrsMatrixCalacleSystem рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдгрд╛рд▓реА рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд░рдордг рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рддреА рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╕рд░рд▓ рд▓рдЧрддреА рд╣реИ:

[UpdateAfter(typeof(MoveSystem))]
public class TrsMatrixCalculationSystem : SystemBase
{
    protected override void OnUpdate()
    {
        //   scale   
        var scale = Globals.SettingsHolder.SettingsModel.ParticlesScale;
        Entities.ForEach((ref ParticleData data, in Translation translation) =>
            {
                data.matrix = Matrix4x4.TRS(translation.Value, Quaternion.identity,
                    new Vector3(scale, scale, scale));
            })
            .ScheduleParallel();
    }
}

46,000 рдХрдгреЛрдВ рдХрд╛ рдПрдиреАрдореЗрд╢рди


рдкреНрд░рджрд░реНрд╢рди


рдпрд╣ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ рдХрд┐ (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреЗрд╢рдХ, рд╕реМрдВрджрд░реНрдп рд╕рдВрддреБрд╖реНрдЯрд┐) рдпрд╣ рд╕рдм рдХреИрд╕реЗ рд╣реБрдЖред рдПрдХрддрд╛ рдореЗрдВ, рдЗрд╕ рд╕рдордп рджреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдмреИрдХреЗрдВрдб ( рд╕реАрдПрд▓рдЖрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди ) рд╕реЗ рдЪреБрдирдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ : рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ рдореЛрдиреЛ рдФрд░ рдПрдХрддрд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдПрдХ рдЕрдзрд┐рдХ рдЖрдзреБрдирд┐рдХ рд╕рдорд╛рдзрд╛рди - IL2CPP ред

рдЗрди рджреЛ рд░рдирдЯрд╛рдЗрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:
рд╕реНрдХреНрд░реАрди рдкрд░ рдХрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛рдФрд╕рдд рдлреНрд░реЗрдо рджрд░, рдореЛрдиреЛрдФрд╕рдд рдлреНрд░реЗрдо рджрд░, IL2CPP
50,000128255
100,00066130
200,0003157
рдкреАрд╕реА рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ:
QHD 2560x1440
рдЗрдВрдЯреЗрд▓ рдХреЛрд░ i5-9600K
16 рдЬреАрдмреА рд░реИрдо
MSI GeForce RTX 2080 рд╕реБрдкрд░ рд╡реЗрдВрдЯ рдПрдХреНрд╕рдпреВрдПрд╕ 8.0 рдЬреАрдмреА


160,000 рдХрдг

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рдЗрд╕ рдЧреЛрд▓рд╛рдХрд╛рд░ рд╡реИрдХреНрдпреВрдо рдкреНрд░рдпреЛрдЧ рдореЗрдВ, IL2CPP рдЖрдЙрдЯрдкрд░рдлреЙрд░реНрдореЛ рдореЛрдиреЛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЛ рдмрд╛рд░ред

рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдлреНрд░реЗрдо рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рднреА рд╕рдордп рд░реЗрдВрдбрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ "рдореБрдХреНрдд" рд╣реИ:

рдПрдХрддрд╛ рд╕рдВрдкрд╛рджрдХ


рдмрд┐рд▓реНрдб

рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп рд░рдВрдЧ рд╕реЗ рд╡реЗрдХреНрдЯрд░ 4 рдореЗрдВ рд░рдВрдЧ рдмрджрд▓рдиреЗ рдФрд░ рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдЦрд░реНрдЪ рд╣реЛрддрд╛ рд╣реИред ()ред рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рд╣рдо рдХрдг рдкреАрдврд╝реА рдХреЗ рдХреНрд╖рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╕реНрдердЧрд┐рдд рдХрд░ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд░рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ:

// 
public struct ParticleData : IComponentData
{
    public Color color;
    public Matrix4x4 matrix;
}
// 
public struct ParticleData : IComponentData
{
    public Vector4 color;
    public Matrix4x4 matrix;
}

рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдиреЗ рд╣рдореЗрдВ рдорд╣рдВрдЧреЗ рд░реВрдкрд╛рдВрддрд░рдг рдСрдкрд░реЗрд╢рди рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА:

200,000 рдХрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдлреНрд░реЗрдо рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рдХрд░ 61 рд╣реЛ рдЧрдИред

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

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдИрд╕реАрдПрд╕ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХрддрд╛ рдбреЙрдЯреНрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИрдВред рд╡реЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдиреА рднреВрдорд┐рдХрд╛ рдирд┐рднрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рд╕рд┐рдореБрд▓реЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдЙрдирдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рдереЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреЙрдЯреНрд╕ рдХреЛ "рд╕рд┐рд▓реНрд╡рд░ рдмреБрд▓реЗрдЯ" рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрд░ рдкрддреНрдерд░ рдлреЗрдВрдХрддреЗ рд╣реИрдВ рдЬреЛ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкрд╛рд░рдВрдкрд░рд┐рдХ рдПрдХрддрд╛ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ - рдбреЙрдЯреНрд╕ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ рдФрд░ рд╣рд░ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред

рдкреБрдирд╢реНрдЪ


рд╣рд░ рдХреЛрдИ рдореЗрд░реЗ рдЧрд┐рдЯрдмреЙрд╕ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рд╡реЙрд▓рдкреЗрдкрд░ рдЗрдВрдЬрди рдореЗрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рд╡реЙрд▓рдкреЗрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ : рд▓рд┐рдВрдХ ред

All Articles