Unity 2D - prosta gra

Podobne dokumenty
Unity 3D - własny ekran startowy i menu gry

Unity 3D - podpowiedzi w grze. System cząstek

Unity 3D - efekty strzelania, koniec gry

Unity 3D - pierwsze skrypty

Zasoby. Musimy zaimportować zasoby dla gry z Asset Store

Unity. Platforma do tworzenia gier dla różnych systemów docelowych, m.in.: Windows, macos, ios, Android, Powstała w 2005 r., obecnie wersja 5.3.

Unity 3D - tworzenie sceny

Multimedialne Interfejsy Użytkownika. Technologie Wytwarzania Oprogramowania SUM Semestr 2, 2015/ luty 2017

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Systemy wirtualnej rzeczywistości. Komponenty i serwisy

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Tworzenie menu i authoring w programie DVDStyler

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane metody grafiki w reklamie. Laboratorium. 3dsmax wprowadzenie

Strzelanka dla dwóch graczy

Dodawanie treści na stronę projektu z Poddziałania 3.1.2

Animacje cz. 2. Rysujemy koło zębate

Informatyka II. Laboratorium Aplikacja okienkowa

Aplikacje WWW - laboratorium

Ping-Pong. Gra dla dwóch graczy.

Ćwiczenie 1 Galeria zdjęć

Gry Komputerowe Laboratorium 4. Teksturowanie Kolizje obiektów z otoczeniem. mgr inż. Michał Chwesiuk 1/29. Szczecin, r

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

Z pojedynczym obiekcie zasady grupy znajdziemy dwa główne typy ustawień:

Aplikacje WWW - laboratorium

Musimy do naszej gry załadować materiały. Są to trzy obrazki:

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Grafika Komputerowa. 3dsmax wprowadzenie

Warsztaty dla nauczycieli

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

GIMP. Ćwiczenie nr 6 efekty i filtry. Instrukcja. dla Gimnazjum 36 - Ryszard Rogacz Strona 18

5.4. Tworzymy formularze

Ćwiczenia 9 - Swing - część 1

Modelowanie obiektowe - Ćw. 1.

Wstawianie nowej strony

1. Ćwiczenia z programem PowerPoint

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Compas 2026 Personel Instrukcja obsługi do wersji 1.05

xmlns:prism= c. <ContentControl prism:regionmanager.regionname="mainregion" />

Gry Komputerowe Laboratorium 3. Organizacja obiektów sceny Kolizje obiektów. mgr inż. Michał Chwesiuk 1/20. Szczecin, r

Aplikacje mobilne. Pliki zasobów, grafiki, menu, podpinanie zdarzeń. dr Tomasz Jach Instytut Informatyki, Uniwersytet Śląski

Rysunek 1: Okno timeline wykorzystywane do tworzenia animacji.

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

SpriteKit. Biblioteka do tworzenia gier wbudowana w SDK. Wspiera grafikę 2D w oparciu o sprite y

Studia Podyplomowe Grafika Komputerowa i Techniki Multimedialne, 2017, semestr II Modelowanie 3D - Podstawy druku 3D. Ćwiczenie nr 4.

Rys Odtwarzacz filmu. Możemy także skorzystać z programów służących do odtwarzania filmów np. Windows Media Player.

Wykład 4: Klasy i Metody

Instrukcja do zajęć (całość)

Inkscape. Menu. 1 SVG (ang. Scalable Vector Graphics) uniwersalny format dwuwymiarowej, statycznej i

Praca z widokami i nawigacja w pokazie

Celem tego projektu jest stworzenie

Ciekawym rozwiązaniem służącym do obsługi zdarzeń dla kilku przycisków w ramach jednej aktywności może być następujący kod:

c. Przesuwamy sześcian wzdłuż osi Z o wartość 5

Edytor tekstu MS Word podstawy

Raytracer. Seminaria. Hotline. początkujący zaawansowani na miejscu

Programowanie gier komputerowych. Tomasz Martyn. Wykład 10. Różności: Cinamatics, Aktorzy kinematyczni, Prefabs, Archetypes

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

Klasy i obiekty cz II

Moduł Mikołajkowe kodowanie

imei CYFROWE PRZETWARZANIE SYGNAŁÓW Laboratorium Temat: Tworzenie aplikacji w środowisku LabWindows/CVI Instytut Metrologii, Elektroniki i Informatyki

