рдЗрди-рдЧреЗрдо рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ рдЬрдм рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ
рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛
рд╣реИ ред
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЬрд╛рдирд╡рд░ рдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдХреЛрдб рдЬрд▓реНрджреА рд╕реЗ рдХрдИ рдиреЗрд╕реНрдЯреЗрдб рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрд▓рдЭ рдЕрд░рд╛рдЬрдХрддрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдПрдХ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реНрдЯреЗрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЛ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдХрд░реЗрдВрдЧреЗ!
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рдЖрдк:
- рдПрдХрддрд╛ рдореЗрдВ рд░рд╛рдЬреНрдп рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдЬрд╛рдиреЗрдВред
- рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рд╣реИред
- рдЕрдкрдиреЗ рдЪрд░рд┐рддреНрд░ рдХреА рдЧрддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реАрдЦреЗрдВред
рдиреЛрдЯ : рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЙрдиреНрдирдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╣реИ; рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХрддрд╛ рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдФрд░ C # рдХрд╛ рдФрд╕рдд рд╕реНрддрд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдпреВрдирд┐рдЯреА 2019.2 рдФрд░ C # 7 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХрд╛рдо рдкрд░ рд▓рдЧрдирд╛
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╛рдордЧреНрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рдирд╛ рдФрд░ рдПрдХрддрд╛ рдореЗрдВ
рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЦреЛрд▓реЗрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХрдИ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВрдЧреЗред
рдПрд╕реЗрдЯреНрд╕ / рдЖрд░рдбрдмреНрд▓реНрдпреВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
рдПрдирд┐рдореЗрд╢рди ,
рд╕рд╛рдордЧреНрд░реА ,
рдореЙрдбрд▓ ,
рдкреНрд░реАрдлреИрдм ,
рд╕рдВрд╕рд╛рдзрди ,
рджреГрд╢реНрдп ,
рд▓рд┐рдкрд┐рдпреЛрдВ рдФрд░
рдзреНрд╡рдирд┐рдпреЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ,
рдЬрд┐рдирдХреЗ рдирд╛рдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИрдВред
рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓
рджреГрд╢реНрдпреЛрдВ рдФрд░
рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЖрд░рдбрдмреНрд▓реНрдпреВ / рджреГрд╢реНрдпреЛрдВ рдкрд░ рдЬрд╛рдПрдВ рдФрд░
рдореЗрди рдЦреЛрд▓реЗрдВред рдЧреЗрдо рдореЛрдб рдореЗрдВ, рдЖрдкрдХреЛ рдордзреНрдпрдпреБрдЧреАрди рдорд╣рд▓ рдХреЗ рдЕрдВрджрд░ рд╣реБрдб рдореЗрдВ рдПрдХ рдЪрд░рд┐рддреНрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
Play рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐
рдХреИрдорд░рд╛ рдХреИрд░реЗрдХреНрдЯрд░ рдлреНрд░реЗрдо рдХреЛ рдХреИрд╕реЗ рдлрд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░реЗ рдЫреЛрдЯреЗ рдЦреЗрд▓ рдореЗрдВ рдХреЛрдИ рдмрд╛рддрдЪреАрдд рдирд╣реАрдВ рд╣реИ, рд╣рдо рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдЙрди рдкрд░ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред
рдЪрд░рд┐рддреНрд░ рдХрд╛ рдЕрдиреНрд╡реЗрд╖рдг рдХрд░реЗрдВ
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ, рд╡рд░реНрдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдмрд╛рд╣рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдЖрдкрдХреЛ
рд╡рд░реНрдг рдирд┐рдпрдВрддреНрд░рдг рддрд░реНрдХ рд╡рд╛рд▓реЗ рд╕рдорд╛рди рдирд╛рдо рд╡рд╛рд▓рд╛ рдПрдХ
рдШрдЯрдХ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рдЖрд░рдбрдмреНрд▓реНрдпреВ / рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рдУрдкрди
рдХреИрд░реЗрдХреНрдЯрд░реНрд╕ ред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред
Move
: рдпрд╣ рдЪрд░рд┐рддреНрд░ рдХреЛ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИ, рдЧрддрд┐ рдФрд░ рдЧрддрд┐ рдХреА speed
рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреА speed
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдХреЛрдгреАрдп рдЧрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВредResetMoveParams
: рдпрд╣ рд╡рд┐рдзрд┐ рдЪрд╛рд▓ рдФрд░ рдЪрд░рд┐рддреНрд░ рдХреЗ рдХреЛрдгреАрдп рд╡реЗрдЧ рдХреЛ рдЪреЗрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░рддреА рд╣реИред рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕рд┐рд░реНрдл рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредSetAnimationBool
: рдпрд╣ рдорд╛рди рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдк Bool рдХреЗ SetAnimationBool
рдПрдиреАрдореЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИредCheckCollisionOverlap
: рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ Vector3
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ bool
рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐
рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рднреАрддрд░ рдХреЛрдИ рдХреЛрд▓рд╛рдбрд░ рд╣реИрдВ рдпрд╛
редTriggerAnimation
: рдЗрдирдкреБрдЯ param
рдПрдиреАрдореЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ TriggerAnimation
рдХрд░рддрд╛ рд╣реИредApplyImpulse
: рдкреНрд░рдХрд╛рд░ ApplyImpulse
рдХреЗ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ force
рдмрд░рд╛рдмрд░ рдХреИрд░реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП ApplyImpulse
рдкрд▓реНрд╕ ApplyImpulse
ред
рдиреАрдЪреЗ рдЖрдк рдЗрди рддрд░реАрдХреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ, рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдФрд░ рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВред
рд░рд╛рдЬреНрдп рдорд╢реАрдиреЗрдВ рдХреНрдпрд╛ рд╣реИрдВ
рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдХрдВрдЯреЗрдирд░ рдХрд┐рд╕реА рдЪреАрдЬ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдПрдХ рдирдП рд░рд╛рдЬреНрдп рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреЛ
рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдФрд░ рдЙрди рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЛрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд░рд╛рдЬреНрдп рдХреА рдорд╢реАрдиреЗрдВ
рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди рдпрд╛
FSM (рдкрд░рд┐рдорд┐рдд рд░рд╛рдЬреНрдп рдорд╢реАрди) рдорд╢реАрдиреЛрдВ рдХреЗ рдЪрд╛рд░ рдореБрдЦреНрдп рдкрд░рд┐рд╡рд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ
рд╣реИ ред рдСрдЯреЛрдореЗрдЯрд╛ рд╕рд░рд▓ рдорд╢реАрдиреЛрдВ рдХреЗ рдЕрдореВрд░реНрдд рдореЙрдбрд▓ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ
рдСрдЯреЛрдореЗрдЯрд╛ рдХреЗ
рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреА рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╢рд╛рдЦрд╛ред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:
- FSM рдореЗрдВ рдкрд░рд┐рдорд┐рдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рд╣реЛрддреА рд╣реИ ред рдХрд┐рд╕реА рднреА рд╕рдордп , рдЗрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рд░рд╛рдЬреНрдп рд╕рдХреНрд░рд┐рдп рд╣реИ ред
- рдкреНрд░рддреНрдпреЗрдХ рд░рд╛рдЬреНрдп рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрдХреНрд░рдо рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд╣ рдХрд┐рд╕ рд░рд╛рдЬреНрдп рдореЗрдВ рдЙрддреНрдкрд╛рджрди рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдПрдЧрд╛ред
- рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреЗрдЯ рдирдпрд╛ рд╕рдХреНрд░рд┐рдп рд░рд╛рдЬреНрдп рдмрди рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдХреНрд░рдордг рд╣реИ ред

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

рд░рд╛рдЬреНрдп рдФрд░ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
рдЖрд░рдбрдмреНрд▓реНрдпреВ / рд▓рд┐рдкрд┐рдпреЛрдВ рдкрд░ рдЬрд╛рдПрдВ рдФрд░
StateMachine.cs рдЦреЛрд▓реЗрдВред
рд░рд╛рдЬреНрдп рдорд╢реАрди , рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдореВрд░реНрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
CurrentState
рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕реНрдерд┐рдд рд╣реИред рдпрд╣ рд╡рд░реНрддрдорд╛рди рд╕рдХреНрд░рд┐рдп рд░рд╛рдЬреНрдп рдорд╢реАрди рд░рд╛рдЬреНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ред
рдЕрдм,
рд░рд╛рдЬреНрдп рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП
RW / рд▓рд┐рдкрд┐рдпреЛрдВ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ IDE рдореЗрдВ
State.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЛрд▓реЗрдВред
рд░рд╛рдЬреНрдп рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ
рдореЙрдбрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬрд┐рд╕рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛
рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд╕рднреА
рд╡рд░реНрдЧ рд╡реНрдпреБрддреНрдкрдиреНрди рд╣реИрдВред рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рддреИрдпрд╛рд░ рд╣реИред
DisplayOnUI
рдХреЗрд╡рд▓ рдСрди-рд╕реНрдХреНрд░реАрди UI рдореЗрдВ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХрд╛ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рдЗрд╕рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдмрд╕ рдпрд╣ рд╕рдордЭ рд▓реЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ
UIManager.Alignment
рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ
UIManager.Alignment
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ
Left
рдпрд╛
Right
рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕реНрдХреНрд░реАрди рдХреЗ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рддрд▓ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдХреЗ рдирд╛рдо рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдЪрд░,
character
рдФрд░
stateMachine
ред
character
рдЪрд░
рдЪрд░рд┐рддреНрд░ рд╡рд░реНрдЧ рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░
stateMachine
рд░рд╛рдЬреНрдп рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ
рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреА рдПрдХ рдЖрд╡реГрддреНрддрд┐ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред
рд░рд╛рдЬреНрдп рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╕рдордп, рдирд┐рд░реНрдорд╛рддрд╛
character
рдФрд░
stateMachine
рдмрд╛рдВрдзрддрд╛ рд╣реИред
рдПрдХ рджреГрд╢реНрдп рдореЗрдВ
Character
рдХреЗ рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рд░рд╛рдЬреНрдпреЛрдВ рдФрд░ рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм
State.cs рдореЗрдВ рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ:
public virtual void Enter() { DisplayOnUI(UIManager.Alignment.Left); } public virtual void HandleInput() { } public virtual void LogicUpdate() { } public virtual void PhysicsUpdate() { } public virtual void Exit() { }
рдпреЗ рд╡рд░реНрдЪреБрдЕрд▓ рддрд░реАрдХреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкреНрд░рдореБрдЦ рд╕реНрдерд┐рддрд┐ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЬрдм
рд░рд╛рдЬреНрдп рдорд╢реАрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рд╕рдВрдХреНрд░рдордг рдХрд░рддреА рд╣реИ, рддреЛ рд╣рдо рдкрд┐рдЫрд▓реЗ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП
Exit
рдФрд░ рдирдпрд╛
рд╕рдХреНрд░рд┐рдп рд░рд╛рдЬреНрдп Enter
ред
HandleInput
,
LogicUpdate
рдФрд░
PhysicsUpdate
рдПрдХ рд╕рд╛рде
рдЕрдкрдбреЗрдЯ рд▓реВрдк рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
HandleInput
рдЦрд┐рд▓рд╛рдбрд╝реА рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред
LogicUpdate
рдмреБрдирд┐рдпрд╛рджреА рддрд░реНрдХ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐
PhyiscsUpdate
рддрд░реНрдХ рдФрд░ рднреМрддрд┐рдХреА рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред
рдЕрдм
StateMachine.cs рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓реЗрдВ, рдирд┐рдореНрди рд╡рд┐рдзрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ:
public void Initialize(State startingState) { CurrentState = startingState; startingState.Enter(); } public void ChangeState(State newState) { CurrentState.Exit(); CurrentState = newState; newState.Enter(); }
Initialize
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
CurrentState
рд╕реЗрдЯ рдХрд░рдХреЗ рд╕реНрдЯреЗрдЯ рдорд╢реАрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░
Initialize
рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП
Enter
рдХреЙрд▓
Enter
ред рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рд╕рдХреНрд░рд┐рдп рд░рд╛рдЬреНрдп рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП, рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред
ChangeState
рд░рд╛рдЬреНрдп рд╕рдВрдХреНрд░рдордг рдХреЛ рд╕рдВрднрд╛рд▓рддрд╛
рд╣реИ ред рдпрд╣
CurrentState
рд╕рд╛рде рдЕрдкрдиреЗ рд╕рдВрджрд░реНрдн рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреБрд░рд╛рдиреЗ
CurrentState
рд▓рд┐рдП
Exit
рдХрд╣рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рдпрд╣
Enter
for
newState
рдХрд╣рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо
рд░рд╛рдЬреНрдп рдФрд░
рд░рд╛рдЬреНрдп рдорд╢реАрди рд╕реЗрдЯ рдХрд░рддреЗ
рд╣реИрдВ ред
рдореЛрд╢рди рд╕реНрдЯреЗрдЯреНрд╕ рдмрдирд╛рдирд╛
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд░рд╛рдЬреНрдп рдЖрд░реЗрдЦ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ, рдЬреЛ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЦреЗрд▓ рдХреЗ рд╕рд╛рд░
рдХреЗ рдЖрдВрджреЛрд▓рди рдХреА рд╡рд┐рднрд┐рдиреНрди
рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ, рд╣рдо
FSM рдЖрдХреГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП
рдЖрдВрджреЛрд▓рди рдХреЗ рд▓рд┐рдП "рд╕реНрдерд┐рддрд┐" рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
рдЖрдВрджреЛрд▓рди рдХреЗ рд░рд╛рдЬреНрдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЕрд░реНрдерд╛рддреН
рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ ,
рдбрдХрд┐рдВрдЧ рдФрд░
рдЬрдВрдкрд┐рдВрдЧ , рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдХрд╛рд░рдг рдХреИрд╕реЗ рдмрдирддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдПрдлрдПрд╕рдПрдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ
рдЧреНрд░рд╛рдЙрдВрдбреЗрдб рдбрдХрд┐рдВрдЧ рдФрд░
рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ рдЙрдк-рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдк-рд░рд╛рдЬреНрдп
рд╣реИ ред
рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВ рдФрд░
рдЖрд░рдбрдмреНрд▓реНрдпреВ / рд▓рд┐рдкрд┐рдпреЛрдВ / рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рдЬрд╛рдПрдВ ред рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рдХрдИ рд╕реА # рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓реЗрдВрдЧреА, рдЬрд┐рдирдХреЗ рдирд╛рдо
рд░рд╛рдЬреНрдп рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдВрдЧреЗред
рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓реЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреА рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ
State
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпреЗ рд╡рд░реНрдЧ рдЙрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рдЕрдм
RW / Scripts рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ
Character.cs рдХреЛ рдЦреЛрд▓реЗрдВред
#region Variables
рдлрд╝рд╛рдЗрд▓ рдХреЗ рдКрдкрд░ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
public StateMachine movementSM; public StandingState standing; public DuckingState ducking; public JumpingState jumping;
рдпрд╣
movementSM
рдПрдХ рд░рд╛рдЬреНрдп рдорд╢реАрди рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ
Character
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЧрддрд┐ рддрд░реНрдХ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдордиреЗ рддреАрди рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рднреА рдЬреЛрдбрд╝реЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдВрджреЛрд▓рди рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдореЗрдВ
#region MonoBehaviour Callbacks
рдЬрд╛рдПрдВред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
MonoBehaviour рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╕рд╣реЗрдЬреЗрдВ
private void Start() { movementSM = new StateMachine(); standing = new StandingState(this, movementSM); ducking = new DuckingState(this, movementSM); jumping = new JumpingState(this, movementSM); movementSM.Initialize(standing); } private void Update() { movementSM.CurrentState.HandleInput(); movementSM.CurrentState.LogicUpdate(); } private void FixedUpdate() { movementSM.CurrentState.PhysicsUpdate(); }
Start
рдХреЛрдб рд░рд╛рдЬреНрдп рдорд╢реАрди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ movementSM
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕рд╛рдЗрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЧрддрд┐ рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рднреА рддреНрд╡рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдореЛрд╢рди рд╕реНрдЯреЗрдЯреНрд╕ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо this
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП Character
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде movementSM
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВред рдЕрдВрдд рдореЗрдВ, рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП movementSM
рдФрд░ Standing
рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЕрд╡рд╕реНрдерд╛ рдХрд╣рддреЗ рд╣реИрдВредUpdate
рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо HandleInput
рдФрд░ LogicUpdate
рдХреЛ CurrentState
рдорд╢реАрди рдХреЗ CurrentState
рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕реА рддрд░рд╣, FixedUpdate
рд╣рдо PhysicsUpdate
рдХреЛ CurrentState
рдорд╢реАрди рдХреЗ PhysicsUpdate
рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рдХреНрд░рд┐рдп рд░рд╛рдЬреНрдп рдХреЛ рдХрд╛рд░реНрдп рд╕реМрдВрдкрддрд╛ рд╣реИ; рдпрд╣ "рд╕реНрдерд┐рддрд┐" рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЕрд░реНрде рд╣реИред
рдЕрдм рд╣рдореЗрдВ рдЧрддрд┐ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЕрд╡рд╕реНрдерд╛ рдХреЗ рдЕрдВрджрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдкрдиреЗ рдЖрдк рдХреЛ рд╕рдВрднрд╛рд▓реЛ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд╣реЛрдВрдЧреЗ!
рд╕реНрдерд╛рдпреА рдлрд░реНрдо
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ
RW / рд▓рд┐рдкрд┐рдпреЛрдВ / рд░рд╛рдЬреНрдпреЛрдВ рдореЗрдВ рд▓реМрдЯреЗрдВред
рдЧреНрд░рд╛рдЙрдВрдбреЗрдб рдЦреЛрд▓реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╣реИ рдЬреЛ
State
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд░реНрдЧ рдЗрд╕рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЖрдк рдЕрдиреНрдп рд╕рднреА
рд░рд╛рдЬреНрдп рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рджреЗрдЦреЗрдВрдЧреЗред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
public override void Enter() { base.Enter(); horizontalInput = verticalInput = 0.0f; } public override void Exit() { base.Exit(); character.ResetMoveParams(); } public override void HandleInput() { base.HandleInput(); verticalInput = Input.GetAxis("Vertical"); horizontalInput = Input.GetAxis("Horizontal"); } public override void PhysicsUpdate() { base.PhysicsUpdate(); character.Move(verticalInput * speed, horizontalInput * rotationSpeed); }
рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
- рд╣рдо рдореВрд▓ рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрднрд╛рд╕реА рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЕрдзрд┐рд░реЛрдкрд┐рдд рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде
base
рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред - рдЕрдЧрд▓реА рдкрдВрдХреНрддрд┐,
Enter
рдЙрдирдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдХреЗ verticalInput
horizontalInput
рдФрд░ verticalInput
рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред - рдЕрдВрджрд░ рд╕реЗ
Exit
рд╣рдо, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХрд┐рд╕реА рдЕрдиреНрдп рд░рд╛рдЬреНрдп рдореЗрдВ рдмрджрд▓рддреЗ рд╕рдордп рд░реАрд╕реЗрдЯ рдХрд░рдиреЗ
рд▓рд┐рдП
ResetMoveParams
рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред HandleInput
рд╡рд┐рдзрд┐ рдореЗрдВ, horizontalInput
рдЗрдирдкреБрдЯ рдФрд░ рд╡рд░реНрдЯрд┐рдХрд▓ рдЗрдирдкреБрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рдХреНрд╖реИрддрд┐рдЬ рдФрд░ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЗрдирдкреБрдЯ рдЕрдХреНрд╖реЛрдВ HandleInput
рдореВрд▓реНрдпреЛрдВ рдХреЛ HandleInput
рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреБрдВрдЬрд┐рдпреЛрдВ рдбрдмреНрд▓реНрдпреВ , рдП , рдПрд╕ рдФрд░ рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ редPhysicsUpdate
рд╣рдо рдПрдХ PhysicsUpdate
рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ verticalInput
рдЧрддрд┐ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ horizontalInput
PhysicsUpdate
рдФрд░ verticalInput
рдЪрд░ рдХреЛ рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЪрд░ speed
рдЧрддрд┐ рдХреА рдЧрддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ rotationSpeed
, рдХреЛрдгреАрдп рд╡реЗрдЧред
рдЕрдм
Standing.cs рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣
Grounded
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ, рдХреНрдпреЛрдВрдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдХрд╣рд╛,
рд╕реНрдЯреИрдВрдбрд┐рдВрдЧ рдЧреНрд░рд╛рдЙрдВрдбреЗрдб рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдЗрд╕ рд░рд┐рд╢реНрддреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рд╡рд┐рд░рд╛рд╕рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
override
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ:
public override void Enter() { base.Enter(); speed = character.MovementSpeed; rotationSpeed = character.RotationSpeed; crouch = false; jump = false; } public override void HandleInput() { base.HandleInput(); crouch = Input.GetButtonDown("Fire3"); jump = Input.GetButtonDown("Jump"); } public override void LogicUpdate() { base.LogicUpdate(); if (crouch) { stateMachine.ChangeState(character.ducking); } else if (jump) { stateMachine.ChangeState(character.jumping); } }
Enter
рд╣рдо Grounded
рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЪрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред speed
рдФрд░ RotationSpeed
рдЪрд░рд┐рддреНрд░ рдХреЗ MovementSpeed
рдФрд░ RotationSpeed
рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдлрд┐рд░ рд╡реЗ рдХреНрд░рдорд╢рдГ рдЖрдВрджреЛрд▓рди рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЧрддрд┐ рдФрд░ рдЪрд░рд┐рддреНрд░ рдХреЗ рд╕рд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдгреАрдп рдЧрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, crouch
рдФрд░ jump
рдЗрдирдкреБрдЯ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ рдЭреВрдареЗ рдкрд░ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВредHandleInput
рдЕрдВрджрд░, crouch
рдФрд░ jump
рд╡реИрд░рд┐рдПрдмрд▓ HandleInput
рдФрд░ HandleInput
рд▓рд┐рдП рдкреНрд▓реЗрдпрд░ рдЗрдирдкреБрдЯ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдореБрдЦреНрдп рджреГрд╢реНрдп рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рд╢рд┐рдлреНрдЯ рдХреБрдВрдЬреА рджрдмрд╛рддрд╛ рд╣реИ , рддреЛ рд╕реНрдХреНрд╡реИрдЯ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА jump
рд▓рд┐рдП рд╕реНрдкреЗрд╕ рдХреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИредLogicUpdate
рд╣рдо рдЯрд╛рдЗрдк bool
рдХреЗ crouch
рдФрд░ jump
рдЪрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ crouch
рд╕рддреНрдп рд╣реИ, рддреЛ movementSM.CurrentState
character.ducking
рдмрджрд▓ рдЬрд╛рддрд╛ character.ducking
ред рдпрджрд┐ jump
рд╕рд╣реА рд╣реИ, рддреЛ рд░рд╛рдЬреНрдп character.jumping
рдмрджрд▓рддрд╛ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ, рдлрд┐рд░
рдкреНрд▓реЗ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЖрдк рдЪрд╛рдмрд┐рдпрд╛рдБ
рдбрдмреНрд▓реНрдпреВ ,
рдП ,
рдПрд╕ рдФрд░
рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрд╢реНрдп рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдо рд╕рдХрддреЗ рд╣реИрдВ
ред рдпрджрд┐ рдЖрдк
рд╢рд┐рдлреНрдЯ рдпрд╛
рд╕реНрдкреЗрд╕ рдХреЛ рджрдмрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХреЛ рдЕрднреА рддрдХ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЯреЗрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдиреАрдЪреЗ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЪрд░рд┐рддреНрд░ рдХреЗ рдХреЛрд▓рд╛рдЗрдбрд░ рдХреА рдКрдВрдЪрд╛рдИ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЪрд░рд┐рддреНрд░ рдХреЛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрдХреНрд╡рд╛рдЯрд┐рдВрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЯреЗрдмрд▓ рдХреЗ рдиреАрдЪреЗ рдЪрдврд╝рддреЗ рд╣реИрдВ
Ducking.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЛрд▓реЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐
Ducking
рдХреЗ рд╕рдорд╛рди рдХрд╛рд░рдгреЛрдВ рд╕реЗ
Ducking
рдХреЛ
Grounded
рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд
override
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ:
public override void Enter() { base.Enter(); character.SetAnimationBool(character.crouchParam, true); speed = character.CrouchSpeed; rotationSpeed = character.CrouchRotationSpeed; character.ColliderSize = character.CrouchColliderHeight; belowCeiling = false; } public override void Exit() { base.Exit(); character.SetAnimationBool(character.crouchParam, false); character.ColliderSize = character.NormalColliderHeight; } public override void HandleInput() { base.HandleInput(); crouchHeld = Input.GetButton("Fire3"); } public override void LogicUpdate() { base.LogicUpdate(); if (!(crouchHeld || belowCeiling)) { stateMachine.ChangeState(character.standing); } } public override void PhysicsUpdate() { base.PhysicsUpdate(); belowCeiling = character.CheckCollisionOverlap(character.transform.position + Vector3.up * character.NormalColliderHeight); }
Enter
рдЕрдВрджрд░ Enter
рд╕реНрдХреНрд╡рд╛рдЯ рдПрдиреАрдореЗрд╢рди рдЯреЙрдЧрд▓ рдХрд╛ рдХрд╛рд░рдг рдмрдирдиреЗ Enter
рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрд░рд╛рдЙрдЪ рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдХреНрд╡рд╛рдЯ рдПрдиреАрдореЗрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред character.CrouchSpeed
рдФрд░ character.CrouchRotationSpeed
рдЧреБрдгреЛрдВ рдХреЛ speed
рдФрд░ rotation
рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд╕реНрдХреНрд╡рд╛рдЯ рдореЗрдВ рдЪрд▓рддреЗ рд╕рдордп рдЪрд░рд┐рддреНрд░ рдХреА рдЧрддрд┐ рдФрд░ рдХреЛрдгреАрдп рдЧрддрд┐ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛ character.CrouchColliderHeight
CrouchColliderHeight рдЪрд░рд┐рддреНрд░ рдХреЗ рдХреЛрд▓рд╛рдЗрдбрд░ рдХрд╛ рдЖрдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдХреНрд╡реАрдЯрд┐рдВрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд╛рдВрдЫрд┐рдд рдХреЛрд▓рд╛рдЗрдбрд░ рдХреА рдКрдБрдЪрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, belowCeiling
рджрд┐рдпрд╛ рдЧрдпрд╛ рдЧрд▓рдд рдкрд░ рд░реАрд╕реЗрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред- рдЗрдирд╕рд┐рдЯ рд╕реЗ
Exit
рд╕реНрдХреНрд╡рд╛рдЯ рдПрдиреАрдореЗрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдЧрд▓рдд рдкрд░ рд╕реЗрдЯ рд╣реИред рдпрд╣ рд╕реНрдХреНрд╡рд╛рдЯ рдПрдиреАрдореЗрд╢рди рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрд▓рд╛рдЗрдбрд░ рдХреА рдКрдБрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕реЗ character.NormalColliderHeight
рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ character.NormalColliderHeight
ред NormalColliderHeightред HandleInput
рдЕрдВрджрд░ HandleInput
рдЪрд░ crouchHeld
рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдореБрдЦреНрдп рджреГрд╢реНрдп рдореЗрдВ, Shift рдХреЛ crouchHeld
рдХреЛ рд╕рддреНрдп crouchHeld
рд╣реИредPhysicsUpdate
рдЕрдВрджрд░ PhysicsUpdate
рдЪрд░ рдХреЗ belowCeiling
рдЪрд░ рдХреЛ belowCeiling
рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдкрд╛рд╕ рдХрд░рдХреЗ рдПрдХ рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрдг рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдореБрдЦ рдХреЗ рд╕рд╛рде CheckCollisionOverlap
рд╡рд┐рдзрд┐ рд╣реИред рдпрджрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдХреЗ рдкрд╛рд╕ рдПрдХ рдЯрдХреНрдХрд░ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЪрд░рд┐рддреНрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЫрдд рдХреЗ рдиреАрдЪреЗ рд╣реИред- рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ,
LogicUpdate
рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ crouchHeld
рдпрд╛ рдЙрд╕рд╕реЗ belowCeiling
рд╣реИред рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд╕рддреНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ movementSM.CurrentState
ред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░
Play рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдм рдЖрдк рджреГрд╢реНрдп рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдо рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк
Shift рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╡рд░реНрдг рдиреАрдЪреЗ рдмреИрда рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдк рд╕реНрдХреНрд╡рд╛рдЯ рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк рдордВрдЪ рдХреЗ рдиреАрдЪреЗ рднреА рдЪрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдиреАрдЪреЗ
рд╢рд┐рдлреНрдЯ рд░рд┐рд▓реАрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЪрд░рд┐рддреНрд░ рддрдм рддрдХ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рд░рд╣реЗрдЧрд╛, рдЬрдм рддрдХ рд╡рд╣ рдЕрдкрдирд╛ рдЖрд╢реНрд░рдп рдирд╣реАрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ред
рдЪрдврд╝рддрд╛ рд╣реИ!
рдЬрдВрдкрд┐рдВрдЧ рдЦреЛрд▓реЗрдВред рдЖрдкрдХреЛ
Jump
рдирд╛рдордХ рдПрдХ рд╡рд┐рдзрд┐ рджрд┐рдЦрд╛рдИ рджреЗрдЧреАред рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ; рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЪрд░рд┐рддреНрд░ рднреМрддрд┐рдХреА рдФрд░ рдПрдиреАрдореЗрд╢рди рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдХрд░ рдХреВрдж рд╕рдХреЗред
рдЕрдм рд╕рд╛рдорд╛рдиреНрдп
override
рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрдЪрд╛рдПрдВ
public override void Enter() { base.Enter(); SoundManager.Instance.PlaySound(SoundManager.Instance.jumpSounds); grounded = false; Jump(); } public override void LogicUpdate() { base.LogicUpdate(); if (grounded) { character.TriggerAnimation(landParam); SoundManager.Instance.PlaySound(SoundManager.Instance.landing); stateMachine.ChangeState(character.standing); } } public override void PhysicsUpdate() { base.PhysicsUpdate(); grounded = character.CheckCollisionOverlap(character.transform.position); }
Enter
рдЕрдВрджрд░ Enter
рд╕рд┐рдВрдЧрд▓рдЯрди SoundManager
рдХреА рдЖрд╡рд╛рдЬ рдмрдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ grounded
рдХреЛ рдЙрд╕рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдкрд░ рд░реАрд╕реЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЦрд┐рд░ рдореЗрдВ Jump
рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИредPhysicsUpdate
рдЕрдВрджрд░ PhysicsUpdate
рдЪрд░рд┐рддреНрд░ рдХреЗ рдкреИрд░реЛрдВ рдХреЗ рдЖрдЧреЗ PhysicsUpdate
рдмрд┐рдВрджреБ PhysicsUpdate
рдХреЛ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рдЪрд░рд┐рддреНрд░ рдЬрдореАрди рдкрд░ рд╣реИ, рддреЛ grounded
рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛редLogicUpdate
, рдпрджрд┐ grounded
рд╕рд╣реА рд╣реИ, рддреЛ рд╣рдо TriggerAnimation
рдПрдиреАрдореЗрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд┐рдЧрд░ рдПрдирд┐рдореЗрд╢рди рдХрд╣рддреЗ рд╣реИрдВ, рдЯрдЪрдбрд╛рдЙрди рд╕рд╛рдЙрдВрдб рдмрдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ movementSM.CurrentState
рдореЗрдВ character.standing
рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ character.standing
ред
рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкрд░ рд╣рдордиреЗ
"рд░рд╛рдЬреНрдп" рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ FSM рд╡рд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреВрд░рд╛ рдХрд░
рд▓рд┐рдпрд╛ рд╣реИ ред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕реЗ рдЪрд▓рд╛рдПрдВред рдХреИрд░реЗрдХреНрдЯрд░ рдЬрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╕реНрдкреЗрд╕ рджрдмрд╛рдПрдВред
рдЖрдЧреЗ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИ?
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдПрдХ рдорд╕реМрджрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рдПрдХ рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред
рдЗрд╕рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд░рд╛рдЬреНрдп рдорд╢реАрдиреЛрдВ рдХреА рд╕реАрдорд╛рдПрдВ рд╣реИрдВред рд╕рдорд╡рд░реНрддреА рд░рд╛рдЬреНрдп рдорд╢реАрдиреЗрдВ рдФрд░ рдкреБрд╢рдбрд╛рдЙрди рдСрдЯреЛрдореИрдЯрди рдорд╢реАрдиреЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реАрдорд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рд╕рдХрддреА рд╣реИрдВред рдЖрдк рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд░реЙрдмрд░реНрдЯ рдирд┐рд╕реНрдЯреНрд░реЛрдо
рдЧреЗрдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреИрдЯрд░реНрди рдХреА рдкреБрд╕реНрддрдХ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреЗрдо рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЧреЗрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ
рд╡реНрдпрд╡рд╣рд╛рд░ рдкреЗрдбрд╝реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рд╡рд┐рд╖рдп рдХреЛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред