2018
рдореЗрдВ рдПрдХрддрд╛ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдВрддрддрдГ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рд╢реЙрд░реНрдЯ рдХреЗ
рд▓рд┐рдП рдирдИ
рдПрдВрдЯрд┐рдЯреА рдШрдЯрдХ рдкреНрд░рдгрд╛рд▓реА, рдпрд╛
рдИрд╕реАрдПрд╕ рдХреЛ рдЬреЛрдбрд╝рд╛, рдЬреЛ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдирд╛рдВрддрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддреА рд╣реИред
рд╕рд╛рде рдореЗрдВ, рдпреЗ рджреЛ рдирдП рд╕рд┐рд╕реНрдЯрдо (
рдИрд╕реАрдПрд╕ рдФрд░
рдЬреЙрдм рд╕рд┐рд╕реНрдЯрдо ) рдПрдХ рдирдП рд╕реНрддрд░ рдХреА рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд╕рдВрдкреВрд░реНрдг
рдИрд╕реАрдПрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ
рдПрдХрддрд╛ рдореЗрдВ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз
рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
рдИрд╕реАрдПрд╕ рдкреИрдХреЗрдЬ рдХреЗ рдмрд╛рд╣рд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирдИ рд╡реНрдпрд╡рд╕реНрдерд╛
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ,
рдПрдХрддрд╛ рдкрд╣рд▓реЗ рдмрд╣реБ-рдереНрд░реЗрдбреЗрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рдереА, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдЦреБрдж рд╣реА рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдмрдирд╛рдирд╛ рдкрдбрд╝рд╛, рддрд╛рдХрд┐ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдпрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ рдФрд░ рдиреБрдХрд╕рд╛рди рд╣реЛ рд╕рдХреЗред рдФрд░ рдЕрдЧрд░ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдереНрд░реЗрдбреНрд╕, рдХреНрд▓реЛрдЬрд┐рдВрдЧ рдереНрд░реЗрдбреНрд╕, рдкреВрд▓, рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдмрдирд╛рдиреЗ рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рдЕрдм рдпрд╣ рд╕рд╛рд░рд╛ рдХрд╛рдо рдЗрдВрдЬрди рдХреЗ рдХрдВрдзреЛрдВ рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛, рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдмрдирд╛рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред
рдХрд╛рд░реНрдп
рдирдИ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрд┐рд╕реА рднреА рдЧрдгрдирд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЛрдВ рдФрд░ рдбреЗрдЯрд╛ рд╕реЗ рдорд┐рд▓рдХрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВред
рдИрд╕реАрдПрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдбреЗрдЯрд╛ рдХреА рддрд░рд╣,
рдЬреЙрдм рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рддреАрди рдЗрдВрдЯрд░рдлреЗрд╕реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИрдВред
IJob
рд╕рд░рд▓рддрдо рдХрд╛рд░реНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬрд┐рд╕рдореЗрдВ рдПрдХ
рдирд┐рд╖реНрдкрд╛рджрди рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред
рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
IJobpublic struct JobStruct : IJob { public void Execute() {} }
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐ рдореЗрдВ, рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
IJobParallelFor
рдПрдХ рд╣реА
рдПрдХреНрд╕рд┐рдХреНрдпреВрдЯ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреИрд░рд╛рдореАрдЯрд░
рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
IJobParallelFor public struct JobStruct : IJobParallelFor { public void Execute(int index) {} }
рдпрд╣
IJobParallelFor рдЗрдВрдЯрд░рдлрд╝реЗрд╕,
IJob рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдХрдИ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рди рдХреЗрд╡рд▓ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЙрди рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред
рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдФрд░ рдмрддрд╛рдКрдВрдЧрд╛редIJobParallelForTransform
рдФрд░ рдЕрдВрддрд┐рдо, рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдЬреЛ, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рдХрд╛ рдЕрд░реНрде рд╣реИ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ
рдПрдХреНрдЬрд╝рд┐рдХреНрдпреВрдЯ рд╡рд┐рдзрд┐ рднреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдиреНрдпреВрдореЗрд░рд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░
рдЗрдВрдбреЗрдХреНрд╕ рдФрд░
рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдорд╕реИрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ, рдЬрд╣рд╛рдБ
рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдореЗрд╢рди рдХреА рд╕реНрдерд┐рддрд┐, рдЖрдХрд╛рд░ рдФрд░ рдШреБрдорд╛рд╡ рд╕реНрдерд┐рдд рд╣реИрдВред
IJobParallelForTransform public struct JobStruct : IJobParallelForTransform { public void Execute(int index, TransformAccess transform) {} }
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЖрдк рд╕реАрдзреЗ рдХрд╛рд░реНрдп рдореЗрдВ
рдПрдХрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдЕрд▓рдЧ
рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдореИрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ
рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред
рд╣реЛ рдЧрдпрд╛, рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдп рд╕рдВрд░рдЪрдирд╛ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЖрдк рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рд░реНрдп рдкреВрд░реНрдг рд╣реЛрдирд╛
рдЖрдЗрдЬреЛрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рд░рд▓
рдореЛрдиреЛрдмреАрд╡рд┐рдпрд░ рд▓рд┐рдкрд┐ рдФрд░ рдХрд╛рд░реНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
TestJob public class TestJob : MonoBehaviour { void Start() {} }
рдЕрдм рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реАрди рдкрд░ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рдЫреЛрдбрд╝ рджреЗрдВред рдиреАрдЪреЗ рдПрдХ рд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ (
рдЯреЗрд╕реНрдЯрдЬреЛрдм ) рдореЗрдВ рд╣рдо рдХрд╛рд░реНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред
SimpleJob using Unity.Jobs; public struct SimpleJob : IJob { public void Execute() { Debug.Log("Hello parallel world!"); } }
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐ рдореЗрдВ, рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд░реЗрдЦрд╛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред
рдЕрдм рдЪрд▓рд┐рдП
TestJob рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА
рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд╣рдо рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдПрдБрдЧреЗ рдФрд░ рдлрд┐рд░ рдЙрд╕ рдкрд░ рдЕрдорд▓ рдХрд░реЗрдВрдЧреЗред
TestJob public class TestJob : MonoBehaviour { void Start() { SimpleJob job = new SimpleJob(); job.Schedule().Complete(); } }
рдпрджрд┐ рдЖрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдм рдХреБрдЫ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЧреЗрдо рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЪрд┐рддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрдВрд╕реЛрд▓ рдХреЛ рдПрдХ рд╕рд░рд▓ рд╕рдВрджреЗрд╢ рдорд┐рд▓реЗрдЧрд╛ред

рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
рд╢реЗрдбреНрдпреВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж,
рд╢реЗрдбреНрдпреВрд▓рд░ рдХрд╛рд░реНрдп рдХреЛ рд╣реИрдВрдбрд▓ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЕрдм рдЗрд╕реЗ
рдкреВрд░реНрдг рд╡рд┐рдзрд┐ рдХрд╣рдХрд░ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдХрд╛рд░реНрдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдерд╛ рдЬреЛ рдХреЗрд╡рд▓ рдкрд╛рда рдХреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдореБрджреНрд░рд┐рдд рдХрд░рддрд╛ рдерд╛ред рдХрд┐рд╕реА рднреА рд╕рдорд╛рдирд╛рдВрддрд░ рд╕рдВрдЧрдгрдирд╛ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдбреЗрдЯрд╛ рд╕реЗ рднрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдХрд╛рд░реНрдп рдореЗрдВ рдбреЗрдЯрд╛
рдИрд╕реАрдПрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреА рддрд░рд╣, рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ
рдПрдХрддрд╛ рд╡рд╕реНрддреБрдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИ, рдЖрдк
рдЧреЗрдордСрдмрдЬреЗрдХреНрдЯ рдХреЛ рдХрд╛рд░реНрдп рдореЗрдВ рдирд╣реАрдВ
рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдЙрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдмрд╕ рдЗрддрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдХрд╛рд░реНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ, рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ, рдФрд░ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдХрд╛рд░реНрдп рдореЗрдВ рд╣реА рдбреЗрдЯрд╛ рдХреА рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдпрд╣
рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░
рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд, рдЖрдк рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА
рдмреВрд▓рд┐рдпрди рдпрд╛
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
SimpleJob public struct SimpleJob : IJob { public float a, b; public void Execute() { float result = a + b; Debug.Log(result); } }
рдФрд░ рдореБрдЦреНрдп рд╕реНрдерд┐рддрд┐: рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдХреЗ рдЕрдВрджрд░ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!
рдХрдВрдЯреЗрдирд░
рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдХрд┐рд╕реА рддрд░рд╣ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╡рд╛рдкрд╕ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рд╣реИрдВред рдЗрди рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд╕рд╛рдзрд╛рд░рдг рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдПрдХ рдкреБрд▓ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдердорд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдХреЗ рдмреАрдЪ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдВрдЯреЗрдирд░ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ:
NativeArray ред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдХрдВрдЯреЗрдирд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдореВрд▓ рдирд┐рд╡рд╛рд╕реА ред рдПрдХ рдЕрдиреНрдп рдХрдВрдЯреЗрдирд░ - рдПрдХ рд╕рд░рдгреА, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреБрд╡рд╛рдж рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ, NativeArray рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХрд╛рдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпреЗ рджреЛ рдореБрдЦреНрдп рдХрдВрдЯреЗрдирд░ рдПрдХ
рдИрд╕реАрдПрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХрдИ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдВрдЯреЗрдирд░ рд╣реИрдВред
рдореВрд▓ рдирд┐рд╡рд╛рд╕реА ред рдпрд╣ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдирд┐рдпрдорд┐рдд рд╕реВрдЪреА рд╣реИред
NativeHashMap ред рдПрдХ рдХреБрдВрдЬреА рдФрд░ рдПрдХ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧред
NativeMultiHashMap ред рдПрдХ рд╣реА рдХреБрдВрдЬреА рдХреЗ рддрд╣рдд рдХреЗрд╡рд▓ рдХреБрдЫ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА
NativeHashMap ред
NativeQueueред рдбреЗрдЯрд╛ рдХрддрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреАред
рдЪреВрдБрдХрд┐ рд╣рдо
ECS рд╕рд┐рд╕реНрдЯрдо рдХреЛ
рдЬреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓
NativeArray рдФрд░
NativeSlice рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз
рд╣реИрдВ ред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рднрд╛рдЧ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред
рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдПрдБ
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛, рдпреЗ рдХрдВрдЯреЗрдирд░ рдПрдХ рдкреБрд▓ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдкреБрд▓ рдХреЛ рдЦреЛрд▓рддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрддреА рд╣реИред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ "
рдЖрд╡рдВрдЯрди " (
рдЖрд╡рдВрдЯрди ) рдпрд╛
"рдореЗрдореЛрд░реА рдХрд╛ рдЖрд╡рдВрдЯрди" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдорд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ "
рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рд╡рд┐рдореЛрдЪрди " (
рдирд┐рдкрдЯрд╛рди ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЖрд╡рдВрдЯрди рд╣реИ рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХрд┐рддрдиреЗ рд╕рдордп рддрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреБрд▓ рдХрдм рддрдХ рдЦреБрд▓рд╛ рд░рд╣реЗрдЧрд╛ред
рдЗрди рджреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

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