Instalacja i obsługa aplikacji MAC Diagnoza EW

Henryk Budzisz. materiały przygotowane w ramach projektu ZPORR nr POKL /08-00

Dodanie nowej formy do projektu polega na:

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji

Programowanie telefonów z Windows Phone 7, cz. 3

Instrukcja zarządzania kontami i prawami. użytkowników w systemie express V. 5

Programowanie wielowarstwowe i komponentowe

Laboratorium programowania urządzeń mobilnych

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Rys. 1. Brama przesuwna do wykonania na zajęciach

1 Podstawowe informacje 2. 2 Tworzenie gry Rejestracja do gry Lista gier 7. 4 Gry Archiwalne 8. 5 Lista Graczy 9

DOKUMENTY I GRAFIKI. Zarządzanie zawartością Tworzenie folderu Dodawanie dokumentu / grafiki Wersje plików... 7

Wprowadzenie do Doctrine ORM

mgr Elżbieta Galant-Zielonka

Rozpoczęcie pracy z programem.

Instalacja Webroot SecureAnywhere przy użyciu GPO w Active Directory

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

W momencie stworzenia kontroler ustawia punkty na 100. Dodajemy zdarzenie Create w środku kontrolera,

Podstawy systemu operacyjnego Windows 7 i bezpieczne korzystanie z sieci Internet

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

1. Tworzenie integracji

FINCH PONG. Realizator: Partner: Patronat:

Siemens S Konfiguracja regulatora PID

Jak zainstalować program Photosynth i przygotowywać swoje projekty

INSTRUKCJA INSTALACJI I URUCHOMIENIA PROGRAMÓW FINKA DOS W SYSTEMACH 64 bit

Zasady grupy (GPO) Windows Server 2008 R2. Przykładowa grupy.

wstawianie przycisków umożliwiających wybieranie wartości poprzez klikanie strzałek

Przykładowa konfiguracja komunikacji pomiędzy oprogramowaniem Wonderware i Codesys z wykorzystaniem sieci LAN lub modułu GSM

Windows Workflow Foundation (wprowadzenie - prosty przykład Sequential Workflow):

PROJEKT WIZYTÓWKI WIZYTÓWKA A

Instrukcja obsługi programu Profile GT

CalendarGenerator v0.1 - instrukcja obsługi

Temat: Tekstury uŝytkownika

dr inż. Piotr Czapiewski Tworzenie aplikacji w języku Java Laboratorium 1

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

Programowanie i struktury danych

Instrukcja obsługi aplikacji Karty Pojazdów dla Dealerów Samochodowych

Tworzymy projekt File->New Project->Java Application, przy czym tym razem odznaczamy create main class

Instalacja protokołu PPPoE

Politechnika Poznańska Wydział Budowy Maszyn i Zarządzania

za pomocą: definiujemy:

Transkrypt:

www.math.uni.lodz.pl/ radmat

Cel ćwiczeń Celem bieżących ćwiczeń jest stworzenie prostej gry 2D.

Prosta gra Stworzymy prostą grę, w której będziemy sterować pojazdem kosmicznym i będziemy mogli strzelać do rakiet przeciwnika.

Rysunek: Uruchomiona gra

Foldery W nowo utworzonym projekcie 2D proszę utworzyć foldery Prefabs, Scenes, Scripts oraz Sprites. W ostatnim katalogu proszę zapisać utworzone / pobrane z Internetu pliki (najlepiej w formacie PNG) statku kosmicznego gracza (plik PlayerStarship.png) oraz statku kosmicznego przeciwnika (plik EnemyStarship.png) (odpowiednimi wymiarami pliku będzie 100 na 100 pikseli), tła (plik background.jpg) oraz światło lasera (plik Laser.png). Uwaga! W oknie Inspector należy ustawić Texture Type na Sprite (2D and UI).

Tworzymy scenę gry Wstawiamy grafikę PlayerStarship na scenę i ustawiamy pozycję na (0, 0). Dodajemy do obiektu Box Collider 2D. Wstawiamy tło background.jpg, a następnie w oknie Inspector: Zmieniamy Texture Type na Default, Wrap Mode ustawiamy na Repeat, po czym zatwierdzamy zmiany. Tworzymy obiekt 3D Cube, zmieniamy jego nazwę na Background i usuwamy jego Box Collider wybierając Remove Component.

