로딩씬 전환 코르틴 질문
강의를 이해한대로 밑에 나오는 코드에 접목시켰는데..
이해가 안되서 질문합니다.ㅠㅠ
public void LoadLevel(int sceneIndex)
{
StartCoroutine(LoadAsynScene(sceneIndex));
}
IEnumerator LoadAsynScene(int sceneIndex)
{
AsyncOperation op = SceneManager.LoadSceneAsync(sceneIndex);
while (!op.isDone)
{
slider.value = op.progress;
yield return null;
}
}
제가 이해한 바로는 yield return null를 만나면서 해당 함수 가 실행된 부분까지의 대한 정보를 저장한 후에 호출해준 곳으로 다시 돌아가게 되어 소유권이 넘어갑니다.
그리고 LoadAsynScene함수를 한번 실행 되어 이후에는 실행 되지 않아야 되는걸로 아는데 보니깐 함수를 yield return null; 에서부터 다시 실행이 되는것 같습니다....
혹시 저 위에코드는 동작방식이 어떻게 되는건가요??
답변 4
1
답변 감사합니다!!
강사님이 짜신 코드가 아니기에 황당한 질문이겠지만..(유튜브 Brackeys 자료 코드입니다.)
1. 혹시 저기서 yield return null를 해서 한 tick 늦춰서 실행 해주는 이유가 따로 있을까요??
2. 만약 강의에서 알려주신 yield return new WaitForSecend(4.0f); 과 같은 상황에서는 정보를 저장하고 호출한 곳으로 소유권이 돌아가 돌아간 부분의 코드를 정상적으로 실행하다가 4초 yield가 호출된 시점의 코르틴 함수로 가서 실행이 되는 건가요??
0
매우 중요한 부분인데요.
1.
while (!op.IsDone)을 한 번 체크하고
아직 완료되지 않았다 싶으면 yield return으로 빠져나가서
다음 프레임에 이어서 체크를 하게 됩니다.
반면 yield return을 하지 않거나, Coroutine 방식이 아니라면
while (!op.IsDone)과 끝장승부가 나기 전까지는 절대 빠져나가지 않으니
다른 애들은 실행조차 할 수 없게 됩니다.
어떤 과제를 매일마다 10분씩 나눠서 하느냐,
아니면 밤을 새면서라도 무조건 한 번에 끝장을 보느냐의 차이라고 생각하시면 됩니다.
2.
맞습니다.
Coroutine 관리 시스템이 주기적으로 체크를 하면서
4초가 지났으면 호출하는 형태로 구현이 되어 있겠죠.
0
제가 이해한 바로는 yield return null를 만나면서 해당 함수 가 실행된 부분까지의 대한 정보를 저장한 후에 호출해준 곳으로 다시 돌아가게 되어 소유권이 넘어갑니다.
-> 이건 맞습니다.
그리고 LoadAsynScene함수를 한번 실행 되어 이후에는 실행 되지 않아야 되는걸로 아는데 보니깐 함수를 yield return null; 에서부터 다시 실행이 되는것 같습니다....
-> 이건 아닙니다. 게임으로 치면 마지막 실행 상태를 저장하고 거기서부터 이어서 실행하는겁니다.
[이후에 LoadAsynScene이 실행되지 않는 것]은 yield break을 할 때의 애기고,
지금처럼 yield return 계열로 반환하면 다음 Tick에 이어서 다음 부분이 실행됩니다.
현재 yield return null 다음에는 while (!op.isDone)이 호출되어야 하니 그 부분이 호출되겠네요.
UI 기능 관련 질문이 있습니다!
0
32
2
픽셀 좌표 스크린 좌표
0
32
0
전체적으로 코드 읽는게 굉장히 오래 걸리네요...
0
72
2
카메라 #2 수업 캐릭터 쓰러짐 해결
0
83
1
플레이어 움직임이 끝날때, 기울어짐 현상
0
82
1
Input 적용과 관련하여 질문 있습니다.
0
74
1
디버그 불가.. Unity에 연결 불가
0
81
1
달리기 애니메이션 에러
0
87
2
오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다
0
65
1
GetKey 오류
0
109
2
에셋을 어디에 올려두신지 알 수 있나요?
0
106
1
재귀호출? 오류나는데 왜 이래요 ?
0
169
6
Animation blending 파라미터 계산
0
67
1
newPos와 to지점이 겹쳐져야 하는거 아닌가요?
0
96
3
오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다
0
87
2
질문있습니다
0
143
2
아 이거 소스코드 같은거 없나요?
0
141
3
질문 드립니다. string.IsNullOrEmpty(name)
0
86
2
@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?
0
135
2
유니티6 NavMesh 안되는분들
1
174
1
Unity6 Unity-Chan Material 마젠타 문제 해결법
7
525
1
GetComponent<Poolable> 질문드립니다.
0
101
2
UI 불러오지 못함
0
117
2
UI 자동화 #1 - Util.cs의 FindChild함수에서 component.name에 컴포넌트 이름이 뜹니다.
0
155
2