рд╕рдлреЗрдж рдмрд╛рд░
рдЖрд╡рдВрдЯрди рдХрдВрдЯреЗрдирд░ рдХреЗ рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдлреНрд░реЗрдо рдореЗрдВ, рдХрдВрдЯреЗрдирд░ рдХреЛ
рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдкреБрд▓ рдХреЛ рдЦреЛрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдХреНрд╖рдг рддрдХ рдХрдВрдЯреЗрдирд░ рдореМрдЬреВрдж рдирд╣реАрдВ рдерд╛, рдХрд╛рд░реНрдп рдореЗрдВ рд╕рднреА рдЧрдгрдирд╛ рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдХрдВрдЯреЗрдирд░ рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рдореБрдХреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 9 рд╡реЗрдВ рдлреНрд░реЗрдо рдореЗрдВ рдкреБрд▓ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкрдЯреНрдЯреА (
рдЖрд╡рдВрдЯрди ) рдкрд░ рднреА рд╕рдордп рдЦрдВрдб (
рдЯреЗрдВрдк ,
рдЯреЗрдореНрдкрдЬреЛрдм рдФрд░
рдкреНрд░реЗрдЬреЗрдВрдЯ ) рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдЦрдВрдб рдЗрд╕ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдиреБрдорд╛рдирд┐рдд рдЬреАрд╡рдирдХрд╛рд▓ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдЗрди рдЦрдВрдбреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╡рдзрд┐ рддрдХ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдЙрд╕реА рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЗрд╕реЗ рдмрдирд╛рдпрд╛ рдерд╛, рдпрд╛ рд╣рдо рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдпрд╣ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ, рдФрд░ рдпреЗ рд╕реЗрдЧрдореЗрдВрдЯ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рд░реНрдп рдХрд┐рддрдирд╛ рдЬрд░реВрд░реА рд╣реИ рдФрд░ рдХрд┐рддрдиреА рджреЗрд░ рддрдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрдВрдЯреЗрдирд░ рдореЗрдВред
рдпрджрд┐ рдпрд╣ рдЕрднреА рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрд╡рдВрдЯрди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛редрдЕрдм рд╣рдо рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо
рдЯреЗрд╕реНрдЯрдЬреЛрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА
рд╕реНрдЯрд╛рд░реНрдЯ рд╡рд┐рдзрд┐ рдкрд░
рд▓реМрдЯрддреЗ рд╣реИрдВ рдФрд░
рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХрдВрдЯреЗрдирд░ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓рддреЗ рд╣реИрдВред
рдЕрд╕реНрдерд╛рдпреА
TestJob using Unity.Jobs; using Unity.Collections; public class TestJob : MonoBehaviour { void Start() { NativeArray<int> array = new NativeArray<int>(10, Allocator.Temp); } }
рдПрдХ рдирдпрд╛ рдХрдВрдЯреЗрдирд░ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдореЗрдВ рдЖрдХрд╛рд░ рдФрд░ рдЖрд╡рдВрдЯрди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдЙрджрд╛рд╣рд░рдг
Temp рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдп рдХреЗрд╡рд▓
рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЕрдм
SimpleJob рдХрд╛рд░реНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдЯреАрдХ рдЙрд╕реА рд╕рд░рдгреА рдЪрд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред
SimpleJob public struct SimpleJob : IJob { public NativeArray<int> array; public void Execute() {} }
рд╣реЛ рдЧрдпрд╛ред рдЕрдм рдЖрдк рдХрд╛рд░реНрдп рд╕реНрд╡рдпрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рд╛рд░рдВрдн void Start() { NativeArray<int> array = new NativeArray<int>(10, Allocator.Temp); SimpleJob job = new SimpleJob(); job.array = array; }
рдЗрд╕ рд╕рдордп рдХрд╛рд░реНрдп рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕реА
рд╢реЗрдбреНрдпреВрд▓ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ
рдЬреЙрдмрд╣реИрдВрдбрд▓ рд╣реИрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдкреНрд░рд╛рд░рдВрдн void Start() { NativeArray<int> array = new NativeArray<int>(10, Allocator.Temp); SimpleJob job = new SimpleJob(); job.array = array; JobHandle handle = job.Schedule(); }
рдЕрдм рдЖрдк рдЙрд╕рдХреЗ рд╣реИрдВрдбрд▓ рдкрд░
рдХрдореНрдкрд▓реАрдЯ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реБрдЖ рдпрд╛ рдирд╣реАрдВред
рдкреНрд░рд╛рд░рдВрдн void Start() { NativeArray<int> array = new NativeArray<int>(10, Allocator.Temp); SimpleJob job = new SimpleJob(); job.array = array; JobHandle handle = job.Schedule(); handle.Complete(); if (handle.IsCompleted) print(" "); }
рдпрджрд┐ рдЖрдк рдЗрд╕ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдПрдХ рдореЛрдЯреА рд▓рд╛рд▓ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА рдХрд┐ рдЖрдкрдиреЗ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рд╕рд░рдгреА рдХрдВрдЯреЗрдирд░ рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ред

рдЗрд╕рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрдВрдЯреЗрдирд░ рдкрд░
рдбрд┐рд╕реНрдкреЛрдЬ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред
рдкреНрд░рд╛рд░рдВрдн void Start() { NativeArray<int> array = new NativeArray<int>(10, Allocator.Temp); SimpleJob job = new SimpleJob(); job.array = array; JobHandle handle = job.Schedule(); handle.Complete(); if (handle.IsCompleted) print("Complete"); array.Dispose(); }
рддрдм рдЖрдк рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ! - рдлрд┐рд░ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред
SimpleJob public struct SimpleJob : IJob { public NativeArray<int> array; public void Execute() { for(int i = 0; i < array.Length; i++) { array[i] = i * i; } } }
рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд┐рдзрд┐ рдореЗрдВ, рдореИрдВ рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо
рд╕рд░рдгреА рдореЗрдВ рд╡рд╛рдкрд╕
рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдореЗрдВ рдХрдВрд╕реЛрд▓ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред
рдкреНрд░рд╛рд░рдВрдн void Start() { NativeArray<int> array = new NativeArray<int>(10, Allocator.Temp); SimpleJob job = new SimpleJob(); job.array = array; JobHandle handle = job.Schedule(); handle.Complete(); if (handle.IsCompleted) print(job.array[job.array.Length - 1]); array.Dispose(); }
рдпрджрд┐ рд╣рдо рд╡рд░реНрдЧ рдХреЗ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛?
рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХрдВрдЯреЗрдирд░ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрди рдкрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣
рдЕрд╕реНрдерд╛рдпреА рдЖрд╡рдВрдЯрди рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдерд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдХ рдлреНрд░реЗрдо рдХреЗ рднреАрддрд░ рдПрдХ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдирд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдореБрдЦреНрдп рдзрд╛рдЧреЗ рдХреЛ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рдЬрд▓реНрджреА рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХрд╛рд░реНрдп рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛрдиреЗ рдкрд░ рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛ рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реЛрдВрдЧреЗ, рддреЛ
рд╕реИрдЧрд┐рдВрдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ
TempJob рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИ
, рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдмрд╛рдж рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛ред
TempJob
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ
SimpleJob рдХрд╛рд░реНрдп
рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдереЛрдбрд╝рд╛
рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЗрд╕реЗ рдЕрдиреНрдп
IJobParallelFor рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд
рдХрд░реВрдВрдЧрд╛ ред
SimpleJob public struct SimpleJob : IJobParallelFor { public NativeArray<Vector2> array; public void Execute(int index) {} }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рдпрд╣ рдХрд╛рд░реНрдп рдПрдХ рдлреНрд░реЗрдо рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рддрдХ рдЪрд▓реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЯрд╛рд╕реНрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ
рдЕрд╡рд╛реЕрдХ рдФрд░
рд╕реНрдЯрд╛рд░реНрдЯ рддрд░реАрдХреЛрдВ рдореЗрдВ рдЬрдорд╛ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдПрдХ рдХреЛрд░рдЯрд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
TestJob рд╡рд░реНрдЧ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ
рдереЛрдбрд╝рд╛ рдмрджрд▓ рджреЗрдВ ред
TestJob public class TestJob : MonoBehaviour { private NativeArray<Vector2> array; private JobHandle handle; void Awake() {} IEnumerator Start() {} }
рдЕрд╡реЗрдХ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдПрдХ рдХрд╛рд░реНрдп рдФрд░ рд╡реИрдХреНрдЯрд░ рдХреЗ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ, рдФрд░
рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдореЗрдВ, рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдФрд░ рд░рд┐рд▓реАрдЬ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВрдЧреЗред
рд╕рдЪреЗрдд void Awake() { this.array = new NativeArray<Vector2>(100, Allocator.TempJob); SimpleJob job = new SimpleJob(); job.array = this.array; }
рдпрд╣рд╛рдВ рдлрд┐рд░ рд╕реЗ, рдПрдХ
рд╕рд░рдгреА рдХрдВрдЯреЗрдирд░ рдХреЛ рдЖрд╡рдВрдЯрди
TempJob рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдореВрд▓реА рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде
рдЕрдиреБрд╕реВрдЪреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рд╣реИрдВрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╕рдЪреЗрдд void Awake() { this.array = new NativeArray<Vector2>(100, Allocator.TempJob); SimpleJob job = new SimpleJob(); job.array = this.array; this.handle = job.Schedule(100, 5) }
рд╢реЗрдбреНрдпреВрд▓ рд╡рд┐рдзрд┐ рдореЗрдВ рдкрд╣рд▓рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХрд┐рддрдиреА рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣рд╛рдВ рд╕рд░рдгреА
рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╕рдВрдЦреНрдпрд╛ рд╣реИред
рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдп рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдмреНрд▓реЙрдХ рд╣реИрдВред
рдХреНрдпрд╛ рдЕрдиреНрдп рдмреНрд▓реЙрдХ?рдкрд╣рд▓реЗ, рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдереНрд░реЗрдб рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░
рдПрдХреНрд╕рдХреНрдпреВрдЯ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдм рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ 100 рдмрд╛рд░ рдХреЙрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓рд░ рдЗрди 100 рдмрд╛рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рд╡рд┐рддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рдЕрд▓рдЧ рдереНрд░реЗрдб рд▓реЛрдб рди рд╣реЛ рд╕рдХреЗред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдПрдХ рд╕реМ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ 20 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ 5 рдмреНрд▓реЙрдХреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рддреН, рдЕрдиреБрд╕реВрдЪрдХ рд╕рдВрднрд╡рддрдГ рдЗрди 5 рдмреНрд▓реЙрдХреЛрдВ рдХреЛ 5 рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб
рдПрдХреНрд╕рдХреНрдпреВрдЯ рд╡рд┐рдзрд┐ рдХреЛ 20 рдмрд╛рд░ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рддрдереНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдиреБрд╕реВрдЪрдХ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реА рдХрд░реЗрдЧрд╛, рдпрд╣ рд╕рдм рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд╛рд░реНрдпрднрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рд╕рднреА 100 рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рд╣реЛрдЧреАред
рдЕрдм рдЖрдк рдЯрд╛рд╕реНрдХ рд╣реИрдВрдбрд▓ рдкрд░
рдХрдореНрдкрд▓реАрдЯ рдореЗрдердб рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдЪреЗрдд void Awake() { this.array = new NativeArray<Vector2>(100, Allocator.TempJob); SimpleJob job = new SimpleJob(); job.array = this.array; this.handle = job.Schedule(100, 5); this.handle.Complete(); }
рд╕реНрдЯрд╛рд░реНрдЯ рдХреЙрд░рдЖрдЙрдЯ рдореЗрдВ, рд╣рдо рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдлрд┐рд░ рд╣рдо рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВрдЧреЗред
рдкреНрд░рд╛рд░рдВрдн IEnumerator Start() { while(this.handle.isCompleted == false){ yield return new WaitForEndOfFrame(); } this.array.Dispose(); }
рдЕрдм рдХрд╛рд░реНрдп рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред
SimpleJob public struct SimpleJob : IJobParallelFor { public NativeArray<Vector2> array; public void Execute(int index) { float x = index; float y = index; Vector2 vector = new Vector2(x * x, y * y / (y * 2)); this.array[index] = vector; } }
рдкреНрд░рд╛рд░рдВрдн рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╕рд░рдгреА рдХреЗ рд╕рднреА рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд
рдХрд░реЗрдВ ред
рдкреНрд░рд╛рд░рдВрдн IEnumerator Start() { while(this.handle.IsCompleted == false){ yield return new WaitForEndOfFrame(); } foreach(Vector2 vector in this.array) { print(vector); } this.array.Dispose(); }
рд╣реЛ рдЧрдпрд╛, рдЖрдк рджреМрдбрд╝ рдХрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
IJob рдФрд░
IJobParallelFor рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП
, рдиреАрдЪреЗ рджреА рдЧрдИ рдЫрд╡рд┐рдпреЛрдВ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
IJob рдореЗрдВ рдЖрдк рдХрдИ рдмрд╛рд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ
рд▓рд┐рдП рд▓реВрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░
рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдПрдХ рдзрд╛рдЧрд╛ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдХреА рдкреВрд░реА рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд░
рдПрдХреНрд╕рдХреНрдпреВрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИ - рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╕реИрдХрдбрд╝реЛрдВ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреИрд╕реЗ рдХрд░реЗрдВред
IJobParallelFor рди рдХреЗрд╡рд▓ рдПрдХ рдереНрд░реЗрдб рдореЗрдВ рдХрдИ рдмрд╛рд░ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рдЕрдиреНрдп рдереНрд░реЗрдбреНрд╕ рдХреЗ рдмреАрдЪ рдЗрди рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░,
TempJob рдХреЗ рдЖрд╡рдВрдЯрди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХрджрдо рд╕рд╣реА рд╣реИ рдЬреЛ рдХрдИ рдлрд╝реНрд░реЗрдореЛрдВ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЗрд╕реЗ рддреБрд░рдВрдд рдирд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдЖрд╡рдВрдЯрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛
рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬреЛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд░рд┐рд╣рд╛рдИ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рдХрд░рддрд╛ рд╣реИ "рдлрд┐рд░
рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ!" ред
рджреГрдврд╝
рдЖрдЗрдП TestJob рд╡рд░реНрдЧ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдмрджрд▓реЗрдВред рдЕрдм рд╣рдо
OnEnable рдкрджреНрдзрддрд┐ рдореЗрдВ рдХрд╛рд░реНрдп
рдмрдирд╛рдПрдВрдЧреЗ ,
рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдФрд░
OnDisable рдкрджреНрдзрддрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдл
рдХрд░реЗрдВрдЧреЗ ред
рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ
рдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдкреНрд░рдХреНрд╖реЗрдкрд╡рдХреНрд░ рдХреА рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╣рдо рджреЛ рд╡реЗрдХреНрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ -
рдЗрдирдкреБрдЯрдЕрд░реЗ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдФрд░
рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рд▓ рджреЗрдВрдЧреЗ рдЬрд╣рд╛рдВ рд╕реЗ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
TestJob public class TestJob : MonoBehaviour { private NativeArray<Vector2> inputArray; private NativeArray<Vector2> outputArray; private JobHandle handle; void OnEnable() {} void Update() {} void OnDisable() {} }
рд╣рдо рдЗрд╕реЗ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
IJob рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ
SimpleJob рдХрд╛рд░реНрдп
рдХреА рд╕рдВрд░рдЪрдирд╛
рдХреЛ рднреА рдереЛрдбрд╝рд╛
рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВрдЧреЗ ред
SimpleJob public struct SimpleJob : IJob { public void Execute() {} }
рдХрд╛рд░реНрдп рдореЗрдВ рд╣реА, рд╣рдо рджреЛ рд╡реЗрдХреНрдЯрд░ рдХрдВрдЯреЗрдирд░реЛрдВ, рдПрдХ рд╕реНрдерд┐рддрд┐ рд╡реЗрдХреНрдЯрд░ рдФрд░ рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдбреЗрд▓реНрдЯрд╛ рдХреЛ рднреА рдзреЛрдЦрд╛ рджреЗрдВрдЧреЗ, рдЬреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд▓рдХреНрд╖реНрдп рддрдХ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред
SimpleJob public struct SimpleJob : IJob { [ReadOnly] public NativeArray<Vector2> inputArray; [WriteOnly] public NativeArray<Vector2> outputArray; public Vector2 position; public float delta; public void Execute() {} }
ReadOnly рдФрд░
WriteOnly рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХрдВрдЯреЗрдирд░ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рд╕реЗ рдЬреБрдбрд╝реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рддрд┐рдмрдВрдз рджрд┐рдЦрд╛рддреА рд╣реИрдВред
рдХреЗрд╡рд▓ рдХрдВрдЯреЗрдирд░ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреНрд░реАрдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд,
WriteOnly рд╡рд┐рд╢реЗрд╖рддрд╛, рд╕реНрдЯреНрд░реАрдо рдХреЛ рдХреЗрд╡рд▓ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдбреЗрдЯрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдПрдХ рд╕рд╛рде рдЗрди рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдЪрд▓рд┐рдП
рдЯреЗрд╕реНрдЯрдЬреЙрдм рдХреНрд▓рд╛рд╕ рдХреЗ
рдСрдирдПрдиреЗрдмрд▓ рддрд░реАрдХреЗ рдкрд░
рдЪрд▓рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
OnEnable void OnEnable() { this.inputArray = new NativeArray<Vector2>(1, Allocator.Persistent); this.outputArray = new NativeArray<Vector2>(1, Allocator.Persistent); }
рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЖрдпрд╛рдо рдПрдХрд▓ рд╣реЛрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрд╡рдВрдЯрди рдХрд╛ рдкреНрд░рдХрд╛рд░
рд╕реНрдерд╛рдпреА рд╣реЛрдЧрд╛ред
OnDisable рдкрджреНрдзрддрд┐ рдореЗрдВ,
рд╣рдо рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗред
OnDisable void OnDisable() { this.inputArray.Dispose(); this.outputArray.Dispose(); }
рдЖрдЗрдП рдПрдХ рдЕрд▓рдЧ
CreateJob рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЗрд╕рдХреЗ рд╣реИрдВрдбрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рд╡рд╣рд╛рдВ рд╣рдо рдЗрд╕реЗ рдбреЗрдЯрд╛ рд╕реЗ рднрд░ рджреЗрдВрдЧреЗред
createjob void CreateJob() { SimpleJob job = new SimpleJob(); job.delta = Time.deltaTime; Vector2 position = this.transform.position; job.position = position; Vector2 newPosition = position + Vector2.right; this.inputArray[0] = newPosition; job.inputArray = this.inputArray; job.outputArray = this.outputArray; this.handle = job.Schedule(); this.handle.Complete(); }
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, inputArray рдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣рд╛рдВ рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рджрд┐рд╢рд╛ рдХреЗ рд╡реЗрдХреНрдЯрд░ рдХреЛ рдХрд╛рд░реНрдп рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭрдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрди ReadOnly рдФрд░ WriteOnly рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИредрдЕрдкрдбреЗрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдЬрд╛рдВрдЪреЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдо рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВред
рдЕрджреНрдпрддрди void Update() { if (this.handle.IsCompleted) { Vector2 newPosition = this.outputArray[0]; this.transform.position = newPosition; CreateJob(); } }
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо
OnEnable рдкрджреНрдзрддрд┐ рдХреЛ рдереЛрдбрд╝рд╛
рдореЛрдбрд╝ рджреЗрдВрдЧреЗ рддрд╛рдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдХрд╛рд░реНрдп рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
OnEnable void OnEnable() { this.inputArray = new NativeArray<Vector2>(1, Allocator.Persistent); this.outputArray = new NativeArray<Vector2>(1, Allocator.Persistent); CreateJob(); }
рд╣реЛ рдЧрдпрд╛, рдЕрдм рдЖрдк рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрдп рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░
рдПрдХреНрд╕рдХреНрдпреВрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдкрд╛рджрд┐рдд public void Execute() { Vector2 newPosition = this.inputArray[0]; newPosition = Vector2.Lerp(this.position, newPosition, this.delta); this.outputArray[0] = newPosition; }
рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░
рдЯреЗрд╕реНрдЯрдЬреЛрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЧреЗрдо рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрд╕ рдзреАрд░реЗ-рдзреАрд░реЗ рджрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рд╣реЛрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдмрдВрдЯрд┐рдд рдЖрдмрдВрдЯрди рдХрд╛ рдкреНрд░рдХрд╛рд░
рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рд░ рдмрд╛рд░ рдирд╖реНрдЯ рд╣реЛрдиреЗ рдФрд░ рдкреБрдирдГ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рддреЛ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ?рдЬрд▓реНрджреА рд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдЯреЗрдВрдк рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдХрд╛рд░реНрдп рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдмрдбрд╝рд╛, рд╕реБрд╕реНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
TempJob рдкреНрд░рдХрд╛рд░
рдПрдХрддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд▓реЗ рдлреНрд░реЗрдо рдореЗрдВред
рдирд┐рд░рдВрддрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЧрддрд┐ рдЖрдкрдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдХрд┐рдирд╛рд░реЗ рдкрд░ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреА рд▓рдЧрд╛рддрд╛рд░ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбреЗрдЯрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛, рдпрд╛ AI рдХрд╛ рдХрд╛рд░реНрдпред
рдЕрдорд╛рдиреНрдп рдФрд░ рдХреЛрдИ рдирд╣реАрдВрдЖрд╡рдВрдЯрди рдХреЗ рджреЛ рдФрд░ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЕрдорд╛рдиреНрдп рдФрд░ рдХреЛрдИ рдирд╣реАрдВ , рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ рдбреАрдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рдХрд╛рд░реНрдп рдореЗрдВ рднрд╛рдЧ рдирд╣реАрдВ рд▓реЗрддреЗ рд╣реИрдВред
JobHandle
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдпрд╣ рдХрд╛рд░реНрдп рд╕рдВрднрд╛рд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрдердХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдп рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЫреЛрдЯрд╛ рд╕рдВрднрд╛рд▓ рдЕрднреА рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░реЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдЕрдзрд┐рдХ рдХреЙрд▓ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ)ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рджреЛ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛рд░реНрдп рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╣реИрдВрдбрд▓ рдкрд░ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╣реИрдВрдбрд▓ рдореЗрдВ рд╢реБрд░реВ рдореЗрдВ рдЕрдкрдирд╛ рдХрд╛рд░реНрдп рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рд╕рдВрдпреБрдХреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╣реИрдВрдбрд▓ рдорд┐рд▓рддрд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрдн void Start() { Job jobA = new Job(); JobHandle handleA = jobA.Schedule(); Job jobB = new Job(); JobHandle handleB = jobB.Schedule(); JobHandle result = JobHandle.CombineDependecies(handleA, handleB); result.Complete(); }
рдпрд╛ рдРрд╕рд╛ рд╣реИред
рдкреНрд░рд╛рд░рдВрдн void Start() { JobHandle handle; for(int i = 0; i < 10; i++) { Job job = new Job(); handle = job.Schedule(handle); } handle.Complete(); }
рдирд┐рд╖реНрдкрд╛рджрди рдЕрдиреБрдХреНрд░рдо рд╕рд╣реЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╢реЗрдбреНрдпреВрд▓рд░ рдЕрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХреЛ рддрдм рддрдХ рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╢реНрд╡рд╕реНрдд рди рд╣реЛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ IsCompleted
рд╣реИрдВрдбрд▓ рд╕рдВрдкрддреНрддрд┐ рдЗрд╕рдореЗрдВ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдЧреАред
рдирд┐рд╖реНрдХрд░реНрд╖
рдХрдВрдЯреЗрдирд░
- рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдпреЗ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдХреЛрдИ рднреА рдУрд╡рд░рд░рд╛рдЗрдЯрд┐рдВрдЧ рдЙрдиреНрд╣реЗрдВ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИред
- рдпрджрд┐ рдЖрдк рдЯреЗрдВрдк рдЖрдмрдВрдЯрди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рд╛рдл рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ? рддреНрд░реБрдЯрд┐ред
- рдХреНрдпрд╛ рдореИрдВ рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдХрдВрдЯреЗрдирд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдПрдХрдЬреБрдЯ рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдиреЗ рдпрд╣рд╛рдВ рдХрд╕реНрдЯрдо рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд╛рд░ рд╕реЛрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ: рдХреНрдпрд╛ рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рд╢рд╛рдпрдж рдкрд░реНрдпрд╛рдкреНрдд рд╕рд╛рдзрд╛рд░рдг рдХрдВрдЯреЗрдирд░ рд╣реЛрдВрдЧреЗ?!
рд╕реБрд░рдХреНрд╖рд╛!
рд╕реНрдереИрддрд┐рдХ рдбреЗрдЯрд╛редрдХрд┐рд╕реА рдХрд╛рд░реНрдп ( рд░реИрдВрдбрдо рдФрд░ рдЕрдиреНрдп) рдореЗрдВ рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВ , рд╕реНрдереИрддрд┐рдХ рдбреЗрдЯрд╛ рддрдХ рдХреЛрдИ рднреА рдкрд╣реБрдВрдЪ рдкреНрд░рдгрд╛рд▓реА рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░реЗрдЧрд╛ред рджрд░рдЕрд╕рд▓, рдЗрд╕ рд╕рдордп рдЖрдк рд╕реНрдереИрддрд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ рдХрд┐ рд╡реЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рдмрджрд▓рддреЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рдд, рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдерд┐рд░ рдФрд░ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрдВредрдЯрд╛рд╕реНрдХ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░реЗрдВ?рдпреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЬреЛ рдпрд╣рд╛рдВ рд▓реЗрдЦ рдореЗрдВ рджрд┐рдП рдЧрдП рд╣реИрдВ, рдХреЗрд╡рд▓ рд╕рд╢рд░реНрдд рд╣реИрдВ, рдФрд░ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рд╣реИред ECS рдХреЗ рдмрд┐рдирд╛ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ,рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХрд╛рдо рдкрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рднреА рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдХрд╛рд░рдг рд╕реЗ рддреБрд░рдВрдд рдХрд╛рд░реНрдп рд▓рд┐рдЦрддрд╛ рд╣реИ, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рдвреЗрд░ рдмрд╕ рдмреЗрдХрд╛рд░ рд╣реИ - рд╕рдм рдХреБрдЫ рдФрд░ рднреА рдмрджрддрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдХрд╛рд░ рдореЗрдВ 10 рд╣рдЬрд╛рд░ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреА рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛ - рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢рд╛рд▓ рдЯреЗрд░реНрд░реЛрди рдХреЗ рд╕рднреА рдмрд╣реБрднреБрдЬреЛрдВ рдХреЛ рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░рдирд╛ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЗрд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рднреА рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИ, рдЖрдк рдЯреИрд░реЗрди рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВредрд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рдЖрдк рд▓рдЧрд╛рддрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдо рд╕рдВрд╕рд╛рдзрди рдЧрд╣рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рдирдП рдЕрд╡рд╕рд░реЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЬреЙрдм рд╕рд┐рд╕реНрдЯрдордпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрдк рд▓рдЧрд╛рддрд╛рд░ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдЕрд╡рд┐рднрд╛рдЬреНрдп рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХрд╛ рдХреЛрдб рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рд╕рдорд░реНрдерд┐рдд рд╣реЛ, рддреЛ рдИрд╕реАрдПрд╕ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреА рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдХреЗрд╡рд▓ WebGL рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдлрд┐рд▓рд╣рд╛рд▓ рдЬреЙрдм рд╕рд┐рд╕реНрдЯрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдпреВрдирд┐рдЯреЗрдХ рдХреЗ рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЦреБрдж рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдПредрд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд░реЛрдд