W zakładce Project z menu kontekstowego wybieramy Create Material i nadajemy mu nazwę materialbackground. W zakładce Inspector ustawiamy Shader na Unlit Texture. Zaznaczamy Texture i wybieramy teksturę tła. W polu Tiling wpisujemy wymiary grafiki będącej tłem. W oknie Hierarchy zaznaczamy obiekt Background, po czym w oknie Inspector w zakładce Mesh Renderer rozwijamy Materials i w polu Element 0 zmieniamy domyślny materiał na materialbackground. W zakładce Transform ustawiamy Position na (0, 0, 1), a Scale na (100, 100, 1).

Skrypt Player.cs public float playerspeeddefault = 3.0f; private float playerspeedcurrent = 0.0f; private float playerdecreasespeed = 0.99f; private Vector3 playerlastdirection = new Vector3(); public List<KeyCode> buttonup; public List<KeyCode> buttondown; public List<KeyCode> buttonleft; public List<KeyCode> buttonright; Powyższy kod dodajemy oczywiście do obiektu PlayerStarship.

W zakładce Inspector dla Button Up, Button Down, Button Left i Button Right ustawiamy Size na 2. Dla każdego z przycisków w polu Element 0 przypisujemy Up Arrow, Down Arrow, Left Arrow i Right Arrow odpowiednio, natomiast w polu Element 1 przypisujemy litery, np. W, S, A, D odpowiednio.

Dopiszmy następujący kod do funkcji Update: PlayerRotate(); PlayerMove();

void PlayerRotate() Vector3 mouseworldposition=camera.main.screentoworldpoint (Input.mousePosition); float mousedirectionx=mouseworldposition.x -this.transform.position.x; float mousedirectiony=mouseworldposition.y -this.transform.position.y ; float angle=mathf.atan2(mousedirectiony,mousedirectionx) *Mathf.Rad2Deg; this.transform.rotation = Quaternion.Euler (new Vector3(0,0,angle-90));

Na tym etapie możemy już przetestować zachowanie naszego statku kosmicznego (należy zakomentować funkcję PlayerMove()), który powinien obracać się w stronę kursora.

void PlayerMove() Vector3 thisframemove = new Vector3(); thisframemove += CheckMove(buttonUp, Vector3.up); thisframemove += CheckMove(buttonDown, Vector3.down); thisframemove += CheckMove(buttonLeft, Vector3.left); thisframemove += CheckMove(buttonRight, Vector3.right); thisframemove.normalize (); if(thisframemove.magnitude > 0) playerspeedcurrent = playerspeeddefault; playerlastdirection = thisframemove; else playerspeedcurrent *= playerdecreasespeed; this.transform.translate(playerlastdirection * Time.deltaTime * playerspeedcurrent, Space.Self);

Vector3 CheckMove(List<KeyCode> keycodelist, Vector3 move) foreach (KeyCode element in keycodelist) if(input.getkey(element)) return move; return Vector3.zero; Po wpisaniu powyższego kodu naszym pojazdem powinno już także dać się sterować za pomocą strzałek, bądź liter W, S, A i D.

Dodamy teraz możliwość strzelania. Na początku do istniejącego skryptu dopiszmy następujące zmienne: public Transform laser; public float laserdistance =.2f; public float timebetweenfires =.2f; private float timetillnextfire = 0.0f; public List<KeyCode> buttonfire; Dodatkowo do funkcji Update należy dopisać metodę LaserFire();.

void LaserFire() if (timetillnextfire <= 0) foreach (KeyCode element in buttonfire) if (Input.GetKey(element)) timetillnextfire = timebetweenfires; MakeLaserFire(); break; else timetillnextfire -= Time.deltaTime;

void MakeLaserFire() float laserx=this.transform.position.x+ Mathf.Cos((transform.localEulerAngles.z-90) *Mathf.Deg2Rad)*(-laserDistance); float lasery=this.transform.position.y+ Mathf.Sin((transform.localEulerAngles.z-90) *Mathf.Deg2Rad) *(-laserdistance); Instantiate(laser,new Vector3(laserX,laserY,0), this.transform.rotation);

W oknie Inspector dla obiektu PlayerStarship w polu Button Fire należy ustawić wartość 2, w polu Element 0 ustawiamy Mouse 0, a w polu Element 1 ustawiamy Space.

