Rezygnuje z tworzenia gier

Po obejrzeniu webinaru organizowanym przez Coders Lab z udziałem Macieja Aniserowicza na temat pracy programisty backendowego podjąłem decyzję, że rezygnuję z tworzenia gier komputerowych.

Rezygnuje z game dev’u, ponieważ:

  • Jest tam mnóstwo pracy związanej z grafiką, dźwiękiem oraz projektowaniem mechaniki (jeżeli pracujemy sami tak jak ja).
  • Więcej czasu zajmuje robienie map (lokacji) niż rzeczywista praca w kodzie.
  • Przy pracy na poziomie bibliotek graficznych (DirectX, OpenGL) wymaga dobrej znajomości matematyki, za którą za bardzo nie przepadam.
  • Po prostu jest to dla mnie nudne.

Zamierzam wrócić tylko tym razem w .NET Core do backend’u. Swoją decyzję argumentuje tym:

  • Wcześniej pisałem strony w PHP i pomijając język, bardzo mi się to podobało.
  • Można bardzo znacznej części odciąć się od pracy, przy której wymagane są umiejętności artystyczne (np. poprzez tworzenie API).
  • Patrząc w przyszłość – na rynku jest więcej pracy w programowaniu webowym niż przy robieniu gier komputerowych.

W związku z tym porzucam projekt gry Moon Problem, którą robiłem podczas Daj Się Poznać 2017. Po prostu z niektórych projektów trzeba zrezygnować. Ja powinienem zrobić to już dawno.

Mam już pomysł co chciałbym zrobić w .NET Core, ale na to poświęcę osobny wpis. Mam nadzieję, że dzięki temu, że będę robił coś nowego, będę miał więcej zapału zarówno do kodowania, jak i blogowania. Do zobaczenia w następnym wpisie, który mam nadzieję, będzie już niedługo.

 

Reklamy

Jak przenosić obiekty między scenami w Unity?

Czasem zdarza się, że potrzebujemy przenieść między scenami różnego rodzaju informacje np. doświadczenie, ilość pozostały żyć itp. do innej sceny. Jest na to kilka sposobów. Ja zaprezentuje rozwiązanie, które według mnie jest najlepsze.

A więc zaczynamy:

  1. Tworzymy pusty obiekt.
  2. Tworzymy nowy skrypt C# o następującej zawartości:
  3. 2017-08-02 16_47_24-DontDestroyOnLoadTutorial - Microsoft Visual Studio
  4. Podpinamy skrypt pod pusty obiekt.
  5. W obiektach, które potrzebują uzyskać dostęp do przechowywanych danych (w tym przypadku do pola tekstowego), tworzymy skrypt C#:2017-08-02 16_45_19-DontDestroyOnLoadTutorial - Microsoft Visual Studio
  6. Po uruchomieniu mimo zmiany sceny pole tekstowe zawiera te same informacje.

Kod źródłowy z tego wpisu jest do pobrania na GitHubie.

Dzięki za przeczytanie tego wpisu. Jeśli masz jakieś pytania albo zastrzeżenia śmiało pisz w komentarzach. Do następnego wpisu.

 

Straciłem WSZYSTKIE notatki w OneNote!!!

OneNote to prawdopodobnie jedno z nielicznych narzędzi Microsoftu, które dobrze wyszło. Ten program jest jednym z elementów pakietu Microsoft Office. Możemy z niego także korzystać mając go pobranego ze Sklepu Windows, który jest dostępny od Windows 8. Trzecią opcją jest uruchomienie OneNote z przeglądarki, korzystając ze strony https://www.onenote.com/.

Ja osobiście korzystałem z tej drugiej opcji, bo wydawała mi się najwygodniejsza. Jak wkrótce się okaże zdecydowanie nie najbezpieczniejsza.

Jak udało mi się wszystko stracić?

Wbrew pozorom jest to bardzo proste. Kiedy korzystamy z OneNote ze sklepu Windows oraz z przeglądarki, aplikacja zapisuje notatki na OneDrive, nie robiąc żadnych kopii zapasowych. Wystarczy tylko taka nieświadoma osoba jak ja i chęć posprzątania (czytaj: usunięcia) wszystkiego na OneNote, żeby wszystkie plany, pomysły, informacje itp. bezpowrotnie wyparowały.

Czy można takim wydarzeniom zapobiec?

Pierwsza rzecz, jaka się nasuwa to nie usuwanie niczego z OneNote. Może i jest to jakieś rozwiązanie, ale mimo wszystko z zapomnienia, zaspania, zagapienia, albo innej chwilowej świadomości możemy przez przypadek notatki z OneDrive usunąć. Pasowałoby mieć wtedy kopię zapasową.

Korzystamy z aplikacji ze sklepu lub przez przeglądarkę

W tym przypadku muszę was rozczarować. Nie da się zrobić kopii zapasowej. Jest to spowodowane tym, że:

W menu nie ma żadnej opcji tworzenia kopii zapasowej.

2017-06-15 17_12_15-Notes użytkownika Lukasz — Microsoft OneNote Online

2017-06-15 17_12_51-Store

Z OneDrive nie można pobrać pliku z notatkami.

2017-06-15 17_13_18-Dokumenty — OneDrive

Po zsynchronizowaniu OneDrive z folderem programu w Windowsie powstaje tylko link przekierowujący do notatek na OneDrive.

2017-06-15 17_16_25-F__OneDrive_Dokumenty

Jest jednak druga opcja, która spowodowała, że przesiadłem się na inną wersję OneNote.

Korzystamy z programu z pakietu Microsoft Office

W tym przypadku program pozwala nam na stworzenie kopii zapasowej. Wystarczy wejść w Plik > Opcje > Zapisywanie i kopia zapasowa. Tam można ustawić folder kopii zapasowej oraz częstotliwość jej robienia. Można także wykonać ręcznie kopię zapasową.

2017-06-15 17_14_05-Opcje programu OneNote

Dzięki temu nasze notatki są nieco bezpieczniejsze, bo jeżeli stracimy notatki z OneDrive to możemy je znaleźć na dysku i odwrotnie.

To tyle na dziś. Jeżeli macie jakieś uwagi zachęcam do komentowania. Do następnego wpisu.

Ten ostatni, czyli podsumowanie Daj Się Poznać 2017

Dzisiaj jest ostatni dzień trwania konkursu, więc czas na podsumowanie.

Przez te 3 miesiące wiele się nauczyłem. Zarówno umiejętności czysto technicznych jak i tych związanych z produktywnością i prowadzeniem bloga. Nauczyłem się:

  • podstaw Gimpa
  • animowania ruchu
  • jak działa Rigidbody2D
  • jak działa Collider2D
  • jak stworzyć podstawową mechanikę gry platformowej
  • jak stworzyć AI botów
  • jak stworzyć UI w Unity
  • tego, że „Done is better than perfect”
  • trochę produktywności
  • przekonałem się, że blogowanie nie jest takie straszne jak je malują

Żeby nie było, że wszystko wyszło mi idealnie teraz napiszę gdzie zawiodłem:

  • nie pisałem tak regularnie jak planowałem (każdy wtorek i sobota)
  • reklamowanie mojego bloga, było bardzo skromne
  • nie stworzyłem MVP (Minimum viable product)

Statystyki

Bloga odwiedziło 322 osoby zostawiając 647 wyświetleń. Pod moimi postami pojawiło się 8 polubień i 14 komentarzy. Najczęściej wyświetlanymi wpisami były:

Czy to koniec bloga?

Na pewno nie. Prawdopodobnie będę wrzucać wpisy trochę rzadziej, bo 2 wpisy w tygodniu to trochę dużo. Wpisy będą także znacznie bardziej treściwe, bo będę miał więcej czasu, żeby je napisać.

Co z projektem?

Projekt zamierzam skończyć do takiego poziomu, jaki uznam za zadowalający. Będę także szukał grafika, bo szczerzę to, co nabazgrałem w Gimpie nie podoba mi się. Aktualny stan projektu można zobaczyć tutaj.

Podziękowania

Dziękuję wszystkim, którzy mnie wspierali w tym przedsięwzięciu. Wszystkim tym, którzy czytali moje wpisy, a także tym, którzy je komentowali.

Na koniec pozostaje mi tylko was zaprosić do tego, aby kontynuować czytanie mojego bloga, bo nowe wpisy już wkrótce…

Ten przedostatni

To jest przedostatni wpis, jaki piszę w ramach konkursu Daj Się Poznać 2017. Przedstawię w nim zmiany, jakie poczyniłem w ciągu zeszłego tygodnia.

Menu Główne

2017-05-31 16_10_37-Unity 5.5.0f3 Personal (64bit) - MainMenu.unity - Moon Problem - PC, Mac & Linux

Wzorowałem się na kokpicie modułu dowodzenia programu Apollo. Jedyną rzeczą, jaką tak naprawdę zmieniłem, było to co wyświetla główny wyświetlacz.

Kamienie

2017-05-31 16_15_42-Unity 5.5.0f3 Personal (64bit) - Level1.unity - Moon Problem - PC, Mac & Linux S.png

W Mario zbiera się monety. Na księżycu nie ma monet, ale są kamienie. Czemu więc nie zbierać kamieni? W przyszłości ilość zebranych kamieni będzie uwzględniana w wyniku na koniec poziomu.

Licznik czasu

Na screenie można też zauważyć licznik czasu, który także w będzie uwzględniany w wyniku na koniec poziomu.

Zmiana zachowania Cyklona

Cyklon.gif

Kolejną rzeczą, jaką zmieniłem była zmiana zachowania Cyklona w trybie obronnym, od teraz oprócz tego, że w tym trybie porusza się szybciej, zabija także swoich sojuszników (gracza przeciwników).

Ta zmiana sprawiła mi bardzo dużo problemów, ponieważ okazało się, że OnCollisionStay2D() zaczyna wywoływać się w kolejnej klatce po OnCollisionEnter2D(), gdzie znajdowały się odpowiednie instrukcje zabijające sojuszników. Rozwiązałem ten problem w ten sposób:

2017-05-31 16_32_33-Moon Problem - Microsoft Visual Studio

2017-05-31 16_33_03-Moon Problem - Microsoft Visual Studio

Błędy

Oprócz tego naprawiłem jeszcze parę bugów.

To tyle, jeżeli chodzi o ten wpis. Zachęcam do komentowania. Jeszcze dzisiaj ukaże się wpis podsumowujący moje całe zmagania w Daj Się Poznać 2017.

Praca wre

W ciągu ostatniego tygodnia udało mi się wprowadzić kilka zmian w projekcie.

AI między przeciwnikami

AI

Od teraz przeciwnicy nie będą usiłowali się przepychać tylko odwrócą się i pójdą w drugą stronę. Implementacja tego jest bardzo prosta. Wystarczyło każdy obiekt o tagu Enemy potraktować tak samo jak ścianę:

2017-05-21 14_36_44-Moon Problem - Microsoft Visual Studio

Zmiana poziomów

Od teraz po wejściu na lądownik, przeciwnik nie jest przenoszony na początek tego samego poziomu, tylko na początek następnego. To wszystko się dzieję dzięki kodowi poniżej, który jest umieszczony w klasie LevelManager:

2017-05-21 14_42_27-Moon Problem - Microsoft Visual Studio

Zdecydowałem się przenieść komponent LevelManager do elementu posiadającego Collider2D lądownika, aby uzyskać do niego dostęp wewnątrz skryptu.

Refaktoryzacja kodu

Udało mi się przenieść metody OnCollisionEnter2D() oraz OnCollisionStay2D() do klasy Character. Zawartość tej metody nadpisałem w klasie Player. Po za tym dokonałem parę drobnych zmian w różnych miejscach kodu. Całość można zobaczyć na GitHubie.

Plany na następny tydzień:

  • Menu główne
  • Monety
  • Licznik czasu
  • Tablica wyników
  • Skończyć poziom 1

To tyle, jeżeli chodzi o zmiany, jakie poczyniłem w ostatnim tygodniu. Zachęcam do komentowania. Do następnego wpisu.

„Done is better than perfect”

Jeżeli ktoś kojarzy Marka Zuckerberga to zapewne zna ten cytat, ponieważ jest to jeden z jego najsłynniejszych cytatów. Jednak, co oznaczają te słowa?

Skończone jest lepsze niż perfekcyjne? Ale jak to możliwe? Przecież perfekcja to coś idealnego, coś czemu nie można mieć nic do zarzucenia. Otóż nieprawda. Perfekcja wymaga dodatkowego czasu. Znacznie więcej czasu niż osiągnięcie stanu skończone.

Żeby przedstawić, o co dokładnie chodzi pokuszę się o przykład. Załóżmy, że robimy panel logowania do strony internetowej. Zrobiliśmy go i wygląda on tak:

2017-05-18 17_42_12-index.html

Podstawowa rzecz, jaką mieliśmy zrobić działa. Wszystko jest fajnie, ale kolor napisu „Zaloguj się!” nie pasuje do reszty. Trzeba to natychmiast zmienić!

2017-05-18 17_45_49-index.html

O teraz jest dobrze… Ale trzeba by tu jeszcze dać większy margines górny oddzielający pole hasła od przycisku.

2017-05-18 17_55_15-index.html

Jak pewnie się domyślacie można tak przerabiać ten formularz w nieskończoność, a i tak nie bylibyśmy wstanie powiedzieć, że jest perfekcyjny. A przecież naszym celem było zrobienie po prostu formularza. Użytkownik tego panelu naprawdę nie będzie zwracał wielkiej uwagi na odstęp między polami. On, NIE UWIERZYCIE, ale będzie chciał się tylko i wyłącznie ZALOGOWAĆ!

Ktoś mógłby powiedzieć, że to dotyczy tylko frontendu. Nic bardziej mylnego. W backendzie, głowimy się nad refaktoryzacją każdej pojedynczej funkcji, aby była jak najbardziej optymalna. Owszem, bardzo ważne jest dbanie o optymalizację kodu, ale czasem, kiedy już siedzimy w jednym miejscu przez definitywnie zbyt dużo czasu, trzeba po prostu powiedzieć dość. Kod działa. Trzeba przejść do kolejnego zadania.

Jeżeli rozważmy problem perfekcji w postaci wykresu zależności poziomu perfekcji od czasu wyjdzie nam w dosyć dużym uogólnieniu coś takiego:

Perfekcja od czasu

Jak widać na wykresie perfekcja jest bardzo kosztowna w czasie.

Podsumowując lepiej coś skończyć niż dążyć do perfekcji. Perfekcja jest rzeczą praktycznie nieosiągalną i trzeba sobie ją odpuścić na rzecz wykonania większej ilości zadań.

To tyle na dziś. Zachęcam do wyrażania swojej opinii w tym temacie w komentarzach. Do następnego wpisu.