일반 함수를 실행하면, 값을 반환하기 전에 실행이 완료된다.
그래서 (일정)시간이 지난 후에 실행되어야 하는 이벤트 호출에 사용할 수 없다.
ex. 페이드와 같은 애니메이션 처리를 일반 함수에 처리할 수 없다.
그래서 코루틴 함수를 사용하여 중간에 시간(프레임)정지 처리도 할 수 있는 방법이 있다.
근데, 해당 이벤트 처리 후에 값을 받아오고 싶어졌다.
return bool 을 원해서 찾아본 결과
1. 코루틴이 끝나면 함수가 실행되도록
public void callbackTest(){
//for Lambda
StartCoroutine(callbackTestCor((x) =>
{
Debug.Log("ServerCallBackTest: " + x);
}
));
}
IEnumerator callbackTestCor(System.Action<int> callback){
yield return new WaitForSeconds(5f);
callback(-1);
}
5 초후에 로그가 찍히는 것을 확인할 수 있다.
ServerCallBackTest: -1
2. 다른 스크립트의 코루틴을 실행하기
서버 컨트롤러 스크립트 ServerController가 있다고 할 때,
다른 스크립트에서 서버쪽 코루틴 메소드를 실행하고 싶을때
ServerController ServerC; // 코루틴을 가지고 있는 클래스 인스턴스
ServerC.StartCorutine(method()); 는 실행되지 않는다.
ServerC.StartCorutine(ServerC.method()); 는 실행된다.
3. 서버 응답에 따른 Client 분기 처리
========== Client
public void rewardGift(int seq) {
//1. 서버에 선물 사용 처리 요청
ServerC.StartCoroutine(ServerC.UseGift(seq, (callback) => {
if(callback ==1){
UseLocalGift();
}else{
Debug.Log("서버 접속 실패");
}
}
));
}
========== SERVER
public IEnumerator UseGift(int seq, System.Action<int> callback) {
...
if (request.result != UnityWebRequest.Result.Success){
callback(-1);
} else {
callback(1);
}
}
Ref
'DEV > Unity' 카테고리의 다른 글
[solved]is missing the class attribute 'ExtensionOfNativeClass' (0) | 2022.11.30 |
---|---|
[Unity] IAP 에러 / 예시 따라하기 (0) | 2022.03.20 |
vscode 단축키 /// summary shortcut!! (0) | 2022.03.19 |
[Unity] 클릭이 필요없는 Canvas 처리 - Canvas Group (canvas uninteractable/interactable false) (0) | 2022.03.19 |
[solved] Unity Build Error : Access to the path "Library/BuildPlayerData\Editor" is denied. (0) | 2022.03.06 |