Недавно начал изучать корутины. Не совсем понимаю, как они работают. Я писал скрипт босса для игры, и использовал корутины(впервые). Мне нужно было, чтобы, при переходе на вторую стадию, босс двигался по схемы с корутинов, но при переходе на вторую стадию, он продолжает движение так же, как на первой. Вот код:
spoilerusing System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Boss2 : Monster
{
[SerializeField]
private float speed = 2.0F;
[SerializeField]
public float PosMax1;
[SerializeField]
public float PosMin1;
[SerializeField]
public float PosMax2;
[SerializeField]
public float PosMin2;
[SerializeField]
int HitPoints = 7;
[SerializeField]
int Stadium = 1;
Vector3 direction;
private SpriteRenderer sprite;
private Bullet bullet;
IEnumerator Waiting()
{
yield return new WaitForSeconds(5);
}
IEnumerator Start1()
{
yield return StartCoroutine(Waiting());
transform.position+=Vector3.left*10*Mathf.Sin(Time.deltaTime);
Debug.Log ("Complite");
}
IEnumerator Start2()
{
yield return StartCoroutine(Waiting());
if (transform.position.x >= PosMax2)
{
direction *= -1.0F;
}
else if (transform.position.x <= PosMin2)
{
direction = transform.right;
}
Debug.Log ("Complite");
}
IEnumerator Start3()
{
yield return StartCoroutine(Waiting());
transform.position+=Vector3.left*-10*Mathf.Sin(Time.deltaTime);
Debug.Log ("Complite");
}
IEnumerator Start4()
{
yield return StartCoroutine(Waiting());
if (transform.position.x >= PosMax1)
{
direction *= -1.0F;
}
else if (transform.position.x <= PosMin1)
{
direction = transform.right;
}
Debug.Log ("Complite");
}
void Start5()
{
if (transform.position.x >= PosMax1)
{
direction *= -1.0F;
}
else if (transform.position.x <= PosMin1)
{
direction = transform.right;
}
Debug.Log ("Complite");
}
protected override void Awake()
{
sprite = GetComponentInChildren<SpriteRenderer> ();
bullet = Resources.Load<Bullet>("Bullet");
}
protected override void Start()
{
direction = transform.right;
Stadium = 1;
}
void Update ()
{
Move ();
}
public void Damaged()
{
HitPoints--;
if (Stadium == 1 && HitPoints == 0)
{
Stadium = 2;
HitPoints = 10;
}
else if (Stadium == 2 && HitPoints == 0)
{
Destroy (gameObject);
}
}
protected virtual void OnTriggerEnter2D(Collider2D collider)
{
Bullet bullet = collider.GetComponent<Bullet> ();
if (bullet)
{
Damaged ();
}
Character character = collider.GetComponent<Character> ();
if (character)
{
character.ReceiveDamage ();
}
}
private void Move()
{
if (Stadium == 1)
{
if (transform.position.x >= PosMax1)
{
direction *= -1.0F;
}
else if (transform.position.x <= PosMin1)
{
//transform.position+=Vector3.up*10*Time.deltaTime;
direction = transform.right;
}
}
else if (Stadium == 2)
{
for (; ;)
{
Start5 ();
Start1 ();
Start2 ();
Start3 ();
Start4 ();
}
}
transform.position = Vector3.MoveTowards (transform.position, transform.position + direction, speed * Time.deltaTime);
sprite.flipX = direction.x > 0.0F;
}
}
Буду рад вашей помощи.
P.S. Я новичок, и это мой первый проект