Skrypt Laser.cs Na początku do skryptu dodajemy następujące zmienne oraz uzupełniamy metody Start i Update. public float laserspeed = 6.0f; public float laserlifetime = 2.0f; public int laserpower = 1; void Start () Destroy(gameObject, laserlifetime); void Update () transform.translate(vector3.up * Time.deltaTime * laserspeed);

Dodajemy do sceny plik laser.png. Do obiektu laser dodajemy skrypt Laser.cs. Do obiektu laser dodajemy Box Collider 2D. Z okna Hierarchy przenosimy obiekt laser do katalogu Prefabs. Usuwamy obiekt laser ze sceny. W oknie Inspector obiektu PlayerStarship przenosimy prefab laser w pole Laser.

Rysunek: Okno Inspector obiektu PlayerStarship

Rysunek: Uruchomiona gra: nasz statek wystrzeliwuje laser

Skrypt Enemy.cs Dodamy teraz do sceny statek naszego przeciwnika, a następnie przypiszemy do niego nowy skrypt Enemy.cs. private Transform playertransformation; public float enemyspeed = 1.0f; public int energy = 1; void Start () playertransformation = GameObject.Find("PlayerStarship").transform;

void Update () Vector3 directiontoplayer= playertransformation.position-transform.position; directiontoplayer.normalize(); float movespeed=enemyspeed*time.deltatime; transform.position=transform.position +(directiontoplayer*movespeed); float playerdirectionx=this.transform.position.x -playertransformation.position.x; float playerdirectiony=this.transform.position.y -playertransformation.position.y; float angle=mathf.atan2(playerdirectiony,playerdirectionx *Mathf.Rad2Deg; this.transform.rotation= Quaternion.Euler(new Vector3(0,0,angle-90));

void OnCollisionEnter2D(Collision2D thecollision) if(thecollision.gameobject.name.contains("laser")) Laser l = thecollision.gameobject.getcomponent("laser") as Laser; energy -= l.laserpower; Destroy(theCollision.gameObject); if (energy <= 0) Destroy(this.gameObject);

Do obiektu EnemyStarship dodajemy Box Collider 2D. Dodajemy komponent Rigidbody 2D i ustawiamy Gravity Scale na 0. Analogicznie jak w przypadku obiektu laser, również z obiektu EnemyStarship wykonujemy prefab. Tworzymy pusty obiekt i zmieniamy jego nazwę na EnemyController.

Skrypt EnemyController.cs Tworzymy nowy skrypt i dodajemy go do obiektu EnemyController. private Transform playertransformation; private float timetocreateenemy = 0; private int currentnumberofenemies = 0; public Transform enemy; public float timebetweenenemies = 2.0f; public int maxenemies = 5; void Start () playertransformation = GameObject.Find("PlayerStarship").transform;

void Update () timetocreateenemy-=time.deltatime; if (timetocreateenemy <= 0 && currentnumberofenemies < maxenemies) float randdirection=random.range(0,360); float randdistance=random.range(5,10); float newenemypositionx=playertransformation.position.x Mathf.Cos((randDirection)*Mathf.Deg2Rad)*randDistance; float newenemypositiony=playertransformation.position.y (Mathf.Sin((randDirection)*Mathf.Deg2Rad)*randDistance) float playerdirectionx=newenemypositionx -playertransformation.position.x;

float playerdirectiony=newenemypositiony -playertransformation.position.y; float angle= Mathf.Atan2(playerDirectionY,playerDirectionX) *Mathf.Rad2Deg; Instantiate(enemy,new Vector3(newEnemyPositionX, newenemypositiony,0), Quaternion.Euler(new Vector3(0,0,angle-90))); currentnumberofenemies++; timetocreateenemy=timebetweenenemies; public void EnemyWasKilled() currentnumberofenemies--;

W oknie Inspector do zmiennej Enemy obiektu EnemyController przenosimy prefab EnemyStarship. Do skryptu Enemy.cs dopisujemy następujące linijki kodu (w instrukcji warunkowej if(energy <= 0)) EnemyController s = GameObject.Find("EnemyController").GetComponent("EnemyController") as EnemyController; s.enemywaskilled();

Ćwiczenie Na tym etapie gry jesteśmy w stanie poruszać naszą rakietą i unicestwiać wrogów. Proszę dodać możliwość strzelania przez rakiety przeciwnika. Każde trafienie powinno powodować zestrzelenie naszego pojazdu, tj. zniknięcie z planszy.