рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдЧреЗрдо рдХреЛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд░рдирд╛, рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рднрд╛рдЧ реи

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рднрд╛рдЧ рд╕реЗ рдЪреВрдХ рдЧрдП рдереЗ - рднрд╛рдЧ 1
рдЕрдЧрд▓рд╛ рднрд╛рдЧ - рднрд╛рдЧ рей

рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рдИрд╡реЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ, рддреЛ рдпрд╣рд╛рдВ рдЖрдк рд╣реИрдВ , рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред

рддреЛ, рд╣рдо рдПрдХ рдвреЗрд░ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ




рд░реЙрдХреЗрдЯ:

рдмреЗрд╕ рд░реЙрдХреЗрдЯ рдХреНрд▓рд╛рд╕
using DG.Tweening; using GlobalEventAggregator; using UnityEngine; namespace PlayerRocket { public class Rocket : PlayerRocketBase { [SerializeField] private float pathorrectionTime = 10; private Vector3 movingUp = new Vector3(0, 1, 0); protected override void StartEventReact(ButtonStartPressed buttonStartPressed) { transform.SetParent(null); rocketState = RocketState.MOVE; transform.DORotate(Vector3.zero, pathorrectionTime); } protected override void Start() { base.Start(); EventAggregator.Invoke(new RegisterUser { playerHelper = this }); if (rocketState == RocketState.WAITFORSTART) return; RocketBehaviour(); } private void FixedUpdate() { RocketBehaviour(); } private void RocketBehaviour() { switch (rocketState) { case RocketState.WAITFORSTART: if (inputController.OnTouch && !inputController.OnDrag) rocketHolder.RotateHolder(inputController.worldMousePos); break; case RocketState.MOVE: rigidbody.AddRelativeForce(Vector3.up*(config.Speed*Time.deltaTime)); forceModel.AddModificator(); break; case RocketState.STOP: Debug.Log(" "); rigidbody.velocity = Vector3.zero; rigidbody.drag = 50; rocketState = RocketState.COMPLETESTOP; break; case RocketState.COMPLETESTOP: break; default: rocketState = RocketState.COMPLETESTOP; break; } } } } 


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

  1. рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ
  2. рдЙрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
  3. рд╕рдВрд╢реЛрдзрдХ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрдВ
  4. рд░реЛрдХрдирд╛ рд╣реИ

рдпрд╛рдиреА рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░реЙрдХреЗрдЯ рдХрд╛ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ / рдЕрд╡рд╕реНрдерд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд░реЙрдХреЗрдЯ рдХреЛ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рдХрдИ рдореМрд▓рд┐рдХ рднрд┐рдиреНрди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

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

рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

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

  public enum RocketState { WAITFORSTART = 0, MOVE = 1, STOP = 2, COMPLETESTOP = 3, } 

рдорд╛рддрд╛-рдкрд┐рддрд╛ рд╡рд░реНрдЧ рдореЗрдВ рд╣рдорд╛рд░рд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╣реИ -
 protected RocketState rocketState; 

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдкрд╣рд▓рд╛ рдорд╛рди рдЗрд╕реЗ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред Enum рд╕реНрд╡рдпрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рдКрдкрд░ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЧреЗрдо рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдореИрдВрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдорд╛рди рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдХрд┐рд╕ рд▓рд┐рдП? рдХрд╣реАрдВ рднреА рдЗрдирд╛рдо рдореЗрдВ рдПрдХ рдФрд░ рдореВрд▓реНрдп рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдореИрдВ рдЖрдкрдХреЛ рдЭрдВрдбрд╛ рдПрдирдо рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рднреА рджреЗрддрд╛ рд╣реВрдВред

рдЕрдЧрд▓рд╛:

рд╣рдо рд░реЙрдХреЗрдЯрд╕реНрдЯреИрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдореЗрдВ рд╣реА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ

  private void FixedUpdate() { RocketBehaviour(); } private void RocketBehaviour() { switch (rocketState) { case RocketState.WAITFORSTART: if (inputController.OnTouch && !inputController.OnDrag) rocketHolder.RotateHolder(inputController.worldMousePos); break; case RocketState.MOVE: rigidbody.AddRelativeForce(Vector3.up*(config.Speed*Time.deltaTime)); forceModel.AddModificator(); break; case RocketState.STOP: Debug.Log(" "); rigidbody.velocity = Vector3.zero; rigidbody.drag = 50; rocketState = RocketState.COMPLETESTOP; break; case RocketState.COMPLETESTOP: break; default: rocketState = RocketState.COMPLETESTOP; break; } } 

рдореИрдВ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ:

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

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

рд╣рдордиреЗ рд░реЙрдХреЗрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдЕрдЧрд▓рд╛ рдЪрд░рдг рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд▓реЗрдХрд┐рди рдордЬрд╝реЗрджрд╛рд░ рд╡рд╕реНрддреБ рд╣реИ - рд╕реНрдЯрд╛рд░реНрдЯ рдмрдЯрдиред

рдмрдЯрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ


рдирд┐рдореНрди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреНрд▓рд┐рдХ рдХреА рдЧрдИ, рдЙрд╕рдиреЗ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рд╡реЗ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВред

рдмрдЯрди рдХрдХреНрд╖рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
 using UnityEngine; using UnityEngine.EventSystems; public class StartButton : MonoBehaviour, IPointerDownHandler { private bool isTriggered; private void ButtonStartPressed() { if (isTriggered) return; isTriggered = true; GlobalEventAggregator.EventAggregator.Invoke(new ButtonStartPressed()); Debug.Log(""); } public void OnPointerDown(PointerEventData eventData) { ButtonStartPressed(); } } public struct ButtonStartPressed { } 


рдЧреЗрдо рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ рдордВрдЪ рдкрд░ рдПрдХ 3 рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдмрдЯрди рдХреЛ рд╢реБрд░реБрдЖрддреА рдЧреНрд░рд╣ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рд╡рд╣рд╛рдБ рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рд╣реИ - рдПрдХ рджреГрд╢реНрдп рдореЗрдВ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдкрд░ рдПрдХ рдХреНрд▓рд┐рдХ рдХреЛ рдХреИрд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рдЕрдЧрд░ рд╣рдо рдЧреВрдЧрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдСрдирдорд╛рдЙрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдПрдХ рдХреНрд▓рд┐рдХ рд╣реЛрдЧрд╛ред рдпрд╣ рдПрдХ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рдХреА рддрд░рд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдмреБрд░рд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдХреНрд╕рд░ рдЯреЗрдврд╝рд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдХреНрд▓рд┐рдХреНрд╕ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рд╣реИрдВ), "рдкреНрд░рд┐рдп", рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯрди рдХреЗ рдмрдиреНрд╕ рдХреЛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдпреВрдирд┐рдЯреАрдЬрд╛рдЗрди.рдЗрд╡реЗрдВрдЯрд╕рд┐рд╕реНрдЯрдореНрд╕ рдореЗрдВ рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ UnityEngine.EventSystems рдФрд░ рдЗрдВрдЯрд░рдлреЗрд╕ IPointerDownHandler, IPointerClickHandler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЙрдирдХреА рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ, рд╣рдореЗрдВ рджрдмрд╛рдиреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред

  1. рдПрдХ EventSystem рджреГрд╢реНрдп рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╣ рдЗрдХрд╛рдИ рдХрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ / рд╡рд░реНрдЧ / рдШрдЯрдХ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдЬрдм рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд▓рд┐рдП рдХреИрдирд╡рд╛рд╕ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
  2. рднреМрддрд┐рдХреА рд░реЗрдХрд╛рд╕реНрдЯрд░ рдХреЛ рдХреИрдорд░реЗ рдкрд░ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ 3 рдбреА рдХреЗ рд▓рд┐рдП рд╣реИ, 2 рдбреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд░реИрд╕реНрдЯрд░рд╕реНрдЯрд░ рд╣реИ)
  3. рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдПрдХ рдХреЛрд▓рд╛рдЗрдбрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЕрдм рдСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд┐рдХ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 public void OnPointerDown(PointerEventData eventData) { ButtonStartPressed(); } private void ButtonStartPressed() { if (isTriggered) return; isTriggered = true; GlobalEventAggregator.EventAggregator.Invoke(new ButtonStartPressed()); Debug.Log(""); } 

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

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмреВрд▓рд┐рдпрди рдлрд╝реАрд▓реНрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдмрдЯрди рджрдмрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╛ рдирд╣реАрдВ (рдпрд╣ рдмрд╛рд░-рдмрд╛рд░ рджрдмрд╛рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рд░ рдмрд╛рд░ рд╕реНрдЯрд╛рд░реНрдЯ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рди рд╣реЛ)ред

рдЕрдЧрд▓рд╛, рд╣рдо рдШрдЯрдирд╛ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВ - рдмрдЯрди рджрдмрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд░реЙрдХреЗрдЯ рд╡рд░реНрдЧ рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░реЙрдХреЗрдЯ рдХреЛ рдЧрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

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

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

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрде рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЙрдХреЗрдЯ рд░реЛрдЯреЗрд╢рди



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

рд▓реЗрдХрд┐рди рдХреНрд░рдо рдореЗрдВ:

  1. рд╣рдореЗрдВ рдкрд╣рд┐рдП рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЧреНрд░рд╣ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд░реЙрдХреЗрдЯ рдХреЛ рдШреБрдорд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ
  2. рд╣рдореЗрдВ рд░реЛрдЯреЗрд╢рди рдПрдВрдЧрд▓ рдХреЛ рдХреНрд▓реИрдВрдк рдХрд░рдирд╛ рд╣реЛрдЧрд╛

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

