Udostępnij za pośrednictwem


Interfejs API okna dialogowego — MRTK3

Okno dialogowe

Okna dialogowe to krótkotrwałe widoki interfejsu użytkownika, które zapewniają kontekstowe informacje o aplikacji. Często żądają pewnej akcji od użytkownika, a następnie zwracają wynik z powrotem do logiki biznesowej aplikacji w asynchronicznym zadaniu lub wyniku. Użyj okien dialogowych, aby powiadomić użytkowników o ważnych informacjach lub potwierdzeniu żądania przed ukończeniem akcji.

Zestaw narzędzi MRTK3 UXCore udostępnia IDialog interfejs API wraz z podstawową Dialog implementacją oraz elementem DialogPool do duplikowania wystąpień i zarządzania nimi. W tej dokumentacji opisano oparty na kodzie płynny interfejs API do wyświetlania okien dialogowych z logiki biznesowej. Aby uzyskać dokumentację dotyczącą prefabów zawartych w pakiecie składników środowiska użytkownika, zobacz dokumentację prefab okna dialogowego tutaj.

Użycie

DialogPool Umieść gdzieś w hierarchii sceny lub interfejsu użytkownika. W razie potrzeby możesz zarządzać własnym DialogPool globalnym odwołaniem za pomocą pojedynczego wzorca, menedżera lub innego wzorca. Sam zestaw narzędzi MRTK nie wywiera opinii na temat sposobu utrzymania globalnego DialogPool odniesienia, ale składnik musi znajdować się w scenie gdzieś, aby prefab widoku okna dialogowego, do którego odwołujesz się, został uwzględniony w kompilacji.

DialogPool Program automatycznie ustawi odwołanie prefab do standardowych składników CanvasDialog.prefab środowiska użytkownika, jeśli pakiet jest zainstalowany. Aby uzyskać więcej informacji na temat standardowych CanvasDialog.prefabskładników środowiska użytkownika, zobacz dokumentację tutaj.

Po uzyskaniu DialogPool odwołania możesz użyć interfejsu API konstruktora w stylu płynnym, aby skonfigurować i wyświetlić okno dialogowe.

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()

Tylko kontrolki podrzędne określone w wywołaniach interfejsu API konstruktora będą widoczne w oknie dialogowym ponownego obsługi. Na przykład powyższy przykład kodu spowoduje wyświetlenie okna dialogowego z tekstem nagłówka i tekstem treści, ale tylko jednym przyciskiem wyboru pozytywnego. Dodatkowe przyciski można określić, łącząc kolejne wywołania metod.

// 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()

Przekazywane args przez wywołania zwrotne przycisku będą DialogButtonEventArgszawierać zarówno odwołanie do IDialog zdarzenia wygenerowanego przez użytkownika, jak i DialogButtonType przycisk wybrany przez użytkownika.

Istnieje możliwość, że okno dialogowe może zostać odrzucone zewnętrznie, zanim użytkownik będzie mógł podjąć decyzję. Może to być spowodowane przez otwarcie innego okna dialogowego lub ręczne odrzucenie okna dialogowego w kodzie. W takim przypadku wywołanie zwrotne podane do SetPositive() elementu nigdy nie zostanie wywołane. Jeśli chcesz nasłuchiwać dowolnego zdarzenia w oknie dialogowym, w tym zewnętrznego zwolnienia, możesz nasłuchiwać wywołania zwrotnego OnDismissed .

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

OnDismissed program przekaże element DialogDismissedEventArgs, który będzie zawierać DialogButtonEventArgs element , jeśli użytkownik dokonał wyboru, lub null jeśli okno dialogowe zostało odrzucone z jakiegoś innego powodu.

Metoda standardowa IDialog.Show() jest odpowiednia do typowego użycia aparatu Unity idiomatycznego w metodach innych niżasync . Jeśli piszesz logikę biznesową async w kontekście, możesz użyć IDialog.ShowAsync() metody w celu await uzyskania wyniku okna dialogowego z bardziej wyrazistą składnią.

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 Funkcja zwróci ten sam typ arg co OnDismissed, a DialogDismissedEventArgs.

Przykładowa scena i prefabryki

Aby uzyskać informacje na temat dołączonych prefabów i przykładowych scen, zobacz dokumentację składników środowiska użytkownika tutaj.