Jak stworzyć grę na smartfony z Unity i Flutterem? Poznaj nowe możliwości
Twoja aplikacja zawsze musi się wyróżniać na tle konkurencji. Tylko jak przyciągnąć uwagę użytkowników? Zamieszczanie zaawansowanych animacji to jeden ze sposobów na osiągnięcie tego celu, ale możesz pójść o krok dalej.
Wykorzystaj możliwości grywalizacji. Warto nagradzać lojalnych użytkowników. W przypadku aplikacji mobilnych możesz zapewnić im rozrywkę, implementując niewielką grę albo tworząc interaktywne i atrakcyjne wizualnie komponenty.
Zobacz, jak połączyć Fluttera z Unity i sprawdź, co możesz zamieszczać w grach na obie platformy mobilne dzięki Flutterowi.
Pomysły na wykorzystanie Unity i Fluttera w projektach
Jeśli kiedykolwiek miałeś lub miałaś do czynienia z Unity, najprawdopodobniej było to związane z tworzeniem gier. Tymczasem ta technologia oferuje o wiele więcej.
Unity w projektach VR/AR
Przykładowo jeśli masz aplikację eCommerce, możesz wykorzystać Unity do stworzenia scenografii imitującej realny świat. Pozwala na to też technologia AR, czyli rozszerzona rzeczywistość, ale zwykle oznacza to wyższe koszty, ponieważ zespół musi równocześnie przetwarzać Unity i Fluttera.
Obsługa modeli 3D
Możesz zwiększyć możliwości Fluttera wprowadzając wyłącznie obsługę modeli 3D. Dzięki takim pakietom jak model_viewer_plus deweloperzy mogą bez przeszkód zamieszczać modele 3D i wchodzić z nimi w interakcje (do pewnego stopnia) w aplikacji Flutterowej. Wtedy nie trzeba nawet korzystać z Unity.
Czat i forum
A może wolisz zwiększyć częstotliwość interakcji między użytkownikami z pomocą czatu albo forum? Zainspiruj się rozwiązaniami takich firm jak Tencent, która w PUBG Mobile pomysłowo wykorzystała możliwości tej integracji. Jej zespół zaimplementował opcję udostępniania klipów z rozgrywek poprzez forum stworzone we Flutterze i zintegrowane w środowisku gamingowym Unity.
Animacje
Połączenie Unity z Flutterem świetnie sprawdza się też w animacjach. Może Twoja firma ma maskotkę, jak Duo w Duolingo lub Myszka Mickey dla Disneya? Wykorzystaj ją w grze. Może się to przydać zwłaszcza, kiedy Twoim celem jest młodsza grupa docelowa.
Kluczem jest odpowiednia alokacja zasobów. Zespół Unity powinien się skupić na grze mobilnej, włączając w to modelowanie i dopracowywanie szczegółów. W międzyczasie zespół Fluttera powinien się koncentrować na kwestiach związanych z UI, dostosowując elementy interfejsu do docelowych platform. W ten sposób zmniejszasz czas potrzebny do implementacji osobnych funkcji.
Jak Unity działa z Flutterem?
Aby bez przeszkód zintegrować Unity z Flutterem, deweloperzy mogą wykorzystać pakiet flutter_unity_widget autorstwa juicycleff. Ten pakiet ułatwia zamieszczanie Unity we Flutterowych aplikacjach.
Nawiązuje on komunikację pomiędzy aplikacją stworzoną we Flutterze a projektem Unity poprzez efektywne wykorzystanie mechanizmu platform channel. Analogicznie deweloperzy mogą bezpośrednio wchodzić w interakcje z Unity poprzez widżety Fluttera, zapewniając spójny UX na obu platformach.
Steruj sposobem zachowania flutterowych elementów dzięki Unity Scene. Możesz na przykład tak ustawić komunikację, żeby obsługiwała zdobywanie nowych osiągnięć w grach przez logikę Fluttera. Wystarczy, że wykorzystasz określone triggery, które wysyłają dane do strony Fluttera, a jednocześnie utrzymują pętlę gry i usuwają nadmiarową logikę.
W tym celu sięgnij po paczkę napisaną przez juicycleff o nazwie flutter_unity_widget. Pozwala na osadzanie Unity w aplikacjach flutterowych. Bazuje na mechanizmie platform channel, żeby komunikować się z projektem w Unity. W ten sposób umożliwia bezpośrednią komunikację z natywnym kodem na Androida lub iOS i renderuje go w widokach dostosowanych do platformy. W efekcie możesz wchodzić z Unity w interakcje, korzystając z widżetów Fluttera.
Prezentacja komunikacji pomiędzy Flutterem a Unity na przykładzie przedstawionym w pakiecie widżetu Flutter Unity.
Implementacja gier z Flutterem i Unity
Większość osób z doświadczeniem w programowaniu gier mobilnych rozważa wykorzystanie silnika Unity. To oczywiście dobry pomysł, zwłaszcza jeśli zależy Ci na zapewnianiu rozwiązań w 3D. Ale jeśli liczba ekranów, które działają w 3D jest niewielka, zastanów się nad oddzieleniem zadań wykonywanych we Flutterze i w Unity.
Jak miałoby to wyglądać? Czy Flutter umożliwia dwustronną komunikację?
Najpierw musisz ustawić edytor Unity dla wersji wspieranej przez Flutter_unity_widget. Możesz go pobrać na stronie Unity Hub. Następnie wykorzystaj zaawansowane instrukcje ustawień dla Fluttera i Unity, które znajdują się w opisie pakietu.
Kiedy skończysz, zsynchronizuj elementy 3D z dynamicznymi aktualizacjami pochodzącymi z flutterowego środowiska. Dobrym przykładem takiej synergii jest interakcja pomiędzy komponentem suwaka we Flutterze a jego wpływem na prędkość rotacji sześcianu renderowanego w Unity.
Implementacja umożliwia dwustronną komunikację. Można tak zaimplementować funkcjonalności po stronie Fluttera, żeby móc odpowiadać na interakcje użytkowników w ramach renderowanego przez Unity otoczenia.
Na przykład tapnięcie sześcianu może wywołać wyświetlenie okna dialogowego we flutterowym interfejsie, tym samym ulepszając doświadczenia użytkownika.
To wszystko jest możliwe dzięki mechanizmowi platform channel. Łączy się on z Unity, który działa na platformie natywnej, co zwiększa jego efektywność.
Na co trzeba uważać?
Wprowadzanie zmian w Unity w grze na smartfony może być kosztowne jeśli projekt był rozwijany przez dłuższy czas.
Do tego trzeba napisać komunikację pomiędzy Flutterem a Unity, co też zajmuje trochę czasu.
O czym jeszcze trzeba pamiętać? Sprawdź, czy wszystkie wtyczki wykorzystane w grze działają poprawnie. Np. Unity ads (reklamy) albo Unity in-app purchases (zakupy w aplikacji). Być może trzeba będzie przenieść je do Fluttera.
Najlepiej z wyprzedzeniem ustalić, jakie funkcje można stworzyć w konkretnych technologiach, żeby móc przewidzieć, czy będzie to korzystne dla projektu.
Implementacja gier we Flutterze bez Unity
Mam niespodziankę dla wszystkich programistów specjalizujących się w tworzeniu gier na smartfony. Rozwijanie ich całkowicie we Flutterze jest możliwe!
Społeczność Google’a i Fluttera jest czynnie zaangażowana w dostarczanie narzędzi, które można wykorzystać do rozwoju gier. Istnieje nawet podstrona poświęcona grom pisanym we Flutterze. Znajdziesz tam wiele przykładów, tutoriali i case studies. Programiści mogą teraz korzystać z wielu pomocnych narzędzi, takich jak Google Mobile Ads.
Ale to nie koniec. Zespół Fluttera organizuje zawody pod nazwą the Global Gamers Challenge. To pokazuje, jak bardzo zależy im na tym, żeby Dart i Flutter były coraz bardziej rozpoznawalne pośród programistów.
Co trzeba wiedzieć, żeby używać Fluttera do tworzenia gier?
Flutter nie sprawdzi się jako platforma, na której można polegać przy tworzeniu rozwiązań całkowicie opartych na technologii 3D.
Niemniej możesz z łatwością używać Fluttera do pisania gier w 2D z izometryczną orientacją w stylu pixel art. Oczywiście to tylko przykład. To od Ciebie zależy, jaki styl wybierzesz.
Aby Ci w tym pomóc, społeczność opracowała flame_engine. To modularny silnik do gier, który dostarcza nietypowe rozwiązania służące do rozwijania gier we Flutterze (np. sprite handling, animacje i wykrywacz zderzeń).
Flame pozwala wykorzystać pętlę gier z wieloma integracjami do różnych funkcji, których możesz potrzebować. Takich jak flame_audio do odtwarzania dźwięku lub flame_rive do interaktywnych animacji stworzonych przy użyciu oprogramowania Rive.
Wkrótce będzie więcej narzędzi
Rive to szczególnie interesujące rozwiązanie jeśli chodzi o rozwijanie gier we Flutterze. Zespół Rive pracuje obecnie nad Flutter GameKit. To dodatkowy silnik oparty na Rive Renderze. Chociaż to narzędzie jest jeszcze w fazie prac, już teraz zadziwia mnie, jak wiele nowych możliwości się pojawia. Jeśli chcesz wiedzieć więcej o Flutter GameKit, odwiedź oficjalną stronę Rive’a.
Wszystkie te nowe rozwiązania jeszcze bardziej ułatwią proces tworzenia aplikacji. Możesz jednak napisać grę nawet bez tych dodatkowych narzędzi, czego dowodzi przykład Lost Vault, gry opublikowanej pod koniec 2021 roku. Choć minęło już kilka lat, gra nadal działa i cieszy się popularnością!
Kwestia wydajności
Jeśli zastanawiasz się, jak dobrze Unity sprawdza się w aplikacji napisanej we Flutterze, przygotuj się na płynne działanie. Jak to możliwe? Dostępnych jest wiele opcji optymalizacji. Unity można załadować podczas uruchamiania aplikacji i przechowywać w pamięci. Potem zmienia się otoczenie, które ma być załadowane, a niektóre zasoby są uwalniane, kiedy użytkownik zamyka widok z grą.
Wykorzystanie flame_engine znacząco poprawi wydajność, ale jedynie w przypadku gier i animacji w 2D.
Powyżej wytłumaczyłem, jak programiści specjalizujący się w grach mogą wykorzystywać Fluttera do eksperymentowania w obecnych lub przyszłych projektach. Chciałem też rzucić trochę światła na możliwości wbudowane w silnik Flame i zwrócić uwagę na nadchodzące zmiany związane z Rive’em. Jeśli masz jakieś pytania związane z tym tematem, napisz do nas.