inflearn logo
강의

Course

Instructor

Absolute Course! Unity 6 - Building Backend Systems with UGS

Anonymous Authentication - Player Nickname Setting and Account Deletion

AddListener와 async 사용

Resolved

148

ac3c2fe4

8 asked

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

Answer 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);
}
}
“`
이 방법은 좀 더 깔끔해 보일 수도 있고, 함수 내에서 예외 처리를 직접 핸들링할 수 있는 점에서 장점이 있습니다.

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

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

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

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

Spider와 Monster 구현 방식을 구분한 이유

1

13

1

Sprute Sheet에 대해서.

0

12

1

ResourceManager 클래스 관련 질문

1

33

2

FBX chan 모델

0

25

1

데이터베이스 13번 문제

0

43

2

첨부된 수업자료와 강의 내용이 다릅니다.

0

51

2

call stack 표현이 잘못표현된것이 아닌가요?

0

66

2

추천해주신 책에 대해 문의드립니다.

0

28

2

몬스터 HP 게이지바 이동

0

23

1

TextMeshPro용 커스텀 한글 2350자.txt 파일은 어디에 있나요?

0

27

1

전자책으로 구매인증 가능할까요?

0

72

1

정보처리기사 실기 zip

0

44

2

데이터베이스 노션

0

38

2

형 책 어떻게 받아?

1

59

1

PPT 자료 공유 받을 수 있을까요?

0

32

1

수업노선자료파일 다운

0

34

2

6번 질문

0

52

2

02-02 NavMesh 응용 캐릭터 멈춤 문제

0

34

1

02-02 NavMesh 응용 캐릭터 멈춤 문제

0

43

2

UGS 라이센스 및 요금제 관련

0

64

1

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

0

188

2

구글 연동

0

133

2

Run시 에러가 발생합니다.

0

175

3

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

0

163

2