코루틴은 함수 진행중 일시정지 후 계산을 실행하고 싶을때 사용하는 도구이다. 코루틴의 특징으로 비동기적 방식같지만 직렬로 실행되는 특징을 가지고있다.
코루틴의 경우 yield return을 사용하여 실행하는 동작을 반환한다. 종류를 설명하자면

다음과같이 기능을 동작하고 StartCoroutine, StopCoroutine을 통해 코루틴 시작, 끝을 조절할 수 있다.
소소한 꿀팁을 말하자면 WaitForSeconds처럼 자주 반복하는 기능은 생성됐다 삭제됐다를 반복하기 때문에 메모리 단편화가 발생할 수 있다.
그러므로 WaitForSeconds routeDelay = new WaitForSeconds(1f); 이렇게 작성해주면 메모리를 적게 잡아먹고 실행될 때 꺼내쓰는 형식으로 사용 가능하다.
주의사항으로 StopCoroutine에서는 동작이 조금 다른데


다음과같이 Coroutine에 할당된 StartCoroutine을 중지시켜줘야 정상 작동이 된다.
C#에서 배운 public event Action OnDied; 처럼 유니티에서 제공하는 이벤트인 public UnityAction OnDied;가 있다
두 이벤트 모두 같은 동작을 하지만 속도 차이가 조금 있다.
동작 방법은

여기에서 이벤트가 필요한경우 OnTrigger.InVoke()를 사용하여 호출하면되고,


여기에서 이벤트가 필요한경우 OnTrig.Invoke()를 사용하여 호출하면 된다.
사용시 차이점: 델리게이트의 이벤트는 Action뒤에 매개변수를 작성해 주어야하지만 유니티 이벤트는 이벤트로 호출되는 함수의 매개변수를 inspector에서 적용할 수 있다. 그러므로 따로 매개변수 지정을 하지 않아도 인스펙터에서 원하는 매개변수가 지정가능하다 반대의 경우도 가능하다.
&UI에 사용되는 버튼이 유니티이벤트 형식으로 작성되었다.
유니티 이벤트에서는 Dynamic, static 파라미터를 설정해줄 수 있는데 static은 에디터에서 설정한 값을 Dynamic은 유동적으로 파라미터를 지정 하능하다.
예를들어
1)Static


다음과같이 코드를 작성해주고


작성한 222222의 값이 출력되는것을 볼 수 있다.
2) Dynamic


스페이스를 누른 횟수에 따라 숫자가 변하는것을 볼 수 있다.





PlayerContoller클래스에서 Coroutine을 사용하여 Bullet의 기능을 수정하였다. 번호키 1번과 2번을 지정해 일정간격으로 총알이 나가는 기능과 Mathf.Clamp를 사용해 범위를 지정해주고 최대최소의 속도로 총알이 나갈 수 있게 구현하였다






OnTrigger를 통해 isTrigger를 통해 이벤트 함수를 실행시켜 Enemy와 StageSpawn 클래스의 함수를 호출하고 StageSpawn의 StartCoroutine이 포함된 함수를 호출하여 1초간격으로 5마리의 적을 생성하고, Enemy클래스에서 적을 따라가는 기능을 구현하였다.(Raycast의경우 ray에 적이 없을시 모두 target이 null이 되기때문에 잠시 생략을 해주었다)