рдЕрдм, рдкрд╣рд┐рдП рдХреА рдУрд░ рдореБрдбрд╝рдиреЗ рдФрд░ рдореБрдбрд╝рдиреЗ рдкрд░ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ:

рдХрдХреНрд╖рд╛ рд░реЙрдХреЗрдЯрд╣реЙрд▓реНрдбрд░
 using UnityEngine; public class RocketHolder : MonoBehaviour { [SerializeField] private float clampAngle = 45; private void Awake() { GlobalEventAggregator.EventAggregator.AddListener(this, (InjectEvent<RocketHolder> obj) => obj.inject(this)); } private float ClampAngle(float angle, float from, float to) { if (angle < 0f) angle = 360 + angle; if (angle > 180f) return Mathf.Max(angle, 360 + from); return Mathf.Min(angle, to); } private Vector3 ClampRotationVectorZ (Vector3 rotation ) { return new Vector3(rotation.x, rotation.y, ClampAngle(rotation.z, -clampAngle, clampAngle)); } public void RotateHolder(Vector3 targetPosition) { var diff = targetPosition - transform.position; diff.Normalize(); float rot_z = Mathf.Atan2(diff.y, diff.x) * Mathf.Rad2Deg; transform.rotation = Quaternion.Euler(0f, 0f, rot_z - 90); transform.eulerAngles = ClampRotationVectorZ(transform.rotation.eulerAngles); } } 


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

InputController


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

  1. рдХреНрдпрд╛ рдПрдХ рдХреНрд▓рд┐рдХ рдФрд░ рдЙрд╕рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реИрдВ
  2. рдХреНрдпрд╛ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдХрдбрд╝реА рдЪреЛрдЯ рд╣реИ рдФрд░ рдХрд┐рддрдирд╛ рд╕реНрд╡рд╛рдЗрдк рдХрд░рдирд╛ рд╣реИ
  3. рдХреНрдпрд╛ рдореИрдВ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ / рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ

рд╡рд░реНрдЧ InputController
 using System; using UnityEngine; using UnityEngine.EventSystems; public class InputController : MonoBehaviour { public const float DirectionRange = 10; private Vector3 clickedPosition; [Header("     ")] [SerializeField] private float afterThisDistanceWeGonnaDoSwipe = 0.5f; [Header("  ")] [SerializeField] private float speedOfVerticalScroll = 2; public ReactiveValue<float> ReactiveVerticalScroll { get; private set; } public Vector3 worldMousePos => Camera.main.ScreenToWorldPoint(Input.mousePosition); public bool OnTouch { get; private set; } public bool OnDrag { get; private set; } // Start is called before the first frame update private void Awake() { ReactiveVerticalScroll = new ReactiveValue<float>(); GlobalEventAggregator.EventAggregator.AddListener(this, (ImOnDragEvent obj) => OnDrag = obj.IsDragging); GlobalEventAggregator.EventAggregator.AddListener<InjectEvent<InputController>>(this, InjectReact); } private void InjectReact(InjectEvent<InputController> obj) { obj.inject(this); } private void OnEnable() { GlobalEventAggregator.EventAggregator.Invoke(this); } void Start() { GlobalEventAggregator.EventAggregator.Invoke(this); } private void MouseInput() { if (EventSystem.current.IsPointerOverGameObject() && EventSystem.current.gameObject.layer == 5) return; if (Input.GetKeyDown(KeyCode.Mouse0)) clickedPosition = Input.mousePosition; if (Input.GetKey(KeyCode.Mouse0)) { if (OnDrag) return; VerticalMove(); OnTouch = true; return; } OnTouch = false; ReactiveVerticalScroll.CurrentValue = 0; } private void VerticalMove() { if ( Math.Abs(Input.mousePosition.y-clickedPosition.y) < afterThisDistanceWeGonnaDoSwipe) return; var distance = clickedPosition.y + Input.mousePosition.y * speedOfVerticalScroll; if (Input.mousePosition.y > clickedPosition.y) ReactiveVerticalScroll.CurrentValue = distance; else if (Input.mousePosition.y < clickedPosition.y) ReactiveVerticalScroll.CurrentValue = -distance; else ReactiveVerticalScroll.CurrentValue = 0; } // Update is called once per frame void Update() { MouseInput(); } } } 


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

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

рд╡рд░реНрдЧ ReactiveValue
 public class ReactiveValue<T> where T: struct { private T currentState; public Action<T> OnChange; public T CurrentValue { get => currentState; set { if (value.Equals(currentState)) return; else { currentState = value; OnChange?.Invoke(currentState); } } } } 


рд╣рдо OnChange рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЪрд┐рдХреЛрдЯреА рдЦрд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдХреЗрд╡рд▓ рдорд╛рди рдмрджрд▓ рдЧрдпрд╛ рд╣реИред

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

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


All Articles