inflearn logo
강의

講義

知識共有

絶対講座!Unity6 - UGSを活用したバックエンドシステム構築

Anonymous 認証 - プレイヤーニックネーム設定 および アカウント削除

AddListener와 async 사용

解決済みの質問

140

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

indiegamemaker

안녕하세요.

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

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

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

 

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

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

혼란을 드려 송구합니다.

 

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

의견주셔서 감사합니다.

0

communityai8509

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

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

비동기 콜백과 AddListener

비동기 메서드를 asyncawait 키워드를 사용하여 호출하면, 코드의 실행 흐름이 자연스럽게 중단되지 않고 대기할 수 있습니다. 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);
}
}
“`
이 방법은 좀 더 깔끔해 보일 수도 있고, 함수 내에서 예외 처리를 직접 핸들링할 수 있는 점에서 장점이 있습니다.

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

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

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

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

싱글턴패턴

0

2

1

3강 질문

0

15

1

코드 관련 질문

0

21

2

섹션7 수업자료 업로드 부탁드립니다.

0

22

2

강의 듣는 중인데,

0

23

1

36강 오탈자가 있는 거 같습니다.

0

20

2

Service Create/Update Record 운용과 Delete Record 미운용의 차이 질문

0

18

1

2강 nodejs 3단계 설명 질문

0

33

1

Dictionary Key를 int에서 string으로 변경한 이유에 대한 문의

0

19

1

Sequence 관련 질문

1

32

2

Image Only Query

1

29

2

라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항

0

36

2

UI 기능 관련 질문이 있습니다!

0

37

2

DDD 는 마이바티스와 잘 맞지 않는건가요?

0

46

1

스프링부트 버전 문의드립니다.

0

38

1

03-01 (16. CharacterController)

0

31

2

Json 요청 처리

1

33

2

TLS 질문드립니다.

0

43

2

Task 구현 28:36 Equals 에서 잘 모르는 부분이 있습니다.

0

27

2

UGS 라이센스 및 요금제 관련

0

57

1

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

0

175

2

구글 연동

0

126

2

Run시 에러가 발생합니다.

0

160

3

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

0

157

2