Tworzenie gry w C# z użyciem silnika Ogre - cz.1

09.08.2010 - Mateusz Osowski
TrudnośćTrudność

[Część 1] [Część 2] [Część 3] [Część 4] [Część 5] [Część 6]
[Część 7]

Stworzenie trójwymiarowej gry komputerowej RPG było Twoim marzeniem? W poprzednich artykułach (pierwszy, drugi)mieliśmy okazję do nauki modelowania i animacji postaci. Teraz dowiesz się jak wykorzystać taką postać w prostej grze widzianej z perspektywy trzeciej osoby. Zobaczysz, że to wcale nie musi być trudne!

Przygotowania

  • Podstawowym narzędziem, które posłuży nam do stworzenia gry będzie Visual C# 2010 Express Edition. Jest to darmowe środowisko programistyczne Microsoftu. Jeżeli posiadasz zainstalowane Visual C# 2008 - również możesz go z powodzeniem wykorzystać. Otwartą alternatywę stanowi SharpDevelop. Wybierzemy język C#, ponieważ można z jego pomocą szybko pisać bardzo przejrzysty kod, zachowując przy tym dużą wydajność. Prosta składnia tego języka i dopracowane narzędzia pozwolą nam szybko uzyskać zamierzony efekt. Ponieważ artykuł dotyczy tworzenia gry, powinieneś znać C++ lub sam C# w stopniu choćby elementarnym - nie będą omawiane podstawy tego języka, ale też nie będą wykorzystywane konstrukcje specyficzne tylko dla C#.
  • Gra powstanie w oparciu o silnik graficzny Ogre i fizyczny Newton opakowany w interfejs platformy .NET (Mogre i MogreNewt). Mogre (Managed Ogre) to wrapper, swego rodzaju "klej" pomiędzy biblioteką Ogre napisaną w C++, a platformą .NET. MogreNewt to wrapper biblioteki OgreNewt łączącej silnik Newton i Ogre. MOIS to wrapper popularnej biblioteki wejścia OIS. Są to biblioteki bardzo cenione nawet przez profesjonalistów. Ogre i Newton były wykorzystywane do produkcji kilku gier komercyjnych. Dostępne są ich wrappery do wielu innych języków, takich jak Python, czy Java.
  • Narzut wydajnościowy związany z użyciem kodu zarządzanego nie będzie duży, ponieważ same kluczowe biblioteki są skompilowane w postaci natywnej.

Pliki:

  • Visual C# 2010 Express
  • Microsoft .NET Framework 3.5
  • Mogre i MogreNewt - biblioteki .NET
  • Biblioteki uruchomieniowe Ogre
  • Zasoby graficzne użyte w przykładzie
  • Kod źródłowy omawiany w tej części kursu
  • Eksporter Blender 2.49 -> Ogre
  • Microsoft DirectX
  • Visual C++ 2008 SP1 Redistributable

    Tworzymy projekt

    Pracę nad grą rozpoczniemy od utworzenia projektu Visual C#. W tym celu:

    • Uruchom środowisko i wybierz kreator projektu (File->New->Project).
    • Z dostępnych typów projektu wybierz aplikację konsolową. Ustaw .NET Framework 3.5 jako docelową platformę.

    Biblioteki Mogre są skompilowane pod .NET w wersji 2.0 i nie mogą być wykorzystywane jednocześnie z bibliotekami dla .NET 4.0. Najwyższą kompatybilną wersją jest 3.5. Nie stanowi to dla nas problemu, ponieważ i tak nie wykorzystujemy cech platformy .NET 4.0. Nadaj projektowi odpowiednią nazwę i wybierz dogodną dla niego lokację. Zatwierdź utworzenie projektu klikając OK.

    Importujemy biblioteki

    Musimy wskazać środowisku z jakich bibliotek będziemy korzystać. Jeżeli jeszcze tego nie zrobiłeś - pobierz przygotowany pakiet Mogre + Newton z linku powyżej. Z menu kontekstowego References wybierz Add Reference....

    W zakładce Browse przenawiguj do pobranego pakietu i wskaż pliki Mogre.dll, MogreNewt.dll i MOIS.dll.

    Ustalamy folder uruchomieniowy

    Domyślnie program uruchamiany spod Visual C# "widzi" pliki widziane w folderze głównym projektu. Wklejanie do niego zasobów w postaci tekstur, plików modeli i dźwięków powodowałoby bałagan, dlatego najlepiej jest sobie wydzielić osobny folder, w którym gra ma pracować. Utwórz taki folder i przejdź do ustawień projektu.

    W zakładce Debug ustaw w polu Working directory ścieżkę do utworzonego folderu. Przestaw konfigurację projektu z Debug na Release i również ustaw ścieżkę katalogu roboczego.

    Do katalogu roboczego wklej biblioteki uruchomieniowe Ogre (link dostępny powyżej). Utwórz też w nim podkatalog Media, w którym przechowywać będziemy wszystkie potrzebne zasoby. Najprostszym sposobem na wskazanie silnikowi tego podkatalogu jest użycie skryptu konfiguracyjnego, który wczytamy w kodzie gry za pomocą funkcji silnika. W tym celu utwórz w katalogu roboczym plik Resources.cfg o treści:

    1
    2
    
    [General]
    FileSystem=Media

    Silnik Ogre posiada funkcje wczytujące pliki w takim formacie - wykorzystamy to za chwilę. Utwórz również plik Plugins.cfg, który silnik wczyta automatycznie:

    1
    2
    
    PluginFolder=.
    Plugin=RenderSystem_Direct3D9

    Jak widać, jedynym potrzebnym nam pluginem będzie system renderowania Direct3D. Możliwe jest również wykorzystanie OpenGL - z poziomu Ogre nie ma to dla nas żadnego znaczenia - oferuje on nam warstwę abstrakcji oddzielającą nas od szczegółowej implementacji. Nazwa pluginu OpenGL brzmi:

    1
    
    RenderSystem_GL



    Projekt

    • Klasa Engine będzie zapewniała interakcję pomiędzy klasą planszy (Level), menadżera obiektów (ObjectManager), kamery (GameCamera) i silnikami graficznym i fizycznym. Engine będzie agregatem obiektów wymienionych klas.
    • Klasa Level będzie przechowywać informacje o planszy.
    • Klasa ObjectManager będzie agregatem obiektów typu GameObject - będzie posiadać listę wszystkich obiektów świata gry.
    • Klasa GameObject będzie abstrakcyjną klasą, nie reprezentującą typu konkretnych obiektów gry.
    • Klasa Character dziedziczy z GameObject i będzie reprezentować konkretny typ obiektów gry - postacie.
    • Klasa CharacterProfile będzie przechowywać informacje o postaci, takie jak jej szybkość, siatka, a w przyszłości statystyki.
    • Klasa GameCamera będzie odpowiadać za utrzymywanie kamery za plecami postaci.
    Dzięki uogólnieniu w postaci klasy GameObject w przyszłości korzystając z dziedziczenia w łatwy sposób będzie można rozbudować projekt o inne typy obiektów gry.

    5
    Twoja ocena: Brak Ocena: 5 (8 ocen)
  • Copyright © 2008-2010 Wrocławski Portal Informatyczny

    design: rafalpolito.com