inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

절대강좌! 유니티6 - UGS를 활용한 백엔드 시스템 구축

Anonymous 인증 - 플레이어 닉네임 설정 및 계정 삭제

AddListener와 async 사용

해결된 질문

189

ac3c2fe4

작성한 질문수 8

0

안녕하세요.

버튼 AddListener 사용할 때 질문이 있습니다.

 

loginButton.onClick.AddListener(async () => await Login());

이렇게 사용하셨는데요.

 

AddListener 함수가 콜백을 await 해주지 않기때문에, 이렇게 사용하는게 낫지 않나요?

loginButton.onClick.AddListener(Login);

private async void Login()
{
    try
    {
        await AuthenticationService.Instance.SignInAnonymouslyAsync();
        string playerName = await AuthenticationService.Instance.GetPlayerNameAsync();
        playerNameIF.text = playerName.Split('#')[0];
    }
    catch (Exception e)
    {
        print(e.Message);
    }
}

unity database authentication backend leaderboard 유니티6 ugs

답변 2

1

이재현

안녕하세요.

Login 메소드는 async void이기에 AddListener에서 기본적으로 반환값(Task)를 처리하지

않기 때문에 바로 Login 메소드를 전달하는 방식이 간결한 표현 방식이 맞습니다.

불필요한 래핑을 사용했네요. ㅠㅠ

 

간단한 로직은 별도의 async 메소드를 만들지 않고 바로 처리하는 로직과

병행해서 설명하다 보니 습관적으로 사용했던것 같습니다.

혼란을 드려 송구합니다.

 

앞으로 강의에서 제시해드리는 코드에 대한 세밀히 검토하도록 하겠습니다.

의견주셔서 감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. ac3c2fe4님.

버튼의 이벤트 리스너에 비동기 메서드를 연결할 때의 문제에 대한 좋은 질문을 주셨습니다. Unity의 Button.onClick.AddListener는 기본적으로 콜백의 비동기 동작을 await하지 않고, 동기적으로 호출하기 때문에 특정한 흐름 제어가 필요할 수 있습니다.

비동기 콜백과 AddListener

비동기 메서드를 async 및 await 키워드를 사용하여 호출하면, 코드의 실행 흐름이 자연스럽게 중단되지 않고 대기할 수 있습니다. async void 메서드는 예외를 처리하고 로그를 기록하는 데 유용하여, 이러한 방식을 자주 사용합니다.

  1. async 키워드를 포함한 람다 표현식을 사용하는 경우:

    loginButton.onClick.AddListener(async () => await Login());
    

    이 방법은 바로 비동기 함수 내에서 결과를 기다리는 방식으로, 사용 용이성에 중점을 둡니다.

  2. 비동기 메서드를 직접 연결하는 방법:
    ”`csharp
    loginButton.onClick.AddListener(Login);

private async void Login()
{
try
{
await AuthenticationService.Instance.SignInAnonymouslyAsync();
string playerName = await AuthenticationService.Instance.GetPlayerNameAsync();
playerNameIF.text = playerName.Split(‘#’)[0];
}
catch (Exception e)
{
print(e.Message);
}
}
“`
이 방법은 좀 더 깔끔해 보일 수도 있고, 함수 내에서 예외 처리를 직접 핸들링할 수 있는 점에서 장점이 있습니다.

각 방식은 장단점이 있으며, 주어진 코드나 시나리오에 따라 적절하게 선택하면 됩니다.

관련 유사한 질문 및 참고 링크

이 주제에 관련된 내용을 더 깊이 이해하고 싶으시다면 다음 링크를 참고하시면 도움이 될 수 있습니다:
- 유니티에서의 비동기 프로그래밍

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

해당 결제 부분을 포폴에서 테스트 api를 적용에 대한 궁금증

0

16

0

스크립트의 참조 설정

0

22

2

verify.sh 4단계 실패 — Jenkins 컨테이너에서 127.0.0.1:6443 connection refused

0

41

2

안녕하세요.

0

47

1

isInterrupted 질문 있다.

0

32

1

선생님 샤딩에 대한 강의도 좀 해주세요

0

46

1

몽고DB CAP 이론 관련

0

54

2

RunIdIncrementer batch 5랑 6랑

1

58

2

강의 자료를 받아볼 순 없겠나

1

71

2

강의 기다리고 있습니다!

0

50

0

코드 스크립트 완성본 못 받나요 ?

0

68

2

9월 8일 세션 진행한 거는 없었을까요

0

71

1

'Canvas 설정과 배경 설정’ 부분에 대해 질문드립니다.

1

60

1

미션1 진행방법 관련

1

75

1

디비를 조작하는데 사용하는 명령어가 ORM인가요?

0

55

2

Spock given and가 검증을 하는지

0

53

1

02-03 벽 마찰력 설정 material 적용 부분

0

53

1

ProductController 에서 타협하지 않는다면 어떤 형태가 되나요?

1

68

2

오픈톡 인원이 다 차서 들어가지를 못 하네요...

0

58

1

UGS 라이센스 및 요금제 관련

0

103

1

[강의 요청] 간단한 2D RPG + UGS 활용 강의를 요청드려도 괜찮을까요?

0

230

2

구글 연동

0

173

2

Run시 에러가 발생합니다.

0

223

3

[질문] ID 와 Password 방식으로 가입하는 방식 관련 질문이 있습니다.

0

202

2