Share via


대화 상자 API - MRTK3

대화 상자

대화 상자는 상황에 맞는 앱 정보를 제공하는 단기 UI 보기입니다. 사용자에게 작업을 요청한 다음, 비동기 태스크 또는 결과에서 결과를 앱의 비즈니스 논리로 다시 반환하는 경우가 많습니다. 대화 상자를 사용하여 사용자에게 중요한 정보를 알리거나 확인을 요청한 후에 작업을 완료할 수 있습니다.

MRTK3 UXCore는 인스턴스를 생성하고 관리하기 위한 기본 Dialog 구현 및 와 DialogPool 함께 API를 제공합니다IDialog. 이 설명서에서는 비즈니스 논리의 대화 상자를 표시하기 위한 코드 기반 흐름 API에 대해 설명합니다. UX 구성 요소 패키지에 포함된 프리팹에 대한 설명 서는 여기에서 대화 상자 프리팹 설명서를 참조하세요.

사용량

DialogPool 장면 또는 UI 계층 구조의 어딘가에 배치합니다. 원하는 경우 싱글톤, 관리자 또는 기타 패턴으로 고유한 전역 DialogPool 참조를 관리할 수 있습니다. MRTK 자체는 전역 DialogPool 참조를 유지하는 방법에 대한 의견을 제시하지 않지만 참조된 대화 보기 프리팹이 빌드에 포함되도록 구성 요소가 장면 어딘가에 있어야 합니다.

DialogPool 는 패키지가 설치된 경우 표준 UX 구성 요소 CanvasDialog.prefab 에 대한 프리팹 참조를 자동으로 설정합니다. UX 구성 요소 표준 CanvasDialog.prefab에 대한 자세한 내용은 여기 설명서를 참조하세요.

참조를 DialogPool 얻은 후에는 흐름 스타일 작성기 API를 사용하여 대화 상자를 구성하고 표시할 수 있습니다.

dialogPool.Get()
    .SetHeader("This is the Dialog's header.")
    .SetBody("You can specify the dialog's body text here.")
    .SetPositive("The positive button's label.", (args) => { /* Do thing! */ })
    .Show()

작성기 API 호출에 지정된 하위 컨트롤만 다시 사용 대화 상자에 표시됩니다. 예를 들어 위의 코드 샘플에서는 헤더 텍스트와 본문 텍스트가 모두 있는 대화 상자가 생성되지만 하나의 양수 선택 단추만 생성됩니다. 추가 메서드 호출을 연결하여 추가 단추를 지정할 수 있습니다.

// This dialog will show all three buttons.
dialogPool.Get()
    .SetHeader("A header.")
    .SetBody("Foobarbaz!")
    .SetPositive("The positive button's label.", (args) => { /* Do thing! */ })
    .SetNegative("The negative button's label.", (args) => { /* Do another thing! */ })
    .SetNeutral("A neutral option, too!", (args) => { /* Do some neutral thing. */ })
    .Show()

단추 콜백을 통해 전달되는 은 args 입니다 DialogButtonEventArgs. 여기에는 이벤트를 생성한 에 대한 참조 IDialogDialogButtonType 사용자가 선택한 단추의 가 모두 포함됩니다.

사용자가 결정을 내리기 전에 대화 상자가 외부에서 해제될 수 있습니다. 다른 대화 상자가 열리거나 코드에서 대화 상자가 수동으로 해제되어 발생할 수 있습니다. 이 경우 에 제공된 콜백은 SetPositive() 호출되지 않습니다. 외부 해제를 포함하여 대화 상자의 모든 이벤트를 수신 대기하려는 경우 콜백을 OnDismissed 수신 대기할 수 있습니다.

var dialog = dialogPool.Get()?SetBody("Foobar!");
dialog.OnDismissed += (args) => { /* do things! */ };
dialog.Show();

OnDismissed는 사용자가 선택한 경우 또는 null 다른 이유로 대화가 해제된 경우 를 포함하는 DialogButtonEventArgs 를 전달DialogDismissedEventArgs합니다.

표준 IDialog.Show() 메서드는 비async 메서드에서 일반적인 Unity idiomatic 사용에 적합합니다. 컨텍스트에서 비즈니스 논리를 async 작성하는 경우 보다 표현적인 구문을 사용하여 대화 상자의 결과에서 에 메서드 await 를 사용할 IDialog.ShowAsync() 수 있습니다.

async void SomeAsyncBusinessLogic()
{
    var result = await dialogPool.Get()
                    .SetBody("The await will resolve when the user selects the option.")
                    .SetNeutral("A button!")
                    .ShowAsync();

    Debug.Log("Async dialog says: " + result.Choice?.ButtonText);
}

ShowAsync 는 와 동일한 arg 형식 OnDismissed을 반환합니다 DialogDismissedEventArgs.

장면 및 프리팹 예제

포함된 프리팹 및 샘플 장면에 대한 자세한 내용은 여기에서 UX 구성 요소 설명서를 참조하세요.