рдПрдХрддрд╛ рдореЗрдВ рдПрдХ рдмрд┐рд▓реНрд▓реА рд╣реБрдХ рдмрдирд╛рдирд╛ред рднрд╛рдЧ 1

рдЫрд╡рд┐

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

рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЕрдкрдиреА рджреЛ рдЖрдпрд╛рдореА рд╣реБрдХ-рдХреИрдЯ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реАрдЦрддреЗ рд╣реИрдВ:

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

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

рдХрд╛рдо рдкрд░ рд▓рдЧрдирд╛


рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдлреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХрддрд╛ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЦреЛрд▓реЗрдВред рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХрддрд╛ 2017.1 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдкрд░реНрджреЗ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдЧреЗрдо рдХрд╛ рджреГрд╢реНрдп рдЦреЛрд▓реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдо рдХрд╣рд╛рдВ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ:


рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЦрд┐рд▓рд╛рдбрд╝реА рдЪрд░рд┐рддреНрд░ (рд╕реНрд▓рдЧ) рдФрд░ рдкрддреНрдерд░ рд╣рд╡рд╛ рдореЗрдВ рд▓рдЯрдХреЗ рд╣реБрдП рд╣реИрдВред

GameObject Player рдХреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рдХреИрдкреНрд╕реВрд▓ рдХреЛрд▓рд╛рдЗрдбрд░ рдФрд░ рдХрдареЛрд░рддрд╛ рд╣реИрдВ, рдЬреЛ рдЗрд╕реЗ рд╕реНрддрд░ рдкрд░ рднреМрддрд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдореЛрд╢рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ ( PlayerMovement ) рдЪрд░рд┐рддреНрд░ рд╕реЗ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдпрд╣ рдЬрдореАрди рдкрд░ рдлрд┐рд╕рд▓рдиреЗ рдФрд░ рд╕рд░рд▓ рдХреВрдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЦреЗрд▓ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓реЗ рдмрдЯрди рджрдмрд╛рдПрдВ, рдФрд░ рдЪрд░рд┐рддреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдП рдФрд░ рдбреА рдЗрд╕реЗ рдмрд╛рдПрдВ / рджрд╛рдПрдВ рдШреБрдорд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рдЖрдк рд╕реНрдкреЗрд╕рдмрд╛рд░ рдХреЛ рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреВрджрддрд╛ рд╣реИред рдлрд┐рд╕рд▓рдиреЗ рдФрд░ рдЪрдЯреНрдЯрд╛рди рд╕реЗ рдЧрд┐рд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдЖрдк рдорд░ рдЬрд╛рдПрдВрдЧреЗ!


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдмрдВрдзрди рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдм рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХреИрдЯ рд╣реБрдХ рдХреА рдХрдореА рд╣реИред

рд╣реБрдХ рдФрд░ рд░рд╕реНрд╕реА рдмрдирд╛рдирд╛


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

  • рд░рд╕реНрд╕реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рд░реЗрдВрдбрд░рд░ред рдЬрдм рд░рд╕реНрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдорддреА рд╣реИ, рддреЛ рд╣рдо рдкрдВрдХреНрддрд┐ рд░реЗрдВрдбрд░ рдореЗрдВ рдФрд░ рд╕реЗрдЧрдореЗрдВрдЯ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд░рд╕реНрд╕реА рдХреЗ рдмреНрд░реЗрдХ рдХреЗ рдЕрдиреБрд░реВрдк рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд░реНрдЯрд┐рдХрд▓ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред
  • DistanceJoint2Dред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рд▓реНрд▓реА рдХреЗ рд╣реБрдХ рдХреЗ рд╡рд░реНрддрдорд╛рди рд▓рдВрдЧрд░ рдмрд┐рдВрджреБ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ рд╕реНрд▓рдЧ рд╕реНрд╡рд┐рдВрдЧ рд╣реЛ рд╕рдХреЗред рдпрд╣ рд╣рдореЗрдВ рджреВрд░реА рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд╕реНрд╕реА рдХреЛ рд▓рдВрдмрд╛ рдХрд░рдиреЗ рдФрд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • RigidBody2D рдХреЗ рд╕рд╛рде рдЪрд╛рдЗрд▓реНрдб рдЧреЗрдордСрдмрдЬреЗрдХреНрдЯ, рдЬрд┐рд╕реЗ рд╣реБрдХ рдХреЗ рдПрдВрдХрд░ рдкреЙрдЗрдВрдЯ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рд░рд╕реНрд╕реА рдХрд╛ рдирд┐рд▓рдВрдмрди / рд▓рдВрдЧрд░ рдмрд┐рдВрджреБ рд╣реЛрдЧрд╛ред
  • рд╣реБрдХ рдлреЗрдВрдХрдиреЗ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЗрдХрд╛рд╕реНрдЯред

рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдкреНрд▓реЗрдпрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдирдпрд╛ рдмрдЪреНрдЪрд╛ GameObject рдЬреЛрдбрд╝реЗрдВ RopeHingeAnchor рдирд╛рдоред рдЗрд╕ GameObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрдЯ рд╣реБрдХ рдХреЗ рдирд┐рд▓рдВрдмрди / рд▓рдВрдЧрд░ рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

RopeHingeAnchor рдкрд░ SpriteRenderer рдФрд░ RigidBody2D рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВред

SpriteRenderer рдХреЗ рд▓рд┐рдП, UISprite рдорд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдСрд░реНрдбрд░ рдХреЛ рд▓реЗрдпрд░ рдореЗрдВ 2 рдореЗрдВ рдмрджрд▓реЗрдВред рдЗрд╕рдХреЗ рдирд╛рдо рдХреЗ рдЖрдЧреЗ рдмреЙрдХреНрд╕ рдХреЛ рдЕрдирдЪреЗрдХ рдХрд░рдХреЗ рдШрдЯрдХ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░реЗрдВред

RigidBody2D рдШрдЯрдХ рдХреЗ рд▓рд┐рдП , рдмреЙрдбреА рдЯрд╛рдЗрдк рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЛ рдХрд╛рдЗрдиреЗрдЯрд┐рдХ рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдХреЛ рднреМрддрд┐рдХ рдЗрдВрдЬрди рджреНрд╡рд╛рд░рд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд░реЛрдк рд▓реЗрдпрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХрдВрдкреЛрдиреЗрдВрдЯ рдХреЗ X рдФрд░ Y рд╕реНрдХреЗрд▓ рдорд╛рди рдХреЛ 4 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ ред


рдлрд┐рд░ рд╕реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдирдП DistanceJoint2D рдШрдЯрдХ рдХреЛ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВред

RemoteJoint2D рдШрдЯрдХ рдХреА рдХрдиреЗрдХреНрдЯреЗрдб рдХрдареЛрд░ рдмреЙрдбреА рдкреНрд░реЙрдкрд░реНрдЯреА рдкрд░ рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ RopeHingeAnchor рдХреЛ рдЦреАрдВрдЪреЗрдВ рдФрд░ Auto Configure рджреВрд░реА рдХреЛ рдмрдВрдж рдХрд░реЗрдВред


рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░реЛрдкрд╕рд┐рд╕реНрдЯрдо рдирд╛рдордХ рдПрдХ рдирдпрд╛ C # рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЦреЛрд▓реЗрдВред

Update рд╡рд┐рдзрд┐ рдирд┐рдХрд╛рд▓реЗрдВред

RopeSystem рд╡рд░реНрдЧ RopeSystem рдЕрдВрджрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ RopeSystem рдирдП рдЪрд░, Awake() рд╡рд┐рдзрд┐ рдФрд░ рдирдпрд╛ Update :

 // 1 public GameObject ropeHingeAnchor; public DistanceJoint2D ropeJoint; public Transform crosshair; public SpriteRenderer crosshairSprite; public PlayerMovement playerMovement; private bool ropeAttached; private Vector2 playerPosition; private Rigidbody2D ropeHingeAnchorRb; private SpriteRenderer ropeHingeAnchorSprite; void Awake() { // 2 ropeJoint.enabled = false; playerPosition = transform.position; ropeHingeAnchorRb = ropeHingeAnchor.GetComponent<Rigidbody2D>(); ropeHingeAnchorSprite = ropeHingeAnchor.GetComponent<SpriteRenderer>(); } void Update() { // 3 var worldMousePosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0f)); var facingDirection = worldMousePosition - transform.position; var aimAngle = Mathf.Atan2(facingDirection.y, facingDirection.x); if (aimAngle < 0f) { aimAngle = Mathf.PI * 2 + aimAngle; } // 4 var aimDirection = Quaternion.Euler(0, 0, aimAngle * Mathf.Rad2Deg) * Vector2.right; // 5 playerPosition = transform.position; // 6 if (!ropeAttached) { } else { } } 

рдЖрдЗрдП рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХрд╛ рдХреНрд░рдо рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:

  1. рд╣рдо рдЗрди рдЪрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд░реЛрдкрд╕рд┐рд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВрдЧреЗред
  2. Awake рд╡рд┐рдзрд┐ рдЦреЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ ropeJoint ( ropeJoint рдШрдЯрдХ) рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп ropeJoint ред рдпрд╣ playerPosition рдХреЛ рдкреНрд▓реЗрдпрд░ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рднреА рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
  3. рдпрд╣ рдореБрдЦреНрдп Update() рд▓реВрдк рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо ScreenToWorldPoint рдХреИрдорд░рд╛ ScreenToWorldPoint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдорд╛рдЙрд╕ рдХрд░реНрд╕рд░ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рджреБрдирд┐рдпрд╛ рдореЗрдВ рдорд╛рдЙрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдШрдЯрд╛рдХрд░ рдЕрдкрдиреЗ рдЯрдХрдЯрдХреА рдХреА рджрд┐рд╢рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рддрдм рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рдХреНрд╖реНрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП aimAngle , рдЬреЛ рдХрд░реНрд╕рд░ рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЛрдг рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдорд╛рди рдЕрдЧрд░ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
  4. aimDirection рдПрдХ рдореЛрдбрд╝ рд╣реИ рдЬреЛ рдмрд╛рдж рдореЗрдВ рдХрд╛рдо рдЖрддрд╛ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ Z рдорд╛рди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ 2D рдХреИрдорд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдВрдЧрдд OS рд╣реИред рд╣рдо рдЙрджреНрджреЗрд╢реНрдп рдкрд╛рд╕ aimAngle * Mathf.Rad2Deg , рдЬреЛ рд░реЗрдбрд┐рдпрди рдХреЛрдг рдХреЛ рдбрд┐рдЧреНрд░реА рдореЗрдВ рдХреЛрдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред
  5. рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореЙрдирд┐рдЯрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рд▓рдЧрд╛рддрд╛рд░ transform.Position рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
  6. рдЕрдВрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ if..else рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЬрд▓реНрдж рд╣реА рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд░рд╕реНрд╕реА рдПрдВрдХрд░ рдкреЙрдЗрдВрдЯ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИ рдпрд╛ рдирд╣реАрдВред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд╕рдВрдкрд╛рджрдХ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред

рдЦрд┐рд▓рд╛рдбрд╝реА рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд░реЛрдкрд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдХреЛ рд▓рдЯрдХрд╛рдПрдВ рдЬреЛ рд╣рдордиреЗ рд░реЛрдкрд╕рд┐рд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдирд╛рдП рдереЗред рдЙрдкрдпреБрдХреНрдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдбреНрд░реИрдЧ рдкреНрд▓реЗрдпрд░ , рдХреНрд░реЙрд╕рд╣реЗрдпрд░ рдФрд░ рд░реЛрдкрд╣рд┐рдиреНрдЧрдЕрдВрдЪрд░ :

  • рд░реЛрдк рд╣рд┐рдВрдЬ рдПрдВрдХрд░ : рд░реЛрдкрд╣рд┐рдВрдЧ рдПрдВрдХрд░
  • рд░рд╕реНрд╕реА рд╕рдВрдпреБрдХреНрдд : рдЦрд┐рд▓рд╛рдбрд╝реА
  • рдХреНрд░реЙрд╕рд╣реЗрдпрд░ : рдХреНрд░реЙрд╕рд╣реЗрдпрд░
  • рдХреНрд░реЙрд╕рд╣реЗрдпрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯ : рдХреНрд░реЙрд╕рд╣реЗрдпрд░
  • рдкреНрд▓реЗрдпрд░ рдореВрд╡рдореЗрдВрдЯ : рдкреНрд▓реЗрдпрд░


рдЕрдм рд╣рдо рдЗрди рд╕рднреА рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛рдУрдВ рдХреЛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдРрд╕рд╛ рдХреЛрдИ рджреГрд╢реНрдп рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рджрд┐рдЦрд╛ рд╕рдХреЗред рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ, рд╣рдо рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдХрд░реЗрдВрдЧреЗред

рд░рд╕реНрд╕реАрд╕рд┐рд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:

 private void SetCrosshairPosition(float aimAngle) { if (!crosshairSprite.enabled) { crosshairSprite.enabled = true; } var x = transform.position.x + 1f * Mathf.Cos(aimAngle); var y = transform.position.y + 1f * Mathf.Sin(aimAngle); var crossHairPosition = new Vector3(x, y, 0); crosshair.transform.position = crossHairPosition; } 

рдпрд╣ рд╡рд┐рдзрд┐ рд╕рдВрдЪрд╛рд░рд┐рдд aimAngle (рдлреНрд▓реЛрдЯ рдорд╛рди рдЬрд┐рд╕реЗ рд╣рдордиреЗ Update() рдореЗрдВ рдЧрдгрдирд╛ рдХреА рд╣реИ Update() рдЖрдзрд╛рд░ рдкрд░ рджреГрд╖реНрдЯрд┐ рдХреЛ рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ 1 рдпреВрдирд┐рдЯ рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде рдШреВрдорддрд╛ рд░рд╣реЗред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╕реНрдХреЛрдк рднреА рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред

Update() рд╣рдо !ropeAttached рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХреЛ рдЪреЗрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП !ropeAttached рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рддрд░рд╣ !ropeAttached :

 if (!ropeAttached) { SetCrosshairPosition(aimAngle); } else { crosshairSprite.enabled = false; } 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрдЪрд╛рдПрдВ рдФрд░ рдЦреЗрд▓ рдХреЛ рдЪрд▓рд╛рдПрдВред рдЕрдм рд╣рдорд╛рд░реЗ рд╕реНрд▓рдЧ рдХреЛ рдПрдХ рджреГрд╖реНрдЯрд┐ рд╕реЗ рдирд┐рд╢рд╛рдирд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред


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

RopeSystem рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЪрд░ рдХреЗ рдиреАрдЪреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:

 public LineRenderer ropeRenderer; public LayerMask ropeLayerMask; private float ropeMaxCastDistance = 20f; private List<Vector2> ropePositions = new List<Vector2>(); 

рд▓рд╛рдЗрди рд░реЗрдВрдбрд░рд░ рдореЗрдВ рд▓рд╛рдЗрди рд░реЗрдВрдбрд░рд░ рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрдЧрд╛ рдЬреЛ рд░рд╕реНрд╕реА рдЦреАрдВрдЪрддрд╛ рд╣реИред рд▓реЗрдпрд░рдорд╛рд╕реНрдХ рдЖрдкрдХреЛ рднреМрддрд┐рдХреА рдкрд░рддреЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред ropeMaxCastDistance рд╡реИрд▓реНрдпреВ рдЕрдзрд┐рдХрддрдо рджреВрд░реА рддрдп рдХрд░рддреА рд╣реИ рдЬреЛ рд░реЗрдХрд╛рд╕реНрдЯ "рд╢реВрдЯ" рдХрд░ рд╕рдХрддреА рд╣реИред

рдЕрдВрдд рдореЗрдВ, рд╡реЗрдХреНрдЯрд░ 2 рдХреЗ рдкрджреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рд░рд╕реНрд╕реА рд▓рдкреЗрдЯрдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕реЗ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирдИ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:

 // 1 private void HandleInput(Vector2 aimDirection) { if (Input.GetMouseButton(0)) { // 2 if (ropeAttached) return; ropeRenderer.enabled = true; var hit = Physics2D.Raycast(playerPosition, aimDirection, ropeMaxCastDistance, ropeLayerMask); // 3 if (hit.collider != null) { ropeAttached = true; if (!ropePositions.Contains(hit.point)) { // 4 //    ,    -  . transform.GetComponent<Rigidbody2D>().AddForce(new Vector2(0f, 2f), ForceMode2D.Impulse); ropePositions.Add(hit.point); ropeJoint.distance = Vector2.Distance(playerPosition, hit.point); ropeJoint.enabled = true; ropeHingeAnchorSprite.enabled = true; } } // 5 else { ropeRenderer.enabled = false; ropeAttached = false; ropeJoint.enabled = false; } } if (Input.GetMouseButton(1)) { ResetRope(); } } // 6 private void ResetRope() { ropeJoint.enabled = false; ropeAttached = false; playerMovement.isSwinging = false; ropeRenderer.positionCount = 2; ropeRenderer.SetPosition(0, transform.position); ropeRenderer.SetPosition(1, transform.position); ropePositions.Clear(); ropeHingeAnchorSprite.enabled = false; } 

рдпрд╣рд╛рдБ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХреНрдпрд╛ рд╣реИ:

  1. HandleInput рдХреЛ Update() рд▓реВрдк рд╕реЗ рдкреБрдХрд╛рд░рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдорд╛рдЙрд╕ рдмрдЯрди рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдкреЛрд▓ рдХрд░рддрд╛ рд╣реИред
  2. рдЬрдм рдПрдХ рдмрд╛рдпрд╛рдБ-рдХреНрд▓рд┐рдХ рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд░рд╕реНрд╕реА рд░реЗрдЦрд╛ рдЪрд╛рд▓реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ 2D- рд░реЗрдХрд╛рд╕реНрдЯ рдХреЛ рд▓рдХреНрд╖реНрдп рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХрддрдо рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ рддрд╛рдХрд┐ рд╣реБрдХ рдмрд┐рд▓реНрд▓реА рдХреЛ рдПрдХ рдЕрдирдВрдд рджреВрд░реА рдкрд░ рдЧреЛрд▓реА рди рдорд╛рд░реА рдЬрд╛ рд╕рдХреЗ, рдФрд░ рдПрдХ рдореБрдЦреМрдЯрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рднреМрддрд┐рдХреА рдХреА рдкрд░рддреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ, рдЬрд┐рд╕рдореЗрдВ рд░реЗрдХрд╛рд╕реНрдЯ рдЯрдХрд░рд╛ рд╕рдХрддрд╛ рд╣реИред
  3. рдпрджрд┐ рдПрдХ рд░реЗрдХрд╛рд╕реНрдЯ рд╣рд┐рдЯ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рддреЛ ropeAttached true , рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╕реНрд╕реА рдХреЗ рдХреЛрдиреЗ рдХреЗ рдкрджреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреЛрдИ рдмрд┐рдВрджреБ рдирд╣реАрдВ рд╣реИред
  4. рдпрджрд┐ рдкрд░реАрдХреНрд╖рдг рд╕рд╣реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд▓ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЖрд╡реЗрдЧ рдХреЛ рд╕реНрд▓рдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдЬрдореАрди рд╕реЗ рдКрдкрд░ ropeJoint , ropeJoint ( ropeJoint ) рдХреЛ рдЪрд╛рд▓реВ ropeJoint , рдЬреЛ рд╕реНрд▓рдЧ рдФрд░ рд░реЗрдпрд╛рд╕реНрдЯ рд╣рд┐рдЯ рдмрд┐рдВрджреБ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЗ рдмрд░рд╛рдмрд░ рджреВрд░реА рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рд▓рдВрдЧрд░ рдмрд┐рдВрджреБ рд╕реНрдкреНрд░рд╛рдЗрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
  5. рдпрджрд┐ рд░реЗрдХрд╛рд╕реНрдЯ рдХреБрдЫ рднреА рд╣рд┐рдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд▓рд╛рдЗрди рд░реЗрдВрдбрд░рд░ рдФрд░ рд░рд╕реНрд╕реАрдЬреЙрдЗрдВрдЯ рдЕрдХреНрд╖рдо рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ ropeAttached рдзреНрд╡рдЬ рдЭреВрдард╛ рд╣реИред
  6. рдпрджрд┐ рд╕рд╣реА рдорд╛рдЙрд╕ рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ResetRope() рд╡рд┐рдзрд┐ рдХреЛ ResetRope() , рдЬреЛ рд░рд╕реНрд╕реА / рд╣реБрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╣реБрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдорд╛рд░реЗ Update рд╡рд┐рдзрд┐ рдХреЗ рд╕рдмрд╕реЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдирдП HandleInput() рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП aimDirection рдкрд╛рд╕ рдХрд░реЗрдВ:

 HandleInput(aimDirection); 

RopeSystem.cs рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд╕рдВрдкрд╛рджрдХ рдкрд░ рд▓реМрдЯреЗрдВред

рд░рд╕реНрд╕реА рдЬреЛрдбрд╝рдирд╛


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

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

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

рдкреНрд▓реЗрдпрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ LineRenderer рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВред рдЪреМрдбрд╝рд╛рдИ рдХреЛ 0.075 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рд╕рд╛рдордЧреНрд░реА рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ рдФрд░, рддрддреНрд╡ 0 рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рдордЧреНрд░реА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд░реЛрдкрдореИрдЯ рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЖрдЦрд┐рд░ рдореЗрдВ рд▓рд╛рдЗрди рд░реЗрдВрдбрд░рд░ рдХреЗ рд▓рд┐рдП, рдЯреЗрдХреНрд╕рдЪрд░ рдореЛрдб рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдЯреНрд░реАрдмреНрдпреВрдЯ рдкреНрд░рддрд┐ рд╕реЗрдЧрдореЗрдВрдЯ рдЪреБрдиреЗрдВ ред


рд░реЛрдк рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХ рдХреЗ рд░реЛрдк рд░реЗрдВрдбрд░рд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд▓рд╛рдЗрди рд░реЗрдВрдбрд░рд░ рдШрдЯрдХ рдХреЛ рдЦреАрдВрдЪреЗрдВред

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


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


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

рд▓реЗрдХрд┐рди рдЪрд┐рдВрддрд╛ рдордд рдХрд░реЛ, рдЕрдм рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред

RopeSystem.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ , рдХреНрд▓рд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдирдпрд╛ рдСрдкрд░реЗрдЯрд░ рдЬреЛрдбрд╝реЗрдВ:

 using System.Linq; 

рдпрд╣ рд╣рдореЗрдВ LINQ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрд╕ рд╣рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ ropePositions рд╕реВрдЪреА рдХреЗ рдкрд╣рд▓реЗ рдпрд╛ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

рдиреЛрдЯ : рднрд╛рд╖рд╛-рдПрдХреАрдХреГрдд рдХреНрд╡реЗрд░реА (LINQ) рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХрд╛ рдирд╛рдо рд╣реИ рдЬреЛ рд╕реАрдзреЗ рд╕реА # рдореЗрдВ рдХреНрд╡реЗрд░реА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдпрд╣рд╛рдБ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдиреНрдп рдЪрд░ рдХреЗ рдЕрдВрддрд░реНрдЧрдд distanceSet рдХреЗ рдирд╛рдо рд╕реЗ рдПрдХ рдирдпрд╛ рдмреВрд▓ рдирд┐рдЬреА рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:

 private bool distanceSet; 

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

рдЕрдм рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд▓рд╛рдЗрди рдХреЛ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╕реНрд╕реА рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдкрджреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдФрд░ рд░рд╕реНрд╕реА ( ropePositions ) рдХреЗ рд╕рд╛рде рдкрджреЛрдВ рдХреА рд╕рдВрдЧреНрд░рд╣реАрдд рд╕реВрдЪреА рдореЗрдВ рджреВрд░реА рдХреА рд╕рдВрдпреБрдХреНрдд рджреВрд░реА рдирд┐рд░реНрдзрд╛рд░рд┐рдд ropePositions :

 private void UpdateRopePositions() { // 1 if (!ropeAttached) { return; } // 2 ropeRenderer.positionCount = ropePositions.Count + 1; // 3 for (var i = ropeRenderer.positionCount - 1; i >= 0; i--) { if (i != ropeRenderer.positionCount - 1) // if not the Last point of line renderer { ropeRenderer.SetPosition(i, ropePositions[i]); // 4 if (i == ropePositions.Count - 1 || ropePositions.Count == 1) { var ropePosition = ropePositions[ropePositions.Count - 1]; if (ropePositions.Count == 1) { ropeHingeAnchorRb.transform.position = ropePosition; if (!distanceSet) { ropeJoint.distance = Vector2.Distance(transform.position, ropePosition); distanceSet = true; } } else { ropeHingeAnchorRb.transform.position = ropePosition; if (!distanceSet) { ropeJoint.distance = Vector2.Distance(transform.position, ropePosition); distanceSet = true; } } } // 5 else if (i - 1 == ropePositions.IndexOf(ropePositions.Last())) { var ropePosition = ropePositions.Last(); ropeHingeAnchorRb.transform.position = ropePosition; if (!distanceSet) { ropeJoint.distance = Vector2.Distance(transform.position, ropePosition); distanceSet = true; } } } else { // 6 ropeRenderer.SetPosition(i, transform.position); } } } 

рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рдмрддрд╛рдПрдВ:

  1. рд░рд╕реНрд╕реА рд╕рдВрд▓рдЧреНрди рди рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдзрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗрдВред
  2. рд╣рдо рд░реЛрдк рд▓рд╛рдЗрди рдХреЗ рд░реЗрдВрдбрд░ рдкреЙрдЗрдВрдЯреНрд╕ рдХреА рд╡реИрд▓реНрдпреВ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд░реЛрдк рдкреЛрдЬрд┐рд╢рди рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд┐рдП рдЧрдП ropePositions рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрдзрд┐рдХ 1 (рдкреНрд▓реЗрдпрд░ рдХреА рдкреЛрдЬреАрд╢рди рдХреЗ рд▓рд┐рдП) рд╣реИред
  3. рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ (рдЕрдВрддрд┐рдо рдХреЛ рдЫреЛрдбрд╝рдХрд░) рдХреЗ рд▓рд┐рдП ropePositions рд╕реВрдЪреА рдФрд░ рд▓реВрдк рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓реВрдк рдХрд░рддреЗ рд╣реИрдВ, ropePositions рд╕реВрдЪреА рдореЗрдВ рд▓реВрдк рдЗрдВрдбреЗрдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд ropePositions рд╕реНрдерд┐рддрд┐ рдХреЗ рдорд╛рди рдХреЛ рд▓рд╛рдЗрди рд░реЗрдВрдбрд░рд░ рдХреЗ рд╢реАрд░реНрд╖ рдХреА рд╕реНрдерд┐рддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
  4. рд░рд╕реНрд╕реА рдХреЗ рдЕрдВрдд рдмрд┐рдВрджреБ рд╕реЗ рджреВрд╕рд░реА рдЬрдЧрд╣ рд░рд╕реНрд╕реА рдХреЗ рд▓рдВрдЧрд░ рдмрд┐рдВрджреБ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХрд╛рдЬ / рд▓рдВрдЧрд░ рдмрд┐рдВрджреБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд╕реНрд╕реА рдХреА рдХреЗрд╡рд▓ рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИ, рддреЛ рдЗрд╕реЗ рд▓рдВрдЧрд░ рдмрд┐рдВрджреБ рдмрдирд╛рдПрдВред рддреЛ рд╣рдо рджреВрд░реА ropeJoint рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдФрд░ рд░рд╕реНрд╕реА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА, рдЬреЛ рд╣рдо рд▓реВрдк рдореЗрдВ ropeJoint ред
  5. рдпрджрд┐ рдирд┐рд░реНрдорд╛рдг рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд▓реВрдк рдореЗрдВ рд░рд╕реНрд╕реА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдЕрдВрдд рд╕реЗ рджреВрд╕рд░реА рд╣реИ; рдпрд╛рдиреА рд╡рд╣ рдмрд┐рдВрджреБ рдЬрд┐рд╕ рдкрд░ рд░рд╕реНрд╕реА рд╡рд╕реНрддреБ рд╕реЗ рдЬреБрдбрд╝рддреА рд╣реИ, рдЕрд░реНрдерд╛рддреНред рд╡рд░реНрддрдорд╛рди рдХрд╛рдЬ / рд▓рдВрдЧрд░ рдмрд┐рдВрджреБред
  6. рдпрд╣ else рдмреНрд▓реЙрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдорд╛рди рдХреЛ рд░рд╕реНрд╕реА рдХреЗ рдЕрдВрддрд┐рдо рд╢реАрд░реНрд╖ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред

UpdateRopePositions() рдХреЙрд▓ рдХреЛ Update() рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ UpdateRopePositions() :

 UpdateRopePositions(); 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЦреЗрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдБред рд▓рдХреНрд╖реНрдп рд╕реЗ рдКрдкрд░ рдПрдХ рдкрддреНрдерд░ рдкрд░ рдПрдХ рд╣реБрдХ рдХреЗ рд╕рд╛рде рдирд┐рд╢рд╛рдирд╛ рд▓рдЧрд╛рдХрд░ рдФрд░ рд╢реВрдЯрд┐рдВрдЧ рдХрд░рдХреЗ рдПрдХ "рдЫреЛрдЯреА рдЬрдЧрд╣" рдХреЛ рдПрдХ рдЫреЛрдЯреА рдЫрд▓рд╛рдВрдЧ рдмрдирд╛рдПрдВред рдЕрдм рдЖрдк рдЕрдкрдиреЗ рдордЬрджреВрд░реЛрдВ рдХреЗ рдлрд▓реЛрдВ рдХрд╛ рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ - рдкрддреНрдерд░реЛрдВ рдкрд░ рд╢рд╛рдВрдд рддрд░реАрдХреЗ рд╕реЗ рдврд▓рд╛рдиред


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


рд▓рдкреЗрдЯрдиреЗ рдХреЗ рдЕрдВрдХ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛


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


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

рдПрдХрдорд╛рддреНрд░ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╣рдо рд░рд╕реНрд╕реА рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкрджреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рдкреБрд░рд╛рдиреА рд░реЗрдХрд╛рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рд╣реИ!


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

RopeSystem.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:

 // 1 private Vector2 GetClosestColliderPointFromRaycastHit(RaycastHit2D hit, PolygonCollider2D polyCollider) { // 2 var distanceDictionary = polyCollider.points.ToDictionary<Vector2, float, Vector2>( position => Vector2.Distance(hit.point, polyCollider.transform.TransformPoint(position)), position => polyCollider.transform.TransformPoint(position)); // 3 var orderedDictionary = distanceDictionary.OrderBy(e => e.Key); return orderedDictionary.Any() ? orderedDictionary.First().Value : Vector2.zero; } 

рдпрджрд┐ рдЖрдк LINQ рдкреНрд░рд╢реНрдиреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрдб рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЬрдЯрд┐рд▓ C # рдЬрд╛рджреВ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред


рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдбрд░реЗрдВ рдирд╣реАрдВред LINQ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  1. рдпрд╣ рд╡рд┐рдзрд┐ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд▓реЗрддреА рд╣реИ - RaycastHit2D рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ PolygonCollider2D рдСрдмреНрдЬреЗрдХреНрдЯ ред рд╕реНрддрд░ рдкрд░ рд╕рднреА рдкрддреНрдерд░реЛрдВ рдореЗрдВ PolygonCollider2D рдХреЛрд▓рд╛рдЗрдбрд░ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╣рдо рд╣рдореЗрд╢рд╛ PolygonCollider2D рдЖрдХреГрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
  2. рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ LINQ рдХреНрд╡реЗрд░реА рдореИрдЬрд┐рдХ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ! рдпрд╣рд╛рдВ рд╣рдо рдкреЙрд▓реАрдЧреЙрдирд▓ рдХреЛрд▓рд╛рдЗрдбрд░ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рд╡реЗрдХреНрдЯрд░ 2 (рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХрд╛ рдореВрд▓реНрдп рд╕реНрд╡рдпрдВ рд╕реНрдерд┐рддрд┐ рд╣реИ) рдХреЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреА рдХреБрдВрдЬреА рдХреЛ рдЗрд╕ рдмрд┐рдВрджреБ рд╕реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕реНрдерд┐рддрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА (рдлреНрд▓реЛрдЯ рдорд╛рди) рдХреА рджреВрд░реА рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдХрднреА-рдХрднреА рдпрд╣рд╛рдВ рдХреБрдЫ рдФрд░ рд╣реЛрддрд╛ рд╣реИ: рдкрд░рд┐рдгрд╛рдореА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЛрд▓рд╛рдЗрдбрд░ рдХреЗ рдкрджреЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЙрд╕ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд╛рдиреАрдп рд╕рдВрдмрдВрдз рдЬрд┐рд╕рд╕реЗ рдХреЛрд▓рд╛рдЗрдбрд░ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдФрд░ рд╣рдореЗрдВ рд╡рд┐рд╢реНрд╡ рд╕реНрдерд╛рди рдореЗрдВ рдкрджреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
  3. рд╢рдмреНрджрдХреЛрд╢ рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдирд┐рдХрдЯрддрдо рджреВрд░реА рд╕реЗред рдирд┐рдХрдЯрддрдо рджреВрд░реА рд╡рд╛рдкрд╕ рдЖ рдЧрдИ рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рдмрд┐рдВрджреБ рдЦрд┐рд▓рд╛рдбрд╝реА рдФрд░ рд░рд╕реНрд╕реА рдХреЗ рдХрд╛рдЬ рдХреЗ рдмреАрдЪ рдХрд╛ рдмрд┐рдВрджреБ рд╣реИ!

рдЖрдЗрдП рд╡рд╛рдкрд╕ рд░реЛрдкрд╕рд┐рд╕реНрдЯрдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдирдпрд╛ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:

 private Dictionary<Vector2, int> wrapPointsLookup = new Dictionary<Vector2, int>(); 

рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдкрджреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдЬрд┐рдирдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рд╕реНрд╕реА рд▓рдкреЗрдЯ рд╕рдХрддреА рд╣реИред

Update() рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╡рд╣реА рдирд┐рд░реНрдорд╛рдг рдвреВрдВрдвреЗрдВ рдЬрд┐рд╕рдореЗрдВ crosshairSprite.enabled = false; рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 // 1 if (ropePositions.Count > 0) { // 2 var lastRopePoint = ropePositions.Last(); var playerToCurrentNextHit = Physics2D.Raycast(playerPosition, (lastRopePoint - playerPosition).normalized, Vector2.Distance(playerPosition, lastRopePoint) - 0.1f, ropeLayerMask); // 3 if (playerToCurrentNextHit) { var colliderWithVertices = playerToCurrentNextHit.collider as PolygonCollider2D; if (colliderWithVertices != null) { var closestPointToHit = GetClosestColliderPointFromRaycastHit(playerToCurrentNextHit, colliderWithVertices); // 4 if (wrapPointsLookup.ContainsKey(closestPointToHit)) { ResetRope(); return; } // 5 ropePositions.Add(closestPointToHit); wrapPointsLookup.Add(closestPointToHit, 0); distanceSet = false; } } } 

рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдордЭрд╛рдЗрдП:

  1. рдпрджрд┐ рдХреБрдЫ рдкрджреЛрдВ рдХреЛ ropePositions рд╕реВрдЪреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ ...
  2. рд╣рдо рд╕реВрдЪреА рд╕реЗ рд░рд╕реНрд╕реА рдХреА рдЕрдВрддрд┐рдо рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЗрдЦрдиреЗ рд╡рд╛рд▓реЗ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╢реВрдЯ рдХрд░рддреЗ рд╣реИрдВ - рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдЬрд┐рд╕ рдкрд░ рдмрд┐рд▓реНрд▓реА рдиреЗ рдкрддреНрдерд░ рдХреЛ рдЭреБрдХрд╛ рджрд┐рдпрд╛ - рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЗ рдмрд░рд╛рдмрд░ рд░реЗрдХрд╛рд╕реНрдЯ рдХреА рджреВрд░реА рдФрд░ рд░рд╕реНрд╕реА рдХреЗ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ рдХреА рд╕реНрдерд┐рддрд┐ред
  3. рдпрджрд┐ рд░реЗрдХрд╛рд╕реНрдЯ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреЛрд▓рд╛рдЗрдбрд░ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреЙрд▓реАрдЧреЛрдирдХреЙрд▓рд┐рдбрд░ 2 рдбреА рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рдЪреНрдЪрд╛ PolygonCollider2D рд╣реИ, рдЗрд╕ рдХреЛрд▓рд╛рдЗрдбрд░ рдХреА рдирд┐рдХрдЯрддрдо рд╢реАрд░реНрд╖ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╣рдо рд╡реЗрдХреНрдЯрд░ 2 рдХреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗ рдЧрдП рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред
  4. рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЙрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдБрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ wrapPointsLookup рджреНрд╡рд╛рд░рд╛ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╣рдо рд░рд╕реНрд╕реА рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд╛рдЯ рджреЗрддреЗ рд╣реИрдВ, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЧрд┐рд░рд╛ рджреЗрддреЗ рд╣реИрдВред
  5. рдлрд┐рд░ ropePositions рд╕реВрдЪреА ropePositions : рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд░рд╕реНрд╕реА ropePositions рдЪрд╛рд╣рд┐рдПред wrapPointsLookup рд╢рдмреНрджрдХреЛрд╢ рднреА рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, UpdateRopePositions() рдлреНрд▓реИрдЧ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ UpdateRopePositions() рд╡рд┐рдзрд┐ рд░рд╕реНрд╕реА рдХреА рд▓рдВрдмрд╛рдИ рдФрд░ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ рд╕рд╛рде рд░рд╕реНрд╕реА рдХреА рджреВрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХреЗред

ResetRope() рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ ResetRope() рддрд╛рдХрд┐ рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рджреНрд╡рд╛рд░рд╛ рдПрдХ рд░рд╕реНрд╕реА рдХреЛ рдХрд╛рдЯ рджреЗрдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ wrapPointsLookup рдбрд┐рдХреНрд╢рдирд░реА рд╕рд╛рдлрд╝ рд╣реЛ рдЬрд╛рдП:

 wrapPointsLookup.Clear(); 

рдЧреЗрдо рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рд╕реНрд▓рдЧ рдХреЗ рдКрдкрд░ рдкрддреНрдерд░ рдХреЗ рд╣реБрдХ рдореЗрдВ рдмрд┐рд▓реНрд▓реА рдХреЗ рд╣реБрдХ рдХреЛ рдЧреЛрд▓реА рдорд╛рд░реЛ рдФрд░ рдХрдИ рдкрддреНрдерд░ рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдкрд░ рд╕реНрд▓рдЧ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрд╢реНрдп рд╡рд┐рдВрдбреЛ рдореЗрдВ рдореВрд╡ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╕реНрд╕реА рд╕рд┐рдЦрд╛рдИ!

рд░реЙрдХрд┐рдВрдЧ рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВ


рд░рд╕реНрд╕реА рдкрд░ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╕реНрд▓рдЧ рдмрд╣реБрдд рд╕реНрдерд┐рд░ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрд╡рд┐рдВрдЧрд┐рдВрдЧ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЖрдЧреЗ рдХреА рддрд░рдл (рдмрдЧрд╝рд▓ рдореЗрдВ) рдЭреВрд▓рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЪрд╛рд╣реЗ рдЬрд┐рд╕ рдХреЛрдг рд╕реЗ рд╡рд╣ рджреЗрдЦ рд░рд╣рд╛ рд╣реЛред

PlayerMovement.cs рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:

 public Vector2 ropeHook; public float swingForce = 4f; 

ropeHook рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд░реЛрдк рд╣реБрдХ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ swingForce рд╡рд╣ рдореВрд▓реНрдп рд╣реИ рдЬреЛ рд╣рдо рд╕реНрд╡рд┐рдВрдЧ рдореЛрд╢рди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

FixedUpdate() рд╡рд┐рдзрд┐ FixedUpdate() рдирдП рдХреЗ FixedUpdate() рдмрджрд▓реЗрдВ:

 void FixedUpdate() { if (horizontalInput < 0f || horizontalInput > 0f) { animator.SetFloat("Speed", Mathf.Abs(horizontalInput)); playerSprite.flipX = horizontalInput < 0f; if (isSwinging) { animator.SetBool("IsSwinging", true); // 1 -          var playerToHookDirection = (ropeHook - (Vector2)transform.position).normalized; // 2 -  ,     Vector2 perpendicularDirection; if (horizontalInput < 0) { perpendicularDirection = new Vector2(-playerToHookDirection.y, playerToHookDirection.x); var leftPerpPos = (Vector2)transform.position - perpendicularDirection * -2f; Debug.DrawLine(transform.position, leftPerpPos, Color.green, 0f); } else { perpendicularDirection = new Vector2(playerToHookDirection.y, -playerToHookDirection.x); var rightPerpPos = (Vector2)transform.position + perpendicularDirection * 2f; Debug.DrawLine(transform.position, rightPerpPos, Color.green, 0f); } var force = perpendicularDirection * swingForce; rBody.AddForce(force, ForceMode2D.Force); } else { animator.SetBool("IsSwinging", false); if (groundCheck) { var groundForce = speed * 2f; rBody.AddForce(new Vector2((horizontalInput * groundForce - rBody.velocity.x) * groundForce, 0)); rBody.velocity = new Vector2(rBody.velocity.x, rBody.velocity.y); } } } else { animator.SetBool("IsSwinging", false); animator.SetFloat("Speed", 0f); } if (!isSwinging) { if (!groundCheck) return; isJumping = jumpInput > 0f; if (isJumping) { rBody.velocity = new Vector2(rBody.velocity.x, jumpSpeed); } } } 

рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрджрд▓рд╛рд╡ рдпрд╣ рд╣реИ рдХрд┐ рдЭрдВрдбреЗ рдХреЛ рдкрд╣рд▓реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ isSwingingрддрд╛рдХрд┐ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗрд╡рд▓ рддрдм рдХреА рдЬрд╛рдП рдЬрдм рд╕реНрд▓рдЧ рдХреЛ рд░рд╕реНрд╕реА рдкрд░ рд▓рдЯрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛рдП, рдФрд░ рд╣рдо рд╕реНрд▓рдЧ рдХреЗ рдХреЛрдиреЗ рдкрд░ рдПрдХ рд▓рдВрдмрд╡рдд рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рдпрд╣ рд░рд╕реНрд╕реА рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рдПрдВрдХрд░ рдмрд┐рдВрджреБ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рд╕реНрд╡рд┐рдВрдЧ рдХреА рджрд┐рд╢рд╛ рдХреЗ рд▓рд┐рдП рд▓рдВрдмрд╡рддред

  1. рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рд╕реЗ рд╣реБрдХ рд▓рдЧрд╛рд╡ рдмрд┐рдВрджреБ рддрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рджрд┐рд╢рд╛ рд╡реЗрдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
  2. рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрд▓рдЧ рд╕рд╛рдЗрдб рд▓реЗрдлреНрдЯ рд╣реИ рдпрд╛ рд░рд╛рдЗрдЯ, рд╕реАрдзрд╛ рджрд┐рд╢рд╛ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ playerToHookDirectionред рдбрд┐рдмрдЧ рдбреНрд░рд╛ рдХреЙрд▓ рднреА рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рджреЗрдЦ рд╕рдХреЗрдВред

RopeSystem.cs рдЦреЛрд▓реЗрдВ рдФрд░ рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдЕрдиреНрдп рдмреНрд▓реЙрдХ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:if(!ropeAttached)Update()

 playerMovement.isSwinging = true; playerMovement.ropeHook = ropePositions.Last(); 

рдореЗрдВ рдЕрдЧрд░ рдмреНрд▓реЙрдХ рдПрдХ рд╣реА рдбрд┐рдЬрд╛рдЗрди рдХреА if(!ropeAttached), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВ:

 playerMovement.isSwinging = false; 

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

рдпрджрд┐ рдЖрдк рдПрдХ рдЪрд▓ рд░рд╣реЗ рдЦреЗрд▓ рдореЗрдВ рдЧрд┐рдЬрд╝реНрдореЛ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рд╕реНрд╡рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдП рдпрд╛ рдбреА рджрдмрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:


рд░рд╕реНрд╕реА рд╡рдВрд╢ рдЬреЛрдбрд╝рдирд╛


рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд╕реНрд╕реА рдХреЛ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ рд╕реНрд▓рдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рд░рд╕реНрд╕реА рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЙрда рд╕рдХрддрд╛ рдФрд░ рдЧрд┐рд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдРрд╕рд╛ рдЦреЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рд░рд╕реНрд╕реАрд╕рд┐рд╕реНрдЯрдо

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ , рджреЛ рдирдП рдлрд╝реАрд▓реНрдб рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:

 public float climbSpeed = 3f; private bool isColliding; 

climbSpeedрдЙрд╕ рдЧрддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕ рдкрд░ рд╕реНрд▓рдЧ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд░рд╕реНрд╕реА рдХреЛ isCollidingрд▓реЗ рдЬрд╛ рд╕рдХрддреА рд╣реИ , рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдзреНрд╡рдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рджреВрд░реА рд╕рдВрдпреБрдХреНрдд рд░рд╕реНрд╕реА рдХреА рджреВрд░реА рд╕рдВрдпреБрдХреНрдд рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдмрдврд╝рд╛рдпрд╛ рдпрд╛ рдШрдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдирдИ рд╡рд┐рдзрд┐ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:

 private void HandleRopeLength() { // 1 if (Input.GetAxis("Vertical") >= 1f && ropeAttached && !isColliding) { ropeJoint.distance -= Time.deltaTime * climbSpeed; } else if (Input.GetAxis("Vertical") < 0f && ropeAttached) { ropeJoint.distance += Time.deltaTime * climbSpeed; } } 

рдпрд╣ рдмреНрд▓реЙрдХ if..elseifрдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЕрдХреНрд╖ рдХреЗ рд╕рд╛рде рдЗрдирдкреБрдЯ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ (рдХреАрдмреЛрд░реНрдб рдкрд░ / рдиреАрдЪреЗ рдпрд╛ рдбрдмреНрд▓реНрдпреВ / рдПрд╕), рдФрд░, рдЭрдВрдбреЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, ropeAttached iscCollidingрджреВрд░реА рдХреЛ рдмрдврд╝рд╛рддрд╛ рдпрд╛ рдШрдЯрд╛рддрд╛ рд╣реИ ropeJoint, рдЬрд┐рд╕рд╕реЗ рд░рд╕реНрд╕реА рдХреЛ рд▓рдВрдмрд╛ рдпрд╛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рднрд╛рд╡ рдкреИрджрд╛ рд╣реЛрддрд╛ рд╣реИред

рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдХреЙрд▓ рдХреЛ рдЕрдВрдд рддрдХ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ Update():

 HandleRopeLength(); 

рд╣рдореЗрдВ рдЭрдВрдбрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рднреА рдЪрд╛рд╣рд┐рдП isCollidingред

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:

 void OnTriggerStay2D(Collider2D colliderStay) { isColliding = true; } private void OnTriggerExit2D(Collider2D colliderOnExit) { isColliding = false; } 

рдпреЗ рджреЛ рд╡рд┐рдзрд┐рдпрд╛рдБ рдореЛрдиреЛрдмреЗрд╣реМрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреА рдореВрд▓ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред

рдпрджрд┐ рдХреЛрд▓рд╛рдЗрдбрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЦреЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рднреМрддрд┐рдХ рд╡рд╕реНрддреБ рдХреЛ рдЫреВрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рд▓рдЧрд╛рддрд╛рд░ рдЖрдЧ OnTriggerStay2Dрд▓рдЧрд╛рдПрдЧрд╛, рдзреНрд╡рдЬ рдХреЛ рдПрдХ isCollidingрдорд╛рди рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ trueред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рд╕реНрд▓рдЧ рдкрддреНрдерд░ рдХреЛ рдЫреВрддрд╛ рд╣реИ, рддреЛ рдЖрдЗрд╕реЛрд▓реНрдбрд┐рдВрдЧ рдзреНрд╡рдЬ рдХреЛ рдПрдХ рдорд╛рди рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ trueред

рд╡рд┐рдзрд┐ рдХреЛ OnTriggerExit2DрдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдХреЛрд▓рд╛рдЗрдбрд░ рджреВрд╕рд░реЗ рдХреЛрд▓рд╛рдЗрдбрд░ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЭрдВрдбреЗ рдХреЛ рдЭреВрдард╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдзреНрдпрд╛рди рд░рдЦреЗрдВ: рд╡рд┐рдзрд┐ OnTriggerStay2Dрдмрд╣реБрдд рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рд░реВрдк рд╕реЗ рдорд╣рдВрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдХрд░реЗрдВред

рдЖрдЧреЗ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИ?


рдЧреЗрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдмрд╛рд░ рд░рд╕реНрд╕реА рдХреЛ рдКрдкрд░ рдФрд░ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд░реЛ рдХреАрдЬрд╝ рдпрд╛ рдбрдмреНрд▓реНрдпреВ / рдПрд╕ рджрдмрд╛рдПрдБред


рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдХреА рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╣рдо рдПрдХ рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ - рдиреЙрди-рд╕реНрд╡рд┐рдВрдЧрд┐рдВрдЧ рд╕реНрд▓рдЧ-рд╕реНрд▓рдЧ рд╕реЗ рд▓реЗрдХрд░ рдПрдХреНрд░реЛрдмреИрдЯрд┐рдХ рд╢реЗрд▓-рдлреНрд░реА рдЧреИрд╕реНрдЯреНрд░реЛрдкреЙрдб рдореЛрд▓рд╕реНрдХ!

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


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдпрд╣рд╛рдВ рдЧрд╛рдпрдм рд╣реИ - рдЬрдм рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд░рд╕реНрд╕реА "рдЦреЛрд▓рдирд╛" рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓

рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдВрдЧреЗред

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

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


All Articles