SlideShare a Scribd company logo
1 of 26
Download to read offline
Walka z MVC i innymi
wzorcami projektowymi
w grach komputerowych z perspektywy
gameplayu
Kacper Kościeński
Senior Unity Developer
Playsoft
Licencja
/*
* ----------------------------------------------------------------------------
* "THE BEER-WARE LICENSE":
* <kkoscienski+4developers@gmail.com> wrote this file. As long as you retain this notice you
* can do whatever you want with this stuff. If we meet some day, and you think
* this stuff is worth it, you can buy me a beer in return.
* Kacper Kościeński
* ----------------------------------------------------------------------------
*/
Prezentacja - link
• Google drive folder
http://bit.ly/1RNSXWW
Spis treści
• O mnie
• Software development
• Gameplay
• MVC
• Inne wzorce
• Takeaway
• Pytania
Kacper Kościeński
Programista gier
kkoscienski+4developers@gmail.com
Disclaimer
● wszystkie prezentowane metody nie są uniwersalne:
ich zastosowanie zależy od projektu, teamu,
ograniczeń itp itd.
● skalowalne raczej do małych i średnich projektów
● część kodu uproszczona / zmieniona na cele
prezentacji
Software development
• Platformy (x86, Mobile, konsole, …)
• Technologie (Java, C#, C++, liby, Unity, …)
• Ludzie (skill, doświadczenie, nastrój…)
• Cel
• W zależności od branży różne narzędzia i
rozwiązania
• Wzorce projektowe
Gameplay
• Logika, AI, poruszanie, input, etc.
• Częsta zmian założeń
• Często brak dobrych wytycznych
• Nie ma testów jednostkowych
• Dużo profilowania
• Jesli masz Game Design Document -> WIN
• Model - parametry obiektów, wysokopoziomowa logika.
Game / Level Design
• View - art, wizualizacje
(kolor, tekstura, animacje …).
Artyści
• Controller - działania graczy / podsystemów,
niskopoziomowa logika.
Programiści
Model View Controller - Gameplay
MVC - Model
Dane:
public class BoatData
{
public readonly float Radius = 0.0f;
public readonly SailType SailType = SailType.Spinnaker;
}
Logika wysokopoziomowa - jeśli sztorm to płyń do portu
MVC - View
• Assety dostarczone przez artystów.
• Ustawianie parametrów (i.e. kolor)
• Wystartowanie efektu cząsteczkowego (wybuchy!)
MVC - Controller
• Input: gracze, podsystemy (i.e. AI)
• Sterowanie
• Wyszukiwanie ścieżki
• Zmiana stanów
• Animacje
• Logika niskopoziomowa - poruszanie, shoot
sequence etc.
MVC - typowe błędy
• Trzymanie się wzorca (“pure MVC”)
• Programista wymagany do wrzucania assetów
• Duża złożoność
• Language / library feature focus
Singleton
• “Antywzorzec”.
• Używany w każdej grze do jakiej miałem źródła.
• Wiele upraszcza.
public abstract class Singleton<T> : MonoBehaviour where T : Singleton<T> {
public static void Init(Transform parent) {
//load data and stuff, no lazy init
// Instance set
}
private void Awake() { //c-tor
if (Instance != null && Instance != this)
Destroy(gameObject);
else
OnAwake();
}
protected virtual void OnAwake() {}
public static T Instance { get; private set; }
}
Singleton
public class GameManager : Singleton<GameManager> {
protected override void OnAwake() {
Init(null);
ServiceManager.Init(transform);
NetworkManager.Init(transform);
UsersManager.Init(transform);
BoatStatesManager.Init(transform);
InterestManager.Init(transform);
DebugManager.Init(transform);
GameplayManager.Init(transform);
QualityManager.Init(transform);
WindManager.Init(transform);
InputManager.Init(transform);
LocalizationManager.Init(transform);
SpritesManager.Init(transform);
TranslationManager.Init(transform);
}
}
Singleton
Pozwala na:
LocalizationManager.Instance.Get(“ok”);
Typowe błędy:
• Lazy initialization
• Spam singletons
Hints:
• Instance nigdy null (init na starcie aplikacji / w
odpowiednim momencie).
• Nie inicjalizuj w get
Singleton
signal -> transmitter -> receiver
zazwyczaj implementacja i korzystanie - kilka linii kodu
BoatManager : Singleton<BoatManager> {
private UnityEvent onChanged = new UnityEvent();
public void Change() {
onChanged.Invoke();
}
// register / deregister event listeners
}
Observer
Typowe błędy:
• Trzymanie się wzorca
• Overcomplicated
• Language / library feature focus
Observer
• alokacja pamięci jest kosztowna
• Garbage Collector spikes
Object pool
I've seen things you people wouldn't believe.
• Trzymanie się wzorca (“pure XYZ”).
• Przekomplikowanie.
• Niemożność odejścia od wzorca.
Wzorce projektowe - błędy
• Twój kod nie powinien być maksymalnie uniwersalny.
• Lepiej zrobić coś prostego działającego w 1d i później
refactor niz super bibliotekę w 2mc i użyć jej raz.
• OOP jest przereklamowane! Może warto spróbować
trochę innego podejścia?
• Profiluj per platforma
Wzorce projektowe - hints
Takeaway
• Modyfikuj
• Upraszczaj
• Pamiętaj - nie piszesz biblioteki!
• KISS
Keep It Simple, Stupid
• Ta prezentacja
http://bit.ly/1RNSXWW
• Złudzenie ponownego wykorzystania
http://blog.codinghorror.com/rule-of-three/
• Joel on Software
http://joelonsoftware.com
Kacper Kościeński
kkoscienski+4developers@gmail.com
Pytania?

More Related Content

What's hot

Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1Piotr Pawlak
 
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaAutomatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaWomen in Technology Poland
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun againMarcin Gajda
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaMarcin Gajda
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńPaweł Kondraciuk
 
Onet barcamp 4 - Cloud Storage
Onet barcamp 4  - Cloud StorageOnet barcamp 4  - Cloud Storage
Onet barcamp 4 - Cloud StorageOnetIT
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerMarek Będkowski
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKSemihalf
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxDawid Rusnak
 
[DSG] Przyczajony GPU - ukryty smok
[DSG] Przyczajony GPU - ukryty smok[DSG] Przyczajony GPU - ukryty smok
[DSG] Przyczajony GPU - ukryty smokKonrad Szałkowski
 
infraxstructure: Jarosław Zieliński i Sławomir Stanek "Wojna o Wirtualizację...
infraxstructure: Jarosław Zieliński i Sławomir Stanek  "Wojna o Wirtualizację...infraxstructure: Jarosław Zieliński i Sławomir Stanek  "Wojna o Wirtualizację...
infraxstructure: Jarosław Zieliński i Sławomir Stanek "Wojna o Wirtualizację...PROIDEA
 
The starling framework
The starling frameworkThe starling framework
The starling frameworkukaszdev
 

What's hot (20)

Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1
 
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaAutomatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?Swoole w PHP. Czy to ma sens?
Swoole w PHP. Czy to ma sens?
 
Hugo - make webdev fun again
Hugo - make webdev fun againHugo - make webdev fun again
Hugo - make webdev fun again
 
Torquebox
TorqueboxTorquebox
Torquebox
 
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótkaWebpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
Webpack - Czym jest webpack i dlaczego chcesz go używać? - wersja krótka
 
GlusterFS
GlusterFSGlusterFS
GlusterFS
 
Wstęp do UNet
Wstęp do UNet Wstęp do UNet
Wstęp do UNet
 
Jak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzieńJak zostać mobile deweloperem w 1 dzień
Jak zostać mobile deweloperem w 1 dzień
 
MineCraft
MineCraftMineCraft
MineCraft
 
Onet barcamp 4 - Cloud Storage
Onet barcamp 4  - Cloud StorageOnet barcamp 4  - Cloud Storage
Onet barcamp 4 - Cloud Storage
 
Ansible w 5 minut... Playbooki
Ansible w 5 minut...  PlaybookiAnsible w 5 minut...  Playbooki
Ansible w 5 minut... Playbooki
 
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio playerFull Stack JavaScript case study na podstawie Maracuya Jukebox audio player
Full Stack JavaScript case study na podstawie Maracuya Jukebox audio player
 
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDKZłam zasady i stwórz wydajny stos IP przy użyciu DPDK
Złam zasady i stwórz wydajny stos IP przy użyciu DPDK
 
Aplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/ReduxAplikacje internetowe real-time w oparciu o React/Redux
Aplikacje internetowe real-time w oparciu o React/Redux
 
[DSG] Przyczajony GPU - ukryty smok
[DSG] Przyczajony GPU - ukryty smok[DSG] Przyczajony GPU - ukryty smok
[DSG] Przyczajony GPU - ukryty smok
 
infraxstructure: Jarosław Zieliński i Sławomir Stanek "Wojna o Wirtualizację...
infraxstructure: Jarosław Zieliński i Sławomir Stanek  "Wojna o Wirtualizację...infraxstructure: Jarosław Zieliński i Sławomir Stanek  "Wojna o Wirtualizację...
infraxstructure: Jarosław Zieliński i Sławomir Stanek "Wojna o Wirtualizację...
 
[JUG] JCuda
[JUG] JCuda[JUG] JCuda
[JUG] JCuda
 
The starling framework
The starling frameworkThe starling framework
The starling framework
 

Similar to 4Developers: Kacper Kościeński- Walka z MVC i innymi wzorcami projektowymi w grach komputerowych

Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”3camp
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychSKN Shader
 
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PROIDEA
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Bartlomiej Zass
 
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...Gawel Mikolajczyk
 
ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015Michał Dudak
 
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016PROIDEA
 
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Michalis Kamburelis
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJSSages
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówArkadiusz Stęplowski
 
Konstruktor budowli LEGO
Konstruktor budowli LEGOKonstruktor budowli LEGO
Konstruktor budowli LEGOpiotrmm
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Semihalf
 
WebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowWebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowMarcin Dembowski
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na AndroidzieDaftcode
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤Tomasz Dziuda
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...The Software House
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPROIDEA
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationMariusz Koprowski
 

Similar to 4Developers: Kacper Kościeński- Walka z MVC i innymi wzorcami projektowymi w grach komputerowych (20)

Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
Odtwarzanie multimediów w HTML5, czyli Player przez duże „P”
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
 
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
PLNOG 18 - Robert Ślaski - Programowanie a nie konfiguracja - porozmawiajmy z...
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
 
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
Security B-Sides Warsaw 2013 - Masywna Telemetria NetFlow jest Masywna - Gawe...
 
ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015ITAD PolSl 2014 - Nowości w .NET 2015
ITAD PolSl 2014 - Nowości w .NET 2015
 
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
Konrad Kokosa - Pamięć w .NET - od ogólu do szczegółu- 4developers2016
 
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
Castle Game Engine presentation at Zlot Programistów Delphi 2023 (Polish)
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
Konstruktor budowli LEGO
Konstruktor budowli LEGOKonstruktor budowli LEGO
Konstruktor budowli LEGO
 
Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.Programowanie sterowników w Linuksie.
Programowanie sterowników w Linuksie.
 
WebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowWebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, Tomorrow
 
Kivy na Androidzie
Kivy na AndroidzieKivy na Androidzie
Kivy na Androidzie
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤
 
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
“Dziesięć serwerów poproszę!“, czyli co może Ci zaoferować definiowanie infra...
 
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOpsPLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
PLNOG 22 - Krzysztof Załęski - Praktyczne zastosowanie narzędzi NetDevOps
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
Using Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentationUsing Red Gate SQL Doc for database documentation
Using Red Gate SQL Doc for database documentation
 

4Developers: Kacper Kościeński- Walka z MVC i innymi wzorcami projektowymi w grach komputerowych

  • 1. Walka z MVC i innymi wzorcami projektowymi w grach komputerowych z perspektywy gameplayu Kacper Kościeński Senior Unity Developer Playsoft
  • 2. Licencja /* * ---------------------------------------------------------------------------- * "THE BEER-WARE LICENSE": * <kkoscienski+4developers@gmail.com> wrote this file. As long as you retain this notice you * can do whatever you want with this stuff. If we meet some day, and you think * this stuff is worth it, you can buy me a beer in return. * Kacper Kościeński * ---------------------------------------------------------------------------- */
  • 3. Prezentacja - link • Google drive folder http://bit.ly/1RNSXWW
  • 4. Spis treści • O mnie • Software development • Gameplay • MVC • Inne wzorce • Takeaway • Pytania
  • 6. Disclaimer ● wszystkie prezentowane metody nie są uniwersalne: ich zastosowanie zależy od projektu, teamu, ograniczeń itp itd. ● skalowalne raczej do małych i średnich projektów ● część kodu uproszczona / zmieniona na cele prezentacji
  • 7. Software development • Platformy (x86, Mobile, konsole, …) • Technologie (Java, C#, C++, liby, Unity, …) • Ludzie (skill, doświadczenie, nastrój…) • Cel • W zależności od branży różne narzędzia i rozwiązania • Wzorce projektowe
  • 8. Gameplay • Logika, AI, poruszanie, input, etc. • Częsta zmian założeń • Często brak dobrych wytycznych • Nie ma testów jednostkowych • Dużo profilowania • Jesli masz Game Design Document -> WIN
  • 9. • Model - parametry obiektów, wysokopoziomowa logika. Game / Level Design • View - art, wizualizacje (kolor, tekstura, animacje …). Artyści • Controller - działania graczy / podsystemów, niskopoziomowa logika. Programiści Model View Controller - Gameplay
  • 10. MVC - Model Dane: public class BoatData { public readonly float Radius = 0.0f; public readonly SailType SailType = SailType.Spinnaker; } Logika wysokopoziomowa - jeśli sztorm to płyń do portu
  • 11.
  • 12. MVC - View • Assety dostarczone przez artystów. • Ustawianie parametrów (i.e. kolor) • Wystartowanie efektu cząsteczkowego (wybuchy!)
  • 13. MVC - Controller • Input: gracze, podsystemy (i.e. AI) • Sterowanie • Wyszukiwanie ścieżki • Zmiana stanów • Animacje • Logika niskopoziomowa - poruszanie, shoot sequence etc.
  • 14. MVC - typowe błędy • Trzymanie się wzorca (“pure MVC”) • Programista wymagany do wrzucania assetów • Duża złożoność • Language / library feature focus
  • 15. Singleton • “Antywzorzec”. • Używany w każdej grze do jakiej miałem źródła. • Wiele upraszcza.
  • 16. public abstract class Singleton<T> : MonoBehaviour where T : Singleton<T> { public static void Init(Transform parent) { //load data and stuff, no lazy init // Instance set } private void Awake() { //c-tor if (Instance != null && Instance != this) Destroy(gameObject); else OnAwake(); } protected virtual void OnAwake() {} public static T Instance { get; private set; } } Singleton
  • 17. public class GameManager : Singleton<GameManager> { protected override void OnAwake() { Init(null); ServiceManager.Init(transform); NetworkManager.Init(transform); UsersManager.Init(transform); BoatStatesManager.Init(transform); InterestManager.Init(transform); DebugManager.Init(transform); GameplayManager.Init(transform); QualityManager.Init(transform); WindManager.Init(transform); InputManager.Init(transform); LocalizationManager.Init(transform); SpritesManager.Init(transform); TranslationManager.Init(transform); } } Singleton
  • 18. Pozwala na: LocalizationManager.Instance.Get(“ok”); Typowe błędy: • Lazy initialization • Spam singletons Hints: • Instance nigdy null (init na starcie aplikacji / w odpowiednim momencie). • Nie inicjalizuj w get Singleton
  • 19. signal -> transmitter -> receiver zazwyczaj implementacja i korzystanie - kilka linii kodu BoatManager : Singleton<BoatManager> { private UnityEvent onChanged = new UnityEvent(); public void Change() { onChanged.Invoke(); } // register / deregister event listeners } Observer
  • 20. Typowe błędy: • Trzymanie się wzorca • Overcomplicated • Language / library feature focus Observer
  • 21. • alokacja pamięci jest kosztowna • Garbage Collector spikes Object pool
  • 22.
  • 23. I've seen things you people wouldn't believe. • Trzymanie się wzorca (“pure XYZ”). • Przekomplikowanie. • Niemożność odejścia od wzorca. Wzorce projektowe - błędy
  • 24. • Twój kod nie powinien być maksymalnie uniwersalny. • Lepiej zrobić coś prostego działającego w 1d i później refactor niz super bibliotekę w 2mc i użyć jej raz. • OOP jest przereklamowane! Może warto spróbować trochę innego podejścia? • Profiluj per platforma Wzorce projektowe - hints
  • 25. Takeaway • Modyfikuj • Upraszczaj • Pamiętaj - nie piszesz biblioteki! • KISS Keep It Simple, Stupid
  • 26. • Ta prezentacja http://bit.ly/1RNSXWW • Złudzenie ponownego wykorzystania http://blog.codinghorror.com/rule-of-three/ • Joel on Software http://joelonsoftware.com Kacper Kościeński kkoscienski+4developers@gmail.com Pytania?