рдпрд╣
"рдПрдХрддрд╛ рдореЗрдВ рдПрдХ рдЯреЙрд╡рд░ рд░рдХреНрд╖рд╛ рдЦреЗрд▓ рдмрдирд╛рдирд╛" рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рджреВрд╕рд░рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рд╣рдо рдПрдХрддрд╛ рдореЗрдВ рдПрдХ рдЯреЙрд╡рд░ рд░рдХреНрд╖рд╛ рд╢реИрд▓реА рдЦреЗрд▓ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдФрд░
рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рдЕрдВрдд рддрдХ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдХреИрд╕реЗ рд░рдЦрд╛ рдЬрд╛рдП рдФрд░ рдХреИрд╕реЗ рдЙрдиреНрдирдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рджреБрд╢реНрдорди рдкрд░ рд╣рдорд▓рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреБрдХреАрдЬрд╝ рднреА рд╣реИрдВред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреБрд╢реНрдорди рдЕрднреА рддрдХ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рд╣реИ! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдХреЗрд▓реЗ рдПрдХ рд╣рдорд▓рд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рджреБрд╢реНрдордиреЛрдВ рдФрд░ рдЖрд░реНрдо рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреА рддрд░рдВрдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╡реЗ рдПрдХ рдХреАрдорддреА рдХреБрдХреА рдХрд╛ рдмрдЪрд╛рд╡ рдХрд░ рд╕рдХреЗрдВред
рдХрд╛рдо рдкрд░ рд▓рдЧрдирд╛
рдПрдХрддрд╛ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЦреЛрд▓реЗрдВ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк рдЕрднреА рд╣рдорд╛рд░реЗ рд╕рд╛рде рд╢рд╛рдорд┐рд▓ рд╣реБрдП рд╣реИрдВ, рддреЛ
рдбреНрд░рд╛рдлреНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░
рдЯреЙрд╡рд░рдбрд┐рдлреЗрдВрд╕-рдкрд╛рд░реНрдЯ 2-рд╕реНрдЯрд╛рд░реНрдЯрд░ рдЦреЛрд▓реЗрдВред
рджреГрд╢реНрдпреЛрдВ рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ
GameScene рдЦреЛрд▓реЗрдВред
рджреБрд╢реНрдордиреЛрдВ рдХреА рдмрд╛рд░реА
рдкрд┐рдЫрд▓реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ, рджреБрд╢реНрдорди рдиреЗ рд╕рдбрд╝рдХ рдкрд░ рдЪрд▓рдирд╛ рд╕реАрдЦрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд╣рд╛рдВ рджреЗрдЦрдирд╛ рд╣реИред
IDE рдореЗрдВ
MoveEnemy.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВред
private void RotateIntoMoveDirection() {
RotateIntoMoveDirection
рджреБрд╢реНрдорди рдХреЛ рдШреБрдорд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рд╣рдореЗрд╢рд╛ рдЖрдЧреЗ
RotateIntoMoveDirection
ред рд╡рд╣ рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд░рддрд╛ рд╣реИ:
- рдмрдЧ рдХреА рд╡рд░реНрддрдорд╛рди рджрд┐рд╢рд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдмрд┐рдВрджреБ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдШрдЯрд╛рддрд╛ рд╣реИред
- рд░реЗрдбрд┐рдпрди рдореЗрдВ рдХреЛрдг рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
Mathf.Atan2
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ newDirection
рдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИ (рд╢реВрдиреНрдп рдмрд┐рдВрджреБ рджрд╛рдИрдВ рдУрд░ рд╣реИ)ред рдкрд░рд┐рдгрд╛рдо рдХреЛ 180 / Mathf.PI
рдЧреБрдгрд╛ рдХрд░рддрд╛ рд╣реИ, рдХреЛрдг рдХреЛ рдбрд┐рдЧреНрд░реА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред - рдЕрдВрдд рдореЗрдВ, рдпрд╣ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдЪреНрдЪрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╖ рдХреЛ рдШреБрдорд╛рддрд╛ рд╣реИред
rotationAngle
рдбрд┐рдЧреНрд░реАред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдмрдЪреНрдЪреЗ рдХреЛ рдШреБрдорд╛рддреЗ рд╣реИрдВ, рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЛ рдирд╣реАрдВ, рддрд╛рдХрд┐ рдмрд╛рдж рдореЗрдВ рд╣рдо рдЬреЛ рдКрд░реНрдЬрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рд╡рд╣ рдХреНрд╖реИрддрд┐рдЬ рдмрдиреА рд░рд╣реЗред
Update()
, рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдмрджрд▓реЗрдВ
// TODO:
рдЕрдЧрд▓реЗ рдХреЙрд▓ рдХреЗ
// TODO:
RotateIntoMoveDirection
:
RotateIntoMoveDirection();
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред рджреГрд╢реНрдп рдХреЛ рдЪрд▓рд╛рдПрдВ; рдЕрдм рджреБрд╢реНрдорди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХрд╣рд╛рдБ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЕрдм рдмрдЧ рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХрд╣рд╛рдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдПрдХ рдФрд░ рдХреЗрд╡рд▓ рджреБрд╢реНрдорди рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред рд╣рдореЗрдВ рднреАрдбрд╝ рдЪрд╛рд╣рд┐рдП! рдФрд░ рдХрд┐рд╕реА рднреА рдЯреЙрд╡рд░ рд░рдХреНрд╖рд╛ рдЦреЗрд▓ рдХреА рддрд░рд╣, рд▓рд╣рд░реЛрдВ рдореЗрдВ рднреАрдбрд╝ рдЪрд▓рддреА рд╣реИ!
рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВ
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рднреАрдбрд╝ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдЖрд╕рдиреНрди рд▓рдбрд╝рд╛рдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕реНрдХреНрд░реАрди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╡рд░реНрддрдорд╛рди рд▓рд╣рд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред
рдХрдИ GameObjects рджреНрд╡рд╛рд░рд╛
рд╡реЗрд╡ рдЬрд╛рдирдХрд╛рд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕реЗ
GameManagerBehavior рдШрдЯрдХ рдХреЗ
GameManager рдореЗрдВ рдЬреЛрдбрд╝
рджреЗрдВрдЧреЗ ред
IDE рдореЗрдВ
GameManagerBehavior.cs рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
public Text waveLabel; public GameObject[] nextWaveLabels;
waveLabel
рд╕реНрдХреНрд░реАрди рдХреЗ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рддрд░рдВрдЧ рд╕рдВрдЦреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
nextWaveLabels
рджреЛ
nextWaveLabels
рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдиреАрдореЗрд╢рди рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рдирдИ рд▓рд╣рд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджрд┐рдЦрд╛рдПрдВрдЧреЗ:
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ
GameManager рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рд╡реЗрд╡ рд▓реЗрдмрд▓ рдХреЗ рджрд╛рдИрдВ рдУрд░ рд╕реНрдерд┐рдд рд╕рд░реНрдХрд▓ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░
рдкрд╛рда рдХрд╛
рдЪрдпрди рдХрд░реЗрдВ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ,
рджреГрд╢реНрдп рдЯреИрдм рд╕реЗ
WaveLabel рдЪреБрдиреЗрдВред
рдЕрдм
рдиреЗрдХреНрд╕реНрдЯ рд╡реЗрд╡ рд▓реЗрдмрд▓реНрд╕ рдХреЗ рд▓рд┐рдП
рд╕рд╛рдЗрдЬ 2 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рдЕрдм
Element 0 рдХреЛ
NextWaveBottomLabel рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░
рддрддреНрд╡ 1 NextWaveTopLabel рдХреЗ рд▓рд┐рдП рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рд╣рдордиреЗ рд╡реЗрд╡ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред
рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЧреЗрдо рдореИрдиреЗрдЬрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдм рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПрдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рд╣рд╛рд░ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ рдЕрдЧрд▓реА рд▓рд╣рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП,
GameManagerBehavior.cs рдкрд░ рд╡рд╛рдкрд╕
рд▓реМрдЯреЗрдВ рдФрд░ рдПрдХ рдЕрдиреНрдп рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
public bool gameOver = false;
gameOver
рд╣рдо рдЙрд╕ рдореВрд▓реНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЦрд┐рд▓рд╛рдбрд╝реА рд╣рд╛рд░ рдЧрдпрд╛ред
рдпрд╣рд╛рдВ рд╣рдо рд╡рд░реНрддрдорд╛рди рддрд░рдВрдЧ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд┐рд░ рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
GameManagerBehavior
рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
private int wave; public int Wave { get { return wave; } set { wave = value; if (!gameOver) { for (int i = 0; i < nextWaveLabels.Length; i++) { nextWaveLabels[i].GetComponent<Animator>().SetTrigger("nextWave"); } } waveLabel.text = "WAVE: " + (wave + 1); } }
рдПрдХ рдирд┐рдЬреА рдЪрд░, рд╕рдВрдкрддреНрддрд┐, рдФрд░ рдЧреЗрдЯрдЯрд░ рдмрдирд╛рдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдЪреАрдЬ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╕реЗрдЯрд░ рдХреЗ рд╕рд╛рде, рдлрд┐рд░ рд╕реЗ, рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред
рд╣рдо
wave
рдирдпрд╛
value
ред
рдлрд┐рд░ рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЦреЗрд▓ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╕рднреА
рдЕрдЧрд▓реЗ рд╡реЙрд▓реНрд╡ рд▓реЗрдмрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓реВрдк рдХрд░реЗрдВ - рдЗрди рд▓реЗрдмрд▓ рдореЗрдВ рдПрдХ
рдПрдирд┐рдореЗрдЯрд░ рдШрдЯрдХ рд╣реИред
рдРрдирд┐рдореЗрдЯрд░ рдПрдиреАрдореЗрд╢рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ
рдиреЗрдХреНрд╕реНрдЯ рдЯреНрд░рд┐рдЧрд░
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ
рд╣реИрдВ ред
рдЕрдВрдд рдореЗрдВ, рд╣рдо
wave + 1
waveLabel
рдХрд╛
text
рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВ
+1
? рд╕рд╛рдзрд╛рд░рдг рд▓реЛрдЧ рдЦрд░реЛрдВрдЪ рд╕реЗ рдЧрд┐рдирддреА рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ (рд╣рд╛рдБ, рдпрд╣ рдЕрдЬреАрдм рд╣реИ)ред
Start()
рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
Wave = 0;
рд╣рдо рд╕рдВрдЦреНрдпрд╛
0 Wave
рд╕рд╛рде рдЧрд┐рдирддреА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдореЗрдВ рджреГрд╢реНрдп рдЪрд▓рд╛рдПрдБред рд╡реЗрд╡ рд▓реЗрдмрд▓ рд╕рд╣реА рдврдВрдЧ рд╕реЗ 1 рджрд┐рдЦрд╛рдПрдЧрд╛ред
рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рд▓рд╣рд░ 1 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИредрд▓рд╣рд░реЗрдВ: рджреБрд╢реНрдордиреЛрдВ рдХреЗ рдвреЗрд░ рдмрдирд╛рдПрдБ
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рднреАрдбрд╝ рдХреЗ рд╕рд╛рде рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рджреБрд╢реНрдорди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЬрдмрдХрд┐ рд╣рдо рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрдВ рдЕрдЧрд▓реА рд▓рд╣рд░ рддрдм рддрдХ рдирд╣реАрдВ рдмрдирд╛рдиреА рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдирд╖реНрдЯ рди рд╣реЛ рдЬрд╛рдПред
рдпрд╣реА рд╣реИ, рдЦреЗрд▓ рдХреЛ рджреГрд╢реНрдп рдореЗрдВ рджреБрд╢реНрдордиреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░
рдЯреИрдЧ рдпрд╣рд╛рдВ рдЦреЗрд▓ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред
рд╢рддреНрд░реБ рдЯреИрдЧрд┐рдВрдЧ
Project Browser рдореЗрдВ
Enem prefab рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░,
рдЯреИрдЧ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░
рдРрдб рдЯреИрдЧ рдЪреБрдиреЗрдВред
рд╢рддреНрд░реБ рдирд╛рдордХ рдПрдХ
рдЯреИрдЧ рдмрдирд╛рдПрдВред
Prefab
рд╢рддреНрд░реБ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП
рд╢рддреНрд░реБ рдЯреИрдЧ рд╕реЗрдЯ
рдХрд░реЗрдВ ред
рджреБрд╢реНрдордиреЛрдВ рдХреА рд▓рд╣рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
рдЕрдм рд╣рдореЗрдВ рджреБрд╢реНрдордиреЛрдВ рдХреА рд▓рд╣рд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред IDE рдореЗрдВ
SpawnEnemy.cs рдЦреЛрд▓реЗрдВ рдФрд░
SpawnEnemy
рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдореНрди рд╡рд░реНрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬреЛрдбрд╝реЗрдВ:
[System.Serializable] public class Wave { public GameObject enemyPrefab; public float spawnInterval = 2; public int maxEnemies = 20; }
рд╡реЗрд╡ рдореЗрдВ
enemyPrefab
рд╣реЛрддрд╛ рд╣реИ - рдЗрд╕ рд▓рд╣рд░ рдореЗрдВ рд╕рднреА рджреБрд╢реНрдордиреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХрд╛ рдЖрдзрд╛рд░,
spawnInterval
- рд╕реЗрдХрдВрдб рдФрд░
maxEnemies
рдореЗрдВ рджреБрд╢реНрдордиреЛрдВ рдореЗрдВ рд▓рд╣рд░ рдХреЗ рдмреАрдЪ рдХрд╛ рд╕рдордп - рдЗрд╕ рд▓рд╣рд░ рдореЗрдВ рдмрдирд╛рдП рдЧрдП рджреБрд╢реНрдордиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
рд╡рд░реНрдЧ
Serializable рд╣реИ ,
рдЕрд░реНрдерд╛рддреН , рд╣рдо рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдЗрд╕рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░ рдХреЛ
SpawnEnemy
рд╡рд░реНрдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
public Wave[] waves; public int timeBetweenWaves = 5; private GameManagerBehavior gameManager; private float lastSpawnTime; private int enemiesSpawned = 0;
рдпрд╣рд╛рдВ рд╣рдо рджреБрд╢реНрдордиреЛрдВ рдХреЛ рдЬрдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдорд╛рд░реНрдЧ рдкрд░ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рджреБрд╢реНрдордиреЛрдВ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рд╕рдорд╛рди рд╣реИред
рд╣рдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреБрд╢реНрдордиреЛрдВ рдХреА рд▓рд╣рд░реЛрдВ рдХреЛ рддрд░рдВрдЧреЛрдВ рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреБрд╢реНрдордиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рджреБрд╢реНрдордиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВред
рдЗрди рд╕рднреА рдорд╛рд░ рдХреЗ рдмрд╛рдж, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдВрд╕ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП 5 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реЗрдЯ рдХрд░реЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ
Start()
рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓реЗрдВред
lastSpawnTime = Time.time; gameManager = GameObject.Find("GameManager").GetComponent<GameManagerBehavior>();
рдпрд╣рд╛рдВ рд╣рдо
lastSpawnTime
рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХрд╛ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ,
lastSpawnTime
, рджреГрд╢реНрдп рд▓реЛрдб рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХрд╛ рд╕рдордпред рддреЛ рдлрд┐рд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд
GameManagerBehavior
рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
Update()
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ
Update()
:
рдЖрдЗрдП рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд░рдг рджрд░ рдЪрд░рдг рдХрд░реЗрдВ:
- рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рддрд░рдВрдЧ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдВрддрд┐рдо рд╣реИред
- рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рд╣рдо рдкрд┐рдЫрд▓реЗ рджреБрд╢реНрдорди рд╕реНрдкреЙрди рдХреЗ рдмрд╛рдж рдмреАрддреЗ рд╣реБрдП рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рджреБрд╢реНрдорди рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рд▓рд╣рд░ рдореЗрдВ рдкрд╣рд▓рд╛ рджреБрд╢реНрдорди рд╣реИ, рддреЛ рд╣рдо
timeBetweenWaves
рдХрд┐ рдХреНрдпрд╛ timeBetweenWaves
рд╕реЗ timeInterval
рд╣реИред рдЕрдиреНрдпрдерд╛, рд╣рдо spawnInterval
рдХрд┐ рдХреНрдпрд╛ spawnInterval
рддрд░рдВрдЧреЛрдВ рд╕реЗ timeInterval
рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рд▓рд╣рд░ рдореЗрдВ рд╕рднреА рджреБрд╢реНрдорди рдирд╣реАрдВ рдмрдирд╛рдП рд╣реИрдВред - рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рджреБрд╢реНрдорди рдХреЛ рд╕реНрдкреЙрди рдХрд░реЗрдВ, рджреБрд╢реНрдорди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реБрдП
enemyPrefab
ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ enemiesSpawned
рдХреЗ рдореВрд▓реНрдп рдореЗрдВ enemiesSpawned
ред - рд╕реНрдХреНрд░реАрди рдкрд░ рджреБрд╢реНрдордиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рдпрджрд┐ рд╡реЗ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд▓рд╣рд░ рдореЗрдВ рдпрд╣ рдЖрдЦрд┐рд░реА рджреБрд╢реНрдорди рдерд╛, рддреЛ рд╣рдо рдЕрдЧрд▓реА рд▓рд╣рд░ рдмрдирд╛рддреЗ рд╣реИрдВред рд▓рд╣рд░ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╢реЗрд╖ рд╕рднреА рд╕реНрд╡рд░реНрдг рдХрд╛ 10 рдкреНрд░рддрд┐рд╢рдд рджреЗрддреЗ рд╣реИрдВред
- рдЖрдЦрд┐рд░реА рд▓рд╣рд░ рдХреЛ рд╣рд░рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЦреЗрд▓ рдореЗрдВ рдЬреАрдд рдХрд╛ рдПрдХ рдПрдиреАрдореЗрд╢рди рдпрд╣рд╛рдВ рдЦреЗрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕реНрдкреЙрди рдЕрдВрддрд░рд╛рд▓ рд╕реЗрдЯ рдХрд░рдирд╛
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ
рд░реЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ, рд╡реЗрд╡реНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛
рдЖрдХрд╛рд░ 4 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
рдЕрднреА рдХреЗ рд▓рд┐рдП,
рд╢рддреНрд░реБ Prefab рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдЪрд╛рд░ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╢рддреНрд░реБ рд╡рд╕реНрддреБ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдирд┐рдореНрди рдХреЗ рд░реВрдк рдореЗрдВ
рд╕реНрдкреЙрди рдЕрдВрддрд░рд╛рд▓ рдФрд░
рдЕрдзрд┐рдХрддрдо рд╢рддреНрд░реБ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:
- рддрддреНрд╡ 0 : рд╕реНрдкреЙрди рдЗрдВрдЯрд░рд╡рд▓: 2.5 , рдЕрдзрд┐рдХрддрдо рд╢рддреНрд░реБ: 5
- рддрддреНрд╡ 1 : рд╕реНрдкреЙрди рдЗрдВрдЯрд░рд╡рд▓: 2 , рдореИрдХреНрд╕ рджреБрд╢реНрдорди: 10
- рддрддреНрд╡ 2 : рд╕реНрдкреЙрди рдЗрдВрдЯрд░рд╡рд▓: 2 , рдореИрдХреНрд╕ рджреБрд╢реНрдорди: 15
- рддрддреНрд╡ 3 : рд╕реНрдкреЙрди рдЕрдВрддрд░рд╛рд▓: 1 , рдЕрдзрд┐рдХрддрдо рд╢рддреНрд░реБ: 5
рд╕рдорд╛рдкреНрдд рдпреЛрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:
рдмреЗрд╢рдХ, рдЖрдк рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝рд╛рдиреЗ рдпрд╛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЧреЗрдо рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдЕрд╣рд╛! рдмреАрдЯрд▓ рдиреЗ рдЖрдкрдХреА рдХреБрдХреА рдХреА рдпрд╛рддреНрд░рд╛ рд╢реБрд░реВ рдХрд░ рджреА рд╣реИ!
рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░реНрдп: рджреБрд╢реНрдордиреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝реЗрдВ
рдХрд┐рд╕реА рднреА рдЯреЙрд╡рд░ рд░рдХреНрд╖рд╛ рдЦреЗрд▓ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рджреБрд╢реНрдорди рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ,
Prefabs рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ
Enemy2 рднреА рд╣реИред
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ, Prefabs \ Enemy2 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдореЗрдВ
MoveEnemy рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВред
рдЧрддрд┐ 3 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ
рдФрд░ рд╢рддреНрд░реБ рдЯреИрдЧ рд╕реЗрдЯ
рдХрд░реЗрдВ ред рдЕрдм рдЖрдк рдЗрд╕ рддреНрд╡рд░рд┐рдд рджреБрд╢реНрдорди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдЖрд░рд╛рдо рди рдХрд░реЗ!
рдкреНрд▓реЗрдпрд░ рд▓рд╛рдЗрдл рдЕрдкрдбреЗрдЯ
рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреБрд╢реНрдордиреЛрдВ рдХреЗ рдЧрд┐рд░реЛрд╣ рдХреБрдХреА рдкрд░ рд╣рдорд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдХреЛрдИ рдиреБрдХрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрд▓реНрдж рд╣реА рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗред рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдиреБрдХрд╕рд╛рди рдЙрдард╛рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЕрдЧрд░ рд╡рд╣ рджреБрд╢реНрдорди рдХреЛ рдЪреБрдкрдХреЗ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
IDE рдореЗрдВ
GameManagerBehavior.cs рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
public Text healthLabel; public GameObject[] healthIndicator;
рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рдЬреАрд╡рди рдореВрд▓реНрдп рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
healthLabel
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдХреАрдЬрд╝ рдХреЛ рдЪрдмрд╛рддреЗ рд╣реБрдП рдкрд╛рдБрдЪ рдЫреЛрдЯреЗ рд╣рд░реЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд╛рд╕реНрдереНрдпрд╡рд░реНрдзрдХ - рд╡реЗ рдмрд╕ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рдкреНрд░рддреАрдХ рд╣реИрдВ; рдпрд╣ рдПрдХ рдорд╛рдирдХ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕рдВрдХреЗрддрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдордЬреЗрджрд╛рд░ рд╣реИред
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкреНрд░рдмрдВрдзрди
рдЕрдм
GameManagerBehavior
рдореЗрдВ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдВрдкрддреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
private int health; public int Health { get { return health; } set {
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░, рдХреЛрдб рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рд╕реЗрдЯрд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ:
- рдпрджрд┐ рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдПрдХ рд╕реБрдВрджрд░ рдЭрдЯрдХреЛрдВ рдХреЛ рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
CameraShake
рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдФрд░ рд╣рдо рдпрд╣рд╛рдВ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред - рд╣рдо рд╕реНрдХреНрд░реАрди рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдирд┐рдЬреА рдЪрд░ рдФрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд▓реЗрдмрд▓ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред
- рдпрджрд┐ рд╕реНрд╡рд╛рд╕реНрдереНрдп 0 рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЦреЗрд▓ рдХрд╛ рдЕрдВрдд рдЕрднреА рддрдХ рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИ, рддреЛ
gameOver
рдХреЛ true
gameOver
рдФрд░ gameOver
рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рдХрд░реЗрдВред - рд╣рдо рдХреБрдХреАрдЬрд╝ рдореЗрдВ рд╕реЗ рдПрдХ рд░рд╛рдХреНрд╖рд╕ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рднрд╛рдЧ рдЖрд╕рд╛рди рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рд╣рдо рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ
Health
рдХреЛ
Start()
:
Health = 5;
рд╣рдо
Health
рдХреЛ
5
рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рджреГрд╢реНрдп рдЦреЗрд▓рдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдм рд╣рдо рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рдмрдЧ рдХреБрдХреА рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ IDE рдХреЛ
MoveEnemy.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЬрд╛рдПрдВред
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореЗрдВ рдмрджрд▓рд╛рд╡
рдЕрдкрдиреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП,
Update()
рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА
Update()
рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде
// TODO:
рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдХреЛрдб рд╕реЗ рдмрджрд▓реЗрдВ:
GameManagerBehavior gameManager = GameObject.Find("GameManager").GetComponent<GameManagerBehavior>(); gameManager.Health -= 1;
рдЗрд╕рд▓рд┐рдП рд╣рдо
GameManagerBehavior
рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпреВрдирд┐рдЯ рдХреЛ рдЙрд╕рдХреЗ
Health
рд╕реЗ рдШрдЯрд╛рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ
GameManager рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдЙрд╕рдХреЗ
Health рд▓реЗрдмрд▓ рдХреЗ рд▓рд┐рдП
HealthLabel рдЪреБрдиреЗрдВред
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ
рдХреБрдХреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдкрд╛рдВрдЪ рдмрдЪреНрдЪреЗ
HealthIndicators рдХреЛ
GameManager рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕рдВрдХреЗрддрдХ рд╕рд░рдгреА рдореЗрдВ рдЦреАрдВрдЪреЗрдВ - рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕рдВрдХреЗрддрдХ рдХреБрдХреАрдЬрд╝ рдЦрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЫреЛрдЯреЗ рд╣рд░реЗ рд░рд╛рдХреНрд╖рд╕ рд╣реЛрдВрдЧреЗред
рджреГрд╢реНрдп рдХреЛ рдЪрд▓рд╛рдПрдВ рдФрд░ рддрдм рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдХреАрдбрд╝реЗ рдХреБрдХреА рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рдЬрд╛рддреЗред рд╣рд╛рд░рдиреЗ рддрдХ рдХреБрдЫ рди рдХрд░реЗрдВред
рд░рд╛рдХреНрд╖рд╕ рдмрджрд▓рд╛
рдЬрдЧрд╣ рдореЗрдВ рд░рд╛рдХреНрд╖рд╕? рд╣рд╛рдВред рдХреНрдпрд╛ рджреБрд╢реНрдорди рд╣рдорд▓рд╛ рдХрд░рддреЗ рд╣реИрдВ? рд╣рд╛рдБ, рдФрд░ рд╡реЗ menacing рджрд┐рдЦрддреЗ рд╣реИрдВ! рдЗрди рдЬрд╛рдирд╡рд░реЛрдВ рдХреЛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ!
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рд▓реЗрди рддрд╛рдХрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рджреБрд╢реНрдорди рдордЬрдмреВрдд рд╣реИрдВ рдФрд░ рдХреМрди рд╕реЗ рдХрдордЬреЛрд░ рд╣реИрдВ
- рдПрдХ рд░рд╛рдХреНрд╖рд╕ рдХреА рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рджреБрд╢реНрдордиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
- рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ - рдХрд┐рд╕ рджреБрд╢реНрдорди рдкрд░ рдЧреЛрд▓реА рдЪрд▓рд╛рдирд╛ рд╣реИ
- рдЧреЛрд▓реЗ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛
рд╢рддреНрд░реБ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрдЯреНрдЯреА
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдмреИрдВрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ - рдПрдХ рдЕрдВрдзреЗрд░реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдХреЗ рд▓рд┐рдП, рдФрд░ рджреВрд╕рд░рд╛ (рд╣рд░реЗ рд░рдВрдЧ рдХреА рдкрдЯреНрдЯреА рдереЛрдбрд╝реА рдЫреЛрдЯреА рд╣реИ) рд╣рдо рджреБрд╢реНрдорди рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕реНрдХреЗрд▓ рдХрд░реЗрдВрдЧреЗред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ
Prefabs \ Enemy рджреГрд╢реНрдп рдкрд░ рдЦреАрдВрдЪреЗрдВред
рддрдм
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ, рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
рджреБрд╢реНрдорди рдкрд░
Images \ Objects \ HealthBarBackground рдХреЛ рдЦреАрдВрдЪреЗрдВ рдФрд░ рдЫреЛрдбрд╝реЗрдВред
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ, HealthBarBackground (0, 1, -4) рдХреА
рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред
рдлрд┐рд░
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, Images \ Objects \ HealthBar рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдХреА
рдзреБрд░реА рдмрд╛рдПрдБ рд╣реИ ред рдлрд┐рд░ рдЗрд╕реЗ
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ
рд╢рддреНрд░реБ рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕рдХреА
рд╕реНрдерд┐рддрд┐ рдорд╛рди
(-0.63, 1, -5) рд╕реЗрдЯ рдХрд░реЗрдВ ред
X рд╕реНрдХреЗрд▓ рдХреЗ рд▓рд┐рдП, рдорд╛рди рдХреЛ
125 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВред
HealthBar рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ
рдореЗрдВ HealthBar рдирд╛рдордХ рдПрдХ рдирдпрд╛
C # рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВред рдмрд╛рдж рдореЗрдВ рд╣рдо рдЗрд╕реЗ рдмрджрд▓ рджреЗрдВрдЧреЗ рддрд╛рдХрд┐ рдпрд╣ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрдЯреНрдЯреА рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рдмрджрд▓ рджреЗред
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ
рд╢рддреНрд░реБ рд╡рд╕реНрддреБ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЙрд╕рдХреА рд╕реНрдерд┐рддрд┐
(20, 0, 0) рд╣реИ ред
рдкреНрд░реАрдлрд╝реИрдм рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░
рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ
рдХрд░реЗрдВ ред рдЕрдВрдд рдореЗрдВ,
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ
рд╢рддреНрд░реБ рд╡рд╕реНрддреБ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
рдЕрдм
Prefabs \ Enemy2 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрдЯреНрдЯреА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди рд╕рднреА рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрдЯреНрдЯреА рдХреА рд▓рдВрдмрд╛рдИ рдмрджрд▓реЗрдВ
IDE
HealthBar.cs рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
public float maxHealth = 100; public float currentHealth = 100; private float originalScale;
рдЕрдзрд┐рдХрддрдо рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореЗрдВ рджреБрд╢реНрдорди рдХреЗ рдЕрдзрд┐рдХрддрдо рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░
currentHealth
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореЗрдВ - рд╢реЗрд╖ рд╕реНрд╡рд╛рд╕реНрдереНрдпред рдЕрдВрдд рдореЗрдВ, рдУрд░рд┐рдЬрд┐рдирд▓рд╕реНрдХреЗрд▓ рдореЗрдВ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрдЯреНрдЯреА рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЖрдХрд╛рд░ рд╣реИред
originalScale
рд╡рд╕реНрддреБ рдХреЛ
Start()
рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ
Start()
:
originalScale = gameObject.transform.localScale.x;
рд╣рдо
localScale
рдЧреБрдг рдХрд╛
x
рдорд╛рди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВред
Update()
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝рдХрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрдЯреНрдЯреА рдХрд╛ рдкреИрдорд╛рдирд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
Update()
:
Vector3 tmpScale = gameObject.transform.localScale; tmpScale.x = currentHealth / maxHealth * originalScale; gameObject.transform.localScale = tmpScale;
рд╣рдо
localScale
рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдХрд╛
x рдорд╛рди рдЕрд▓рдЧ рд╕реЗ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗред рдлрд┐рд░ рд╣рдо рдмреАрдЯрд▓ рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП
рдПрдХреНрд╕- рд╕реНрдХреЗрд▓ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ
localScale
рдЪрд░ рдХреЛ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдЪрд░ рдкрд░ рдЕрд╕рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдореЗрдВ рдЧреЗрдо рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рд╢рддреНрд░реБрдУрдВ рдкрд░ рдЖрдкрдХреЛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рд▓рдХреАрд░реЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреАред
рдЬрдмрдХрд┐ рдЦреЗрд▓ рдЪрд▓ рд░рд╣рд╛ рд╣реИ,
рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ
рд╢рддреНрд░реБ (рдХреНрд▓реЛрди) рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ рдФрд░ рдЙрд╕рдХреЗ рдмрдЪреНрдЪреЗ
HealthBar рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЗрд╕рдХрд╛
рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореВрд▓реНрдп рдмрджрд▓реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдмрд╛рд░ рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИред
рд░реЗрдВрдЬ рдХреЗ рднреАрддрд░ рджреБрд╢реНрдордиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ
рдЕрдм рд╣рдорд╛рд░реЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рди рджреБрд╢реНрдордиреЛрдВ рдХреЛ рдирд┐рд╢рд╛рдирд╛ рдмрдирд╛рдирд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдЗрд╕ рдЕрд╡рд╕рд░ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдореЙрдиреНрд╕реНрдЯрд░ рдФрд░ рджреБрд╢реНрдорди рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░
рдкреНрд░реАрдлреИрдмреНрд╕ \ рдореЙрдиреНрд╕реНрдЯрд░ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ
рд╕рд░реНрдХрд▓ рдХреЛрд▓рд╛рдЗрдбрд░ 2 рдбреА рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВред
рдХреЛрд▓рд╛рдЗрдбрд░ рдХреЗ
рд░реЗрдбрд┐рдпрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ
2.5 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ - рдпрд╣ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рд╣рдорд▓реЗ рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ред
рдЯреНрд░рд┐рдЧреЗрд░ рдЪреЗрдХ рдмреЙрдХреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╡рд╕реНрддреБрдПрдВ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЙрд╕рд╕реЗ рдЯрдХрд░рд╛рдПрдВред
рдЕрдВрдд рдореЗрдВ,
рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░,
рд░реЗрдпрд╕реНрдЯрд░ рдХреЛ
рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдиреНрд╕реНрдЯрд░ рдХреА
рдкрд░рдд рд╕реЗрдЯ
рдХрд░реЗрдВ ред рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ,
рд╣рд╛рдБ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ
, рдмрдЪреНрдЪреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ ред рдпрджрд┐ рдЗрдЧреНрдиреЛрд░ рд░рд╛рдпрдХрд╛рд╕реНрдЯ рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреЛрд▓рд╛рдЗрдбрд░ рдорд╛рдЙрд╕ рдХреНрд▓рд┐рдХ рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЧрд╛ред рдпрд╣ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА рдХреНрдпреЛрдВрдХрд┐ рд░рд╛рдХреНрд╖рд╕ рдмреНрд▓реЙрдХ рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рдиреАрдЪреЗ рдУрдкрдиреНрд╕рдкреЙрдЯ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдд рдХрд░рддреЗ рд╣реИрдВред

рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рджреБрд╢реНрдорди рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдПрдХ рдХреЛрд▓рд╛рдЗрдбрд░ рдФрд░ рдПрдХ рдХрдареЛрд░ рд╢рд░реАрд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдХрддрд╛ рдХреЗрд╡рд▓ рдЯреНрд░рд┐рдЧрд░ рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдЬрддреА рд╣реИ рдЬрдм рдПрдХ рдХрдареЛрд░ рд╢рд░реАрд░ рдХреЛ рдХрд┐рд╕реА рдПрдХ рдХреЛрд▓рд╛рдЗрдбрд░ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ, Prefabs \ Enemy рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
Rigidbody 2D рдШрдЯрдХ рдЬреЛрдбрд╝реЗрдВ рдФрд░
рдмреЙрдбреА рдЯрд╛рдЗрдк рдХреЗ рд▓рд┐рдП
рдХрд╛рдЗрдиреЗрдореИрдЯрд┐рдХ рдЪреБрдиреЗрдВ ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╢рд░реАрд░ рднреМрддрд┐рдХреА рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
1 рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде
рд╕рд░реНрдХрд▓ рдХреЛрд▓рд╛рдЗрдбрд░ 2 рдбреА рдЬреЛрдбрд╝реЗрдВред
Prefabs \ Enemy 2 рдХреЗ рд▓рд┐рдП рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред
рдЯреНрд░рд┐рдЧрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд░рд╛рдХреНрд╖рд╕ рд╕рдордЭреЗрдВрдЧреЗ рдХрд┐ рджреБрд╢реНрдорди рдЙрдирдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реИрдВред
рд╣рдореЗрдВ рдПрдХ рдФрд░ рдЪреАрдЬ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдЬрдм рджреБрд╢реНрдорди рдХреЛ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдЖрдЧ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП рдЕрдкрд╡рд╛рдж рди рдЙрдард╛рдПрдВред
EnemyDestructionDelegate рдирд╛рдордХ рдПрдХ рдирдИ
C # рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ
рджреБрд╢реНрдорди рдФрд░
Enemy2 рдкреНрд░реАрдлреИрдмреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред
рдЖрдИрдбреАрдИ рдореЗрдВ
EnemyDestructionDelegate.cs рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдШреЛрд╖рдгрд╛ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:
public delegate void EnemyDelegate (GameObject enemy); public EnemyDelegate enemyDelegate;
рдпрд╣рд╛рдВ рд╣рдо рдПрдХ
delegate
рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдЯреЗрдирд░ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдиреЛрдЯ : рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдиреНрдп рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХрддрд╛ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкреНрд░рддрд┐рдирд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
void OnDestroy() { if (enemyDelegate != null) { enemyDelegate(gameObject); } }
рдЬрдм рдХреЛрдИ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХрддрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреА рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ
null
рдЕрд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП
null
рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЗрд╕реЗ
gameObject
рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рд╕рднреА рдЙрддреНрддрд░рджрд╛рддрд╛рдУрдВ рдХреЛ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рджреБрд╢реНрдорди рдирд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВред
рд╣рдо рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдорд╛рд░рдиреЗ рдХрд╛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рджреЗрддреЗ рд╣реИрдВ
рдФрд░ рдЕрдм рд░рд╛рдХреНрд╖рд╕ рдЕрдкрдиреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рджреБрд╢реНрдордиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдореЙрдиреНрд╕реНрдЯрд░ рдкреНрд░реАрдлрд╝реИрдм рдореЗрдВ рдПрдХ рдирдИ
C # рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЗрд╕реЗ
рд╢реВрдЯ рдХрд░реЗрдВ ред
OpenEnemy.cs рдХреЛ IDE рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░
Generics
рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд╛рдг рдХрд╛
using
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреЛрдбрд╝реЗрдВред
using System.Collections.Generic;
рд░реЗрдВрдЬ рдХреЗ рднреАрддрд░ рд╕рднреА рджреБрд╢реНрдордиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
public List<GameObject> enemiesInRange;
рджреБрд╢реНрдордиреЛрдВ рдореЗрдВ рд╣рдо рд░реЗрдВрдЬ рдореЗрдВ рд╕рднреА рджреБрд╢реНрдордиреЛрдВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред
рдкреНрд░рд╛рд░рдВрдн
Start()
рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХреЛ
Start()
ред
enemiesInRange = new List<GameObject>();
рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдореЗрдВ рдХреЛрдИ рджреБрд╢реНрдорди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдмрдирд╛рддреЗ рд╣реИрдВред
enemiesInRange
рдХреА рд╕реВрдЪреА рднрд░реЗрдВ
enemiesInRange
! рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
OnEnemyDestroy
рд╣рдо рджреБрд╢реНрдордиреЛрдВ рдХреЛ рджреБрд╢реНрдордиреЛрдВ рд╕реЗ enemiesInRange
ред рдЬрдм рдПрдХ рджреБрд╢реНрдорди рдПрдХ рд░рд╛рдХреНрд╖рд╕ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдПрдХ рдЯреНрд░рд┐рдЧрд░ рдкрд░ рдХрджрдо OnTriggerEnter2D
рд╣реИ, рддреЛ OnTriggerEnter2D
ред- рдлрд┐рд░ рд╣рдо рджреБрд╢реНрдордиреЛрдВ рдХреЛ рджреБрд╢реНрдорди рдореЗрдВ
enemiesInRange
рд╕реВрдЪреА рд╕реВрдЪреА рдФрд░ EnemyDestructionDelegate
рдШрдЯрдирд╛ OnEnemyDestroy
рдЬреЛрдбрд╝реЗрдВред рддреЛ рд╣рдо рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рджреБрд╢реНрдорди рдХреЗ рд╡рд┐рдирд╛рд╢ рдкрд░ OnEnemyDestroy
рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдо рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдореГрдд рджреБрд╢реНрдордиреЛрдВ рдкрд░ рдЧреЛрд▓рд╛ рдмрд╛рд░реВрдж рдЦрд░реНрдЪ рдХрд░рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣реИ рдирд╛? OnTriggerExit2D
рд╣рдо рджреБрд╢реНрдорди рдХреЛ рд╕реВрдЪреА рд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдЕрдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рджреБрд╢реНрдорди рд╕реАрдорд╛ рдореЗрдВ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдореЗрдВ рдЧреЗрдо рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд░рд╛рдХреНрд╖рд╕ рдХреЛ рд╕реНрдерд┐рддрд┐ рджреЗрдВ, рдЗрд╕реЗ рдЪреБрдиреЗрдВ рдФрд░
enemiesInRange
рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
enemiesInRange
рд╕реВрдЪреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред
рд▓рдХреНрд╖реНрдп рдЪрдпрди
рд░рд╛рдХреНрд╖рд╕ рдЕрдм рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рджреБрд╢реНрдорди рдХреА рд╕реАрдорд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рд╡реЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рдХрдИ рджреБрд╢реНрдорди рд╣реЛрдВрдЧреЗ рддреЛ рд╡реЗ рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ?
рдмреЗрд╢рдХ, рд╡реЗ рдЬрд┐рдЧрд░ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╕реЗ рд╣рдорд▓рд╛ рдХрд░реЗрдВрдЧреЗ!
MoveEnemy.cs IDE рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЦреЛрд▓реЗрдВ рдФрд░ рдЗрд╕ рд░рд╛рдХреНрд╖рд╕ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдПрдХ рдирдИ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:
public float DistanceToGoal() { float distance = 0; distance += Vector2.Distance( gameObject.transform.position, waypoints [currentWaypoint + 1].transform.position); for (int i = currentWaypoint + 1; i < waypoints.Length - 1; i++) { Vector3 startPosition = waypoints [i].transform.position; Vector3 endPosition = waypoints [i + 1].transform.position; distance += Vector2.Distance(startPosition, endPosition); } return distance; }
рдХреЛрдб рджреБрд╢реНрдорди рджреНрд╡рд╛рд░рд╛ рдпрд╛рддреНрд░рд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рдкрде рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣
Distance
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ
Vector3
рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рдж рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ рдХрд┐ рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рд▓рдХреНрд╖реНрдп рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рд░рд╛рдХреНрд╖рд╕ рд╕рд╢рд╕реНрддреНрд░ рдФрд░ рдЕрд╕рд╣рд╛рдп рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рд╣рдо рдЗрд╕реЗ рдХрд░реЗрдВрдЧреЗред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдЕрдкрдиреЗ рдЧреЛрд▓реЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрддрд╛ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред
рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдЧреЛрд▓реЗ рджреЗрддреЗ рд╣реИрдВред рдЦреЛрд▓ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ!
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ
рдЪрд┐рддреНрд░ / рдСрдмреНрдЬреЗрдХреНрдЯ / рдмреБрд▓реЗрдЯ 1 рджреГрд╢реНрдп рдкрд░ рдЦреАрдВрдЪреЗрдВ ред
Z рд╕реЗ
-2 рдкрд░ рд╕реНрдерд┐рддрд┐ рд╕реЗрдЯ рдХрд░реЗрдВ - x рдФрд░ y рдкрд░ рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рд╣рд░ рдмрд╛рд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╛рдЗрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред
BulletBehavior рдирд╛рдордХ рдПрдХ рдирдИ
C # рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдлрд┐рд░ IDE рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдЪрд░ рдЬреЛрдбрд╝реЗрдВ:
public float speed = 10; public int damage; public GameObject target; public Vector3 startPosition; public Vector3 targetPosition; private float distance; private float startTime; private GameManagerBehavior gameManager;
speed
рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╛рдЗрд▓ рдХреА
speed
рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ; рдирд╛рдо рд╕реЗ
damage
рд╕реНрдкрд╖реНрдЯ рд╣реИред
target
,
startPosition
рдФрд░
targetPosition
рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╛рдЗрд▓ рдХреА рджрд┐рд╢рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
distance
рдФрд░
startTime
рдкреНрд░рдХреНрд╖реЗрдкреНрдп рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддрд╛ рд╣реИред рдЬрдм рд╡рд╣ рджреБрд╢реНрдорди рдХреЛ рдорд╛рд░рддрд╛ рд╣реИ рддреЛ
gameManager
рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдкреБрд░рд╕реНрдХреГрдд рдХрд░рддрд╛ рд╣реИред
Start()
рдореЗрдВ рдЗрди рдЪрд░реЛрдВ рдХреЗ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ:
startTime = Time.time; distance = Vector2.Distance (startPosition, targetPosition); GameObject gm = GameObject.Find("GameManager"); gameManager = gm.GetComponent<GameManagerBehavior>();
startTime
рд╣рдо рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдФрд░ рд▓рдХреНрд╖реНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ GameManagerBehavior
редрдкреНрд░рдХреНрд╖реЗрдкреНрдп рдХреА рдЧрддрд┐ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Update()
рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ :
- рд╣рдо рдкреНрд░рдХреНрд╖реЗрдкреНрдп рдХреА рдирдИ рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ,
Vector3.Lerp
рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХреЗ рдкрджреЛрдВ рдХреЗ рдмреАрдЪ рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред - рдпрджрд┐ рдкреНрд░рдХреНрд╖реЗрдкреНрдп рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ
targetPosition
, рддреЛ рд╣рдо рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИ target
ред - рд╣рдо
HealthBar
рд▓рдХреНрд╖реНрдп рдХреЗ рдШрдЯрдХ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ damage
рдкреНрд░рдХреНрд╖реЗрдкреНрдп рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдЗрд╕рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЛ рдХрдо рдХрд░рддреЗ рд╣реИрдВред - рдпрджрд┐ рджреБрд╢реНрдорди рдХрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдирд╖реНрдЯ рдХрд░ рджреЗрддреЗ рд╣реИрдВ, рдзреНрд╡рдирд┐ рдкреНрд░рднрд╛рд╡ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рдкреБрд░рд╕реНрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдкрд░ рд▓реМрдЯреЗрдВредрд╣рдо рдмрдбрд╝реЗ рдЧреЛрд▓реЗ рдмрдирд╛рддреЗ рд╣реИрдВ
рдХреНрдпрд╛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрджрд┐ рд░рд╛рдХреНрд╖рд╕ рдЙрдЪреНрдЪ рд╕реНрддрд░реЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдЧреЛрд▓реЗ рдорд╛рд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗ? рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╛рдЗрд▓ рдкреНрд░реАрдлреИрдм рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрджрд╛рдиреБрдХреНрд░рдо рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреИрдм рдкрд░ Bullet1рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдЦреАрдВрдЪреЗрдВ ред рдореВрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджреГрд╢реНрдп рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ - рд╣рдореЗрдВ рдЕрдм рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рджреЛ рдмрд╛рд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдорд┐рдд рдирдХрд▓ Bullet1 ред рдмреБрд▓реЗрдЯ 2 рдФрд░ рдмреБрд▓реЗрдЯ 3 рдХреА рдкреНрд░рддрд┐рдпреЛрдВ рдХреЛ рдирд╛рдо рджреЗрдВ ред рдмреБрд▓реЗрдЯ 2 рдЪреБрдиреЗрдВ ред рдореЗрдВ рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ , рдХреНрд╖реЗрддреНрд░ рд╕реЗрдЯ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдШрдЯрдХ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкреНрд░рддрд┐рдкрд╛рджрдХ рдореВрд▓реНрдп рдЫрд╡рд┐рдпрд╛рдБ / рд╡рд╕реНрддреБрдУрдВ / Bullet2ред рддреЛ рд╣рдо Bullet2 рдХреЛ Bullet1 рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдмрдирд╛рдПрдВрдЧреЗредрдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЛрд╣рд░рд╛рдПрдБ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдкреВрд░реНрд╡рдирд┐рд░реНрдорд┐рдд рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП Bullet3 рдкрд░ рдЫрд╡рд┐рдпрд╛рдБ рд╕рдВрдмрдВрдзрд┐рдд / рд╡рд╕реНрддреБрдУрдВ / Bullet3 ред рдмреБрд▓реЗрдЯ рд╡реНрдпрд╡рд╣рд╛рд░рдореЗрдВ рдЖрдЧреЗ рд╣рдо рдЧреЛрд▓реЗ рд╕реЗ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдХреНрд╖рддрд┐ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдВрдЧреЗред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреИрдм рдореЗрдВ Prefab Bullet1 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ред рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдЖрдк рджреЗрдЦ рдЧреЛрд▓реА рд╡реНрдпрд╡рд╣рд╛рд░ (рд╕реНрдХреНрд░рд┐рдкреНрдЯ) рд╣реИ, рдЬреЛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдиреБрдХрд╕рд╛рди рдореВрд▓реНрдп 10 рдХреЗ рд▓рд┐рдП Bullet1 , 15 рдХреЗ рд▓рд┐рдП Bullet2 рдФрд░ 20 рдХреЗ рд▓рд┐рдП Bullet3- рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдорд╛рди рдЬреЛ рдЖрдкрдХреЛ рдкрд╕рдВрдж рд╣реЛредрдиреЛрдЯ : рдореИрдВрдиреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рддрд╛рдХрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдХреНрд╖рддрд┐ рдХреЗ рд▓рд┐рдП рдХреАрдордд рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рдПред рдпрд╣ рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред
рдкреНрд░реАрдлреИрдм рдХреЗ рдЧреЛрд▓реЗ - рдЖрдХрд╛рд░ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рд╣реИрдЧреЛрд▓реЗ рдХреЗ рд╕реНрддрд░ рдХреЛ рдмрджрд▓рдирд╛
рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЧреЛрд▓реЗ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдордЬрдмреВрдд рд░рд╛рдХреНрд╖рд╕ рддреЗрдЬреА рд╕реЗ рджреБрд╢реНрдордиреЛрдВ рдХреЛ рдирд╖реНрдЯ рдХрд░ рджреЗрдВредIDE рдореЗрдВ MonsterData.cs рдЦреЛрд▓реЗрдВ рдФрд░ MonsterLevel
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ : public GameObject bullet; public float fireRate;
рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрд░ рдХреЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд╖реЗрдкреНрдп рдХреЗ рдкреНрд░реАрдлреИрдм рдФрд░ рдЖрдЧ рдХреА рдЖрд╡реГрддреНрддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд░рд╛рдХреНрд╖рд╕ рд╕реЗрдЯрдЕрдк рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрддрд╛ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВредрдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдореЙрдиреНрд╕реНрдЯрд░ рдкреНрд░реАрдлрд╝реИрдм рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ ред рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реНрддрд░ рдШрдЯрдХ рдореЗрдВ рджрд╛рдирд╡ рдбреЗрдЯрд╛ (рд╕реНрдХреНрд░рд┐рдкреНрдЯ) ред рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреА рдЖрдЧ рджрд░ рдХреЛ 1 рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ ред рдлрд┐рд░ рддрддреНрд╡ 0, 1, рдФрд░ 2 рдХреЗ рдмреБрд▓реЗрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ Bullet1 , Bullet2 рдФрд░ Bullet3 рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ редрд░рд╛рдХреНрд╖рд╕ рдХрд╛ рд╕реНрддрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:рдЧреЛрд▓реЗ рджреБрд╢реНрдордиреЛрдВ рдХреЛ рдорд╛рд░рддреЗ рд╣реИрдВ? рд╣рд╛рдБ! рдЪрд▓реЛ рдЖрдЧ рдЦреЛрд▓реЛ!рдЦреБрд▓реА рдЖрдЧ
OpenEnemy.cs рдХреЛ IDE рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░ рдЬреЛрдбрд╝реЗрдВ: private float lastShotTime; private MonsterData monsterData;
рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рдпреЗ рдЪрд░ рдЕрдВрддрд┐рдо рд░рд╛рдХреНрд╖рд╕ рд╢реЙрдЯ рдХреЗ рд╕рдордп рдХреЛ рдЯреНрд░реИрдХ рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рдВрд░рдЪрдирд╛ MonsterData
рдЬрд┐рд╕рдореЗрдВ рд░рд╛рдХреНрд╖рд╕ рдХреЗ рдЧреЛрд▓реЗ рдХреЗ рдкреНрд░рдХрд╛рд░, рдЖрдЧ рдХреА рдЖрд╡реГрддреНрддрд┐, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИредрдЗрди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ Start()
: lastShotTime = Time.time; monsterData = gameObject.GetComponentInChildren<MonsterData>();
рдпрд╣рд╛рдВ рд╣рдо lastShotTime
рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ MonsterData
рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдШрдЯрдХ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ редрд╢реВрдЯрд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реЗрдВ: void Shoot(Collider2D target) { GameObject bulletPrefab = monsterData.CurrentLevel.bullet;
- рд╣рдореЗрдВ рдмреБрд▓реЗрдЯ рдХреЗ рд╢реБрд░реБрдЖрддреА рдФрд░ рд▓рдХреНрд╖рд┐рдд рд╕реНрдерд╛рди рдорд┐рд▓рддреЗ рд╣реИрдВред Z рдХреЗ рдмрд░рд╛рдмрд░ рд╕реНрдерд┐рддрд┐ z рд╕реЗрдЯ рдХрд░реЗрдВ
bulletPrefab
ред рдкрд╣рд▓реЗ, рд╣рдо рдкреНрд░рдХреНрд╖реЗрдкреНрдп рдХреА рдкреВрд░реНрд╡ рд╕реНрдерд┐рддрд┐ рдХреЛ z рдореЗрдВ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рдХреНрд╖реЗрдкреНрдп рд╢реВрдЯрд┐рдВрдЧ рд░рд╛рдХреНрд╖рд╕ рдХреЗ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдИ рджреЗ, рд▓реЗрдХрд┐рди рджреБрд╢реНрдордиреЛрдВ рд╕реЗ рдКрдкрд░ред - рд╣рдо
bulletPrefab
рдЙрдкрдпреБрдХреНрдд рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдП рд╢реЗрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ MonsterLevel
ред рдЕрд╕рд╛рдЗрди startPosition
рдФрд░ targetPosition
рдкреНрд░реЛрдЬреЗрдХреНрдЯрд╛рдЗрд▓ред - рд╣рдо рдЦреЗрд▓ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рддреЗ рд╣реИрдВ: рдЬрдм рд░рд╛рдХреНрд╖рд╕ рдЧреЛрд▓реА рдорд╛рд░рддрд╛ рд╣реИ, рддреЛ рд╢реВрдЯрд┐рдВрдЧ рдХрд╛ рдПрдиреАрдореЗрд╢рди рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд▓реЗрдЬрд░ рдХреА рдЖрд╡рд╛рдЬрд╝ рдмрдЬрд╛рдПрдВред
рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде рд░рдЦрдирд╛
рдпрд╣ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд▓рдХреНрд╖реНрдп рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдФрд░ рд░рд╛рдХреНрд╖рд╕ рдХреЛ рджреЗрдЦреЛредShootEnemy.cs рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ ,Update()
рдЗрд╕ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝реЗрдВ : GameObject target = null;
рдЗрд╕ рдХреЛрдб рдЪрд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред- рд░рд╛рдХреНрд╖рд╕ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВред рд╣рдо рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рджреВрд░реА рдкрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ
minimalEnemyDistance
ред рд╣рдо рд╕реАрдорд╛ рдХреЗ рднреАрддрд░ рд╕рднреА рджреБрд╢реНрдордиреЛрдВ рдХреЗ рдЪрдХреНрд░ рдореЗрдВ рдШреВрдорддреЗ рд╣реИрдВ рдФрд░ рджреБрд╢реНрдорди рдХреЛ рдПрдХ рдирдпрд╛ рдирд┐рд╢рд╛рдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдпрджрд┐ рдХреБрдХреА рд╕реЗ рдЙрд╕рдХреА рджреВрд░реА рд╡рд░реНрддрдорд╛рди рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╕реЗ рдХрдо рд╣реЛред - рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ
Shoot
рдХрд┐ рдЕрдЧрд░ рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп рд░рд╛рдХреНрд╖рд╕ рдХреА рдлрд╛рдпрд░рд┐рдВрдЧ рдЖрд╡реГрддреНрддрд┐ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ рдФрд░ lastShotTime
рд╡рд░реНрддрдорд╛рди рд╕рдордп рдХрд╛ рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред - рд╣рдо рд░рд╛рдХреНрд╖рд╕ рдФрд░ рдЙрд╕рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рдмреАрдЪ рд░реЛрдЯреЗрд╢рди рдХреЗ рдХреЛрдг рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд░рд╛рдХреНрд╖рд╕ рдХреЛ рдЗрд╕ рдХреЛрдг рдкрд░ рдШреБрдорд╛рддреЗ рд╣реИрдВред рдЕрдм рд╡рд╣ рд╣рдореЗрд╢рд╛ рд▓рдХреНрд╖реНрдп рдХреЛ рджреЗрдЦреЗрдЧрд╛ред
рдлрд╝рд╛рдЗрд▓ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХрддрд╛ рдореЗрдВ рдЧреЗрдо рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рд░рд╛рдХреНрд╖рд╕ рдХреБрдХреАрдЬрд╝ рдХреА рд╕рдЦреНрдд рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдВрдЧреЗред рд╣рдо рдЖрдЦрд┐рд░рдХрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ!рдЖрдЧреЗ рдХрд╣рд╛рдБ рдЬрд╛рдирд╛ рд╣реИ
рддреИрдпрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ редрд╣рдордиреЗ рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдЦреЗрд▓ рд╣реИредрдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдЧреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ:- рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╢рддреНрд░реБ рдФрд░ рд░рд╛рдХреНрд╖рд╕
- рджреБрд╢реНрдордиреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдорд╛рд░реНрдЧ
- рд╡рд┐рднрд┐рдиреНрди рдЦреЗрд▓ рд╕реНрддрд░
рдЗрди рдкрд╣рд▓реБрдУрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЦреЗрд▓ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдордЬреЗрджрд╛рд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдпрд╛ рдЧреЗрдо рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдЦреЗрд▓рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ рдЗрд╕рдХрд╛ рд▓рд┐рдВрдХ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВредрдПрдХ рдЯреЙрд╡рд░ рд░рдХреНрд╖рд╛ рд╣рд┐рдЯ рдЧреЗрдо рдмрдирд╛рдиреЗ рдХреЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред