UPDATE 문 넣어 쓰는 것이 너무 많다는 것을 알고 개인적으로 어떤 방법이 있을까 생각하여
찾아보다 코루틴에 대하여 공부하게 되었다.
코루틴은 시간의 경과에 따라 절차적인 단계를 수행할 때 쓰이는 함수라고 한다.
시간에 따라 실행되도록 하는 로직은 UPDATE 함수로 해결할 수 도 있지만
UPDATE문은 매 프레임마다 안에 있는 내용을 수행하기에 프레임 단위로 처리해야하는
것이 아니라면 비효율적이라고 한다. 그렇기에 개발자는 코루틴을 자주 사용하게 된다고 한다.
이번에 내가 들었던 이야기도 아마 코루틴을 사용하라는 의미였던 것 같다.
코루틴은 IEnumerator 라는 반환값을 가지고있다. 그리고 이 함수의 내용을 실행 중지시키고
다음 프레임에서 실행을 재개하도록 하는 yield return 이라는 전용 함수가 존재한다.
yield retrun는 뒤에 붙어있는 내용에 따라 다른 결과를 만드는데
yield return null //다음 UPDATE 호출 시 까지 대기한다.
yield return new WaitForSeconds() //괄호안의 시만큼 무조건 대기시간을 가진다.
yield return new WaitForSecondsRealtime() // WaitForSeconds와 기능은 같지만 TimeScale의 영향을 받지 않는다.
yield break // 반복하지 않고 코루틴을 바로 빠져 나간다.
StartCoroutine() 매서로 코루틴을 실행시킨다. 괄호안에 실행할 코루틴의 이름을 넣어
실행시킨다.
그리고 코루틴을 종료시킬 때는 StopCoroutine()을 동일한 방식으로 쓰거나 StopAllCoroutines() 를 사용하여
중지시킨다. 둘의 차이점은 All은 코루틴들을 전부 중지시킨다는 것이다.
public bool isDelay;
public float DelayTime = 3.0f
void Update()
{
if(Input.GetKeyDown(KeyCode.Space)) //키보드의 스페이스바가 눌렸을 때의 조건문
{
if (isDelay ==false) //isDelay 의 불값이 false일때를 조건
{
isDelay =true; // isDelay를 true로 만들고
StartCoroutine(IDK) //IDK 코루틴을 실행
}
else //조건에 충족하지 않을 때의 조건
{
}
}
IEnumerator IDK() //코루틴 함수
{
yield return new WaitForSeconds(DelayTime) //DelayTime의 값만큼 기다림
isDelay = false; //isDelay 값은 false로 만들어 스페이스바를 눌렀을 때 다시 실행되게 함
}
처럼 코루틴을 사용하여 Update 안에 사용되어 프레임 단위로 실행되는 것을 지연시키는 역할이 가능하다.
'TIL' 카테고리의 다른 글
2024 09 19 TIL (C# 기초) (0) | 2024.09.20 |
---|---|
2024 09 13 TIL (PlayerPrefs) (0) | 2024.09.13 |
2024 09 11 TIL (1) | 2024.09.11 |
2024 09 10 TIL (1) | 2024.09.10 |
2024 09 09 TIL (0) | 2024.09.09 |