Unity3D рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдмреЗрд╕рд┐рдХреНрд╕



рд╣рд╛рдп, рд╣рдмреНрдмрд░!

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

рдиреЗрдЯрд╡рд░реНрдХ рдХреНрд▓рд╛рд╕

рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: рдПрдХ рд╕рд░реНрд╡рд░ рдмрдирд╛рдирд╛, рдПрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛, рдПрдХ рдкреНрд░реАрдлреИрдм рдХрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдирд╛ред

рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ:

Network.Connect (рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрд╕реНрдЯ, рдЗрдВрдЯ рд░рд┐рдореЛрдЯрдкреЛрд░реНрдЯ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд╛рд╕рд╡рд░реНрдб = "") - рд╣реЛрд╕реНрдЯ рд╕рд░реНрд╡рд░ рдХреЛ рд░рд┐рдореЛрдЯрдкреЛрд░реНрдЯ рдкреЛрд░реНрдЯ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ NetworkConnectionError рдЧрдгрди рд▓реМрдЯрд╛рддрд╛ рд╣реИред

Network.InitializeServer (int рдХрдиреЗрдХреНрд╢рди, int ListenPort, bool useNat) - рдХрдиреЗрдХреНрд╢рди рдХрдиреЗрдХреНрд╢рди рдХреА рдЕрдзрд┐рдХрддрдо рдЕрдиреБрдордд рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░реНрд╡рд░ рдмрдирд╛рддрд╛ рд╣реИ; ListenPort рдЗрдирдмрд╛рдЙрдВрдб рдкреЛрд░реНрдЯ, рд╕рд╛рде рд╣реА рдЙрдкрдпреЛрдЧрдиреИрдЯ : NAT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ рдирд╣реАрдВред NetworkConnectionError рдЧрдгрдирд╛ рдХреЛ рднреА рд▓реМрдЯрд╛рддрд╛ рд╣реИред

Network.InitializeSecurity () - рдзреЛрдЦрд╛ рджреЗрдиреЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Network.InitializeServer () рд╕реЗ рдкрд╣рд▓реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╡рд┐рд╡рд░рдгред рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдордд рдмреБрд▓рд╛рдУ!

Network.Instantiate (рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реАрдлрд╝реИрдм, рд╡реЗрдХреНрдЯрд░ 3 рд╕реНрдерд┐рддрд┐, рдХреНрд╡рд╛рдЯрд░рди рд░реЛрдЯреЗрд╢рди, рдЗрдВрдЯ рдЧреНрд░реБрдк) - рд░реЛрдЯреЗрд╢рди рд░реЛрдЯреЗрд╢рди рдФрд░ рд╕рдореВрд╣ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдкреНрд░реАрдлрд╝реИрдм рдкреНрд░реАрдлрд╝реИрдм рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИред рд╕рдВрдкреВрд░реНрдг рдмрдирд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рд╡рд┐рд╡рд░рдг рдмрд╛рдж рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ рд╣реИрдВред

рдореБрдЦреНрдп рдЧреБрдг:

bool Network.isClient рдФрд░ bool Network.isServer - рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдЧреЗрдо рд╕рд░реНрд╡рд░ рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реИред рдпрджрд┐ рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рдерд╛ рдпрд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рдерд╛, рддреЛ рджреЛрдиреЛрдВ рдЧреБрдг рдЭреВрдареЗ рд╣реИрдВред

string Network.incomingPassword - рд╕рдВрдкрддреНрддрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░рддреА рд╣реИред

NetworkPlayer Network.player - рд╕реНрдерд╛рдиреАрдп NetworkPlayer рдкреНрд▓реЗрдпрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реИред

NetworkPeerType Network.peerType - рд╡рд░реНрддрдорд╛рди рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд┐рддрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИ: рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ (рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛), рд╕рд░реНрд╡рд░ (рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИ), рдХреНрд▓рд╛рдЗрдВрдЯ (рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ), рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ (рдкреНрд░рдпрд╛рд╕, рдХрдиреЗрдХреНрд╢рди рдХреЗ рджреМрд░рд╛рди)ред

NetworkPlayer [] Network.connections - рд╕рднреА рдЬреБрдбрд╝реЗ рд╣реБрдП рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рдкреНрд▓реЗрдпрд░ рджреЗрддрд╛ рд╣реИред

рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдо (рдореЛрдиреЛрдмреЗрд╣реЗрд╡рд┐рдпрд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ):

OnConnectedToServer () - рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЙрд╕ рд╕рдордп рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред

OnDisconnectedFromServer (NetworkDisconnection рдЬрд╛рдирдХрд╛рд░реА) - рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдиреЗрдЯрд╡рд░реНрдХрдбрд┐рд╕рдХрдиреЗрдХреНрдЯ () рдХрдиреЗрдХреНрд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рд╡рд┐рдпреЛрдЧ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ: рд▓реЙрд╕реНрдЯрдХрдиреЗрдХреНрд╢рди (рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЦреЛрдирд╛ ) рдФрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯреЗрдб (рд╕рдлрд▓ рд╡рд┐рдпреЛрдЧ рдкрд░)ред

OnFailedToConnect (NetworkConnectionError error) - рдХрдиреЗрдХреНрд╢рди рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рддреНрд░реБрдЯрд┐ рдореЗрдВ NetworkConnectionError рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐ рд╣реИред

OnNetworkInstantiate (NetworkMessageInfo рдЬрд╛рдирдХрд╛рд░реА) - рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ Network.Instantiate () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкреНрд░рдХрд╛рд░ NetworkMessageInfo рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред

OnPlayerConnected (NetworkPlayer player) - рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ NetworkPlayer рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рд╣реЛрддрд╛ рд╣реИред

OnPlayerDisconnected (NetworkPlayer player) - рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ NetworkPlayer рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд▓реЗрдпрд░ рд╣реЛрддрд╛ рд╣реИред

OnServerInitialized () - рд╕рд░реНрд╡рд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

OnSerializeNetworkView (BitStream рд╕реНрдЯреНрд░реАрдо, NetworkMessageInfo рдЬрд╛рдирдХрд╛рд░реА) - рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдШрдЯрдХ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдирд╛ред рд╡рд┐рд╡рд░рдг рдмрд╛рдж рдореЗрдВ рд▓реЗрдЦ рдореЗрдВ рд╣реИрдВред

рдХрдХреНрд╖рд╛ рдХрд╛ рдиреЗрдЯрд╡реЛрдХрд╡реНрдпреВ

рдпрд╣ рд╡рд░реНрдЧ рдПрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдЗрд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдШрдЯрдХреЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рдЖрд░рдкреАрд╕реА рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд NetworkStateSynchronization рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдЧреБрдг рд╣реИрдВ:



рдореБрдЦреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ:

networkView.RPC (рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╛рдо, RPCMode рдореЛрдб, params рдСрдмреНрдЬреЗрдХреНрдЯ [] args) - рджреВрд░рд╕реНрде рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╛рдо рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдореЛрдб рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ - рддрд░реНрдХ рджреЗрддрд╛ рд╣реИред

networkView.RPC (string name, NetworkPlayer target, params object [] args) - рдкрд┐рдЫрд▓реА рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рди, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ NetworkPlayer рдкреНрд▓реЗрдпрд░ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред

рдореБрдЦреНрдп рдЧреБрдг:

bool networkView.isMine - рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реНрдерд╛рдиреАрдп рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЗ рдорд╛рд▓рд┐рдХ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдШрдЯрдХ networkView.observed - рдШрдЯрдХ рдЬреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦрд┐рдд OnSerializeNetworkView (BitStream рд╕реНрдЯреНрд░реАрдо, NetworkMessageInfo рдЬрд╛рдирдХрд╛рд░реА) рд╡рд┐рдзрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

NetworkPlayer networkView.owner - рдПрдХ рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рд╡рд╕реНрддреБ рдХрд╛ рдорд╛рд▓рд┐рдХ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

NetworkStateSynchronization networkView.stateSynchronization - рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рдХрд╛ рдкреНрд░рдХрд╛рд░: рдмрдВрдж , рд░рд┐рд▓рд╛рдПрдмрд▓рдбреЗрд▓рдХрдВрдкреНрд░реЗрд╕реНрдб , рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп ред

NetworkViewID networkView.viewID NetworkView рдХреЗ рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред

RPC рд╡рд┐рд╢реЗрд╖рддрд╛

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

OnSerializeNetworkView рд╡рд┐рдзрд┐ (BitStream рд╕реНрдЯреНрд░реАрдо, NetworkMessageInfo рдЬрд╛рдирдХрд╛рд░реА)

рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдШрдЯрдХ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рднреА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ рдбреЗрдЯрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ Serialize рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд / рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ : bool, char, short, int, float, Quaternion, Vector3, NetworkPlayer, NetworkViewIDред
рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд░рд┐рд╕реЗрдкреНрд╢рди рдпрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ, рдЖрдЗрд╕рд░рдбрд┐рдВрдЧ рдпрд╛ рдЖрдЗрд╕рдЧреНрд░реАрдЯрд┐рдВрдЧ рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддрд╛ рд╣реВрдВ:
void OnSerializeNetworkView(BitStream stream, NetworkMessageInfo info) { Vector3 syncPosition = Vector3.zero; //       if (stream.isWriting) { syncPosition = rigidbody.position; //    stream.Serialize(ref syncPosition); //    } else { stream.Serialize(ref syncPosition); //     rigidbody.position = syncPosition; //     . } } 


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

рдкреНрд░рдХреНрд╖реЗрдк

рдкреНрд░рдХреНрд╖реЗрдк рдХрд╛ рд╕рд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмреАрдЪ, рд╣рдо рд╕реНрдХреНрд░реАрди рдЕрдкрдбреЗрдЯ рдХреЗ рджреМрд░рд╛рди Lerp рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рд╡рд╕реНрддреБ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рд╢реБрд░реБрдЖрдд рдФрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ - рдЕрдВрдд рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рдЬреИрд╕реЗ рд╣реА рдлреНрд░реЗрдо рдЕрдкрдбреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдиреЗрдЯрд╡рд░реНрдХ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рджреЗрдЦреЗрдВ: рд╡рд╛рд▓реНрд╡ рдбреЗрд╡рд▓рдкрд░ рд╕рдореБрджрд╛рдп - рд╕реНрд░реЛрдд рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдиреЗрдЯрд╡рд░реНрдХрд┐рдВрдЧ

рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдЙрджрд╛рд╣рд░рдг

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

рд╣рдо ServerSide.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
 using UnityEngine; using System.Collections; [RequireComponent( typeof( NetworkView ) )] //  Unity  ,     NetworkView.   NetworkStateSynchronization   Off. public class ServerSide : MonoBehaviour { private int playerCount = 0; //     public int PlayersCount { get { return playerCount; } } //           void OnServerInitialized() { SendMessage( "SpawnPlayer", "Player Server" ); //     } void OnPlayerConnected( NetworkPlayer player ) { ++playerCount; //          networkView.RPC( "SpawnPlayer", player, "Player " + playerCount.ToString() ); //        } void OnPlayerDisconnected( NetworkPlayer player ) { --playerCount; //    Network.RemoveRPCs( player ); //     Network.DestroyPlayerObjects( player ); //     } } 


рдЕрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдБ ClientSide.cs :
 using UnityEngine; using System.Collections; [RequireComponent( typeof( NetworkView ) )] //  Unity  ,     NetworkView.   NetworkStateSynchronization   Off. public class ClientSide : MonoBehaviour { public GameObject playerPrefab; //  ,       public Vector2 spawnArea = new Vector2( 8.0f, 8.0f ); //   private Vector3 RandomPosition { //      get { return transform.position + transform.right * ( Random.Range( 0.0f, spawnArea.x ) - spawnArea.x * 0.5f ) + transform.forward * ( Random.Range( 0.0f, spawnArea.y ) - spawnArea.y * 0.5f ); } } [RPC] //  Unity  ,        private void SpawnPlayer( string playerName ) { Vector3 position = RandomPosition; //      GameObject newPlayer = Network.Instantiate( playerPrefab, position, Quaternion.LookRotation( transform.position - position, Vector3.up ), 0 ) as GameObject; //      newPlayer.BroadcastMessage( "SetPlayerName", playerName ); //     (     ) } void OnDisconnectedFromServer( NetworkDisconnection info ) { Network.DestroyPlayerObjects( Network.player ); //    } } 


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рд▓реЙрдЬрд┐рдХ рд╣реИрдВ, рдЕрдм рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП MainMenu.cs рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
 using UnityEngine; using System.Collections; public class MultiplayerMenu : MonoBehaviour { const int NETWORK_PORT = 4585; //   const int MAX_CONNECTIONS = 20; //     const bool USE_NAT = false; //  NAT? private string remoteServer = "127.0.0.1"; //   (  localhost) void OnGUI() { if ( Network.peerType == NetworkPeerType.Disconnected ) { //    if ( GUILayout.Button( "Start Server" ) ) { //  ┬л ┬╗ Network.InitializeSecurity(); //   Network.InitializeServer( MAX_CONNECTIONS, NETWORK_PORT, USE_NAT ); //   } GUILayout.Space(30f); //  remoteServer = GUILayout.TextField( remoteServer ); //    if ( GUILayout.Button( "Connect to server" ) ) { //  ┬л┬╗ Network.Connect( remoteServer, NETWORK_PORT ); //    } } else if ( Network.peerType == NetworkPeerType.Connecting ) { //    GUILayout.Label( "Trying to connect to server" ); //   } else { //    ( NetworkPeerType.Server, NetworkPeerType.Client) if ( GUILayout.Button( "Disconnect" ) ) { //  ┬л┬╗ Network.Disconnect(); //        } } } void OnFailedToConnect( NetworkConnectionError error ) { Debug.Log( "Failed to connect: " + error.ToString() ); //         } void OnDisconnectedFromServer( NetworkDisconnection info ) { if ( Network.isClient ) { Debug.Log( "Disconnected from server: " + info.ToString() ); //        } else { Debug.Log( "Connections closed" ); //      Network.Disconnect() } } void OnConnectedToServer() { Debug.Log( "Connected to server" ); //        } } 


рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рдмрдВрдзрди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдкреНрд▓реЗрдпрд░ рдирд┐рдпрдВрддреНрд░рдг PlayerControls.cs рд▓рд┐рдЦреЗрдВ ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ NetworkView рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ :
 using UnityEngine; using System.Collections; [RequireComponent( typeof( Rigidbody ) )] //      Rigidbody public class PlayerControls : MonoBehaviour { /*   */ private float lastSynchronizationTime; //    private float syncDelay = 0f; //        private float syncTime = 0f; //   private Vector3 syncStartPosition = Vector3.zero; //   private Vector3 syncEndPosition = Vector3.zero; //    private Quaternion syncStartRotation = Quaternion.identity; //    private Quaternion syncEndRotation = Quaternion.identity; //    private NetworkView netView; //  NetworkView private string myName = ""; //   ( ,    ) public string MyName { get { return myName; } } //     public float power = 20f; void Awake () { netView = gameObject.AddComponent( typeof( NetworkView ) ) as NetworkView; //   NetworkView    netView.viewID = Network.AllocateViewID(); //      netView.observed = this; //    ()   netView.stateSynchronization = NetworkStateSynchronization.Unreliable; //       ,     lastSynchronizationTime = Time.time; //    } void FixedUpdate () { if ( netView.isMine ) { //    ,    ,       float inputX = Input.GetAxis( "Horizontal" ); float inputY = Input.GetAxis( "Vertical" ); if ( inputX != 0.0f ) { rigidbody.AddTorque( Vector3.forward * -inputX * power, ForceMode.Impulse ); } if ( inputY != 0.0f ) { rigidbody.AddTorque( Vector3.right * inputY * power, ForceMode.Impulse ); } } else { syncTime += Time.fixedDeltaTime; rigidbody.position = Vector3.Lerp( syncStartPosition, syncEndPosition, syncTime / syncDelay ); //   rigidbody.rotation = Quaternion.Lerp( syncStartRotation, syncEndRotation, syncTime / syncDelay ); //   } } void OnSerializeNetworkView( BitStream stream, NetworkMessageInfo info ) { Vector3 syncPosition = Vector3.zero; //    Vector3 syncVelocity = Vector3.zero; //     Quaternion syncRotation = Quaternion.identity; //    if ( stream.isWriting ) { //    ,       syncPosition = rigidbody.position; stream.Serialize( ref syncPosition ); syncPosition = rigidbody.velocity; stream.Serialize( ref syncVelocity ); syncRotation = rigidbody.rotation; stream.Serialize( ref syncRotation ); } else { //       stream.Serialize( ref syncPosition ); stream.Serialize( ref syncVelocity ); stream.Serialize( ref syncRotation ); syncTime = 0f; //    syncDelay = Time.time - lastSynchronizationTime; //     lastSynchronizationTime = Time.time; //      syncEndPosition = syncPosition + syncVelocity * syncDelay; //  ,     syncStartPosition = rigidbody.position; //      syncEndRotation = syncRotation; //   syncStartRotation = rigidbody.rotation; //   } } void SetPlayerName( string name ) { myName = name; //    } } 


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

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

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рд┐рдВрдХ ред
* рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд╕рд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рдж!
рдореИрдВ рдЖрдкрдХреЛ рдорд▓реНрдЯреАрдкреНрд▓реЗрдпрд░ рдЧреЗрдо рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

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


All Articles