Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Ustaw granice gry
- Krok 2: Dodawanie płyt i tworzenie kontrolerów
- Krok 3: Podłączanie Arduino do portu szeregowego
- Krok 4: Łączenie Unity z portem szeregowym
- Krok 5: Dodanie piłki
- Krok 6: Finalizacja gry
Wideo: Jak zrobić grę wieloosobową z kontrolerami Arduino: 6 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:27
Czy zastanawiałeś się kiedyś, jak twórcy gier tworzą niesamowite gry, w które ludzie na całym świecie lubią grać? Cóż, dzisiaj dam ci małą wskazówkę na ten temat, tworząc małą grę wieloosobową, która będzie kontrolowana przez kontroler Arduino, który również stworzysz. Więc zacznijmy.
Kieszonkowe dzieci
Będziesz potrzebować:
- Laptop
- Silnik jedności
- C# IDE, które współpracuje z Unity, takim jak Visual Studio lub Atom. (Będę używał kodu Visual Studio)
- 2X Arduino Nano
- 2X duża deska do chleba
- 2X mała deska do chleba
- Przełącznik 4X (przycisk)
- Rezystor 4X 200Ω
- 12X przewody połączeniowe z męskiego na męskie
- IDE Arduino
Będzie to pomocne, jeśli masz podstawową wiedzę na temat korzystania z Unity, jednak nie wpłynie to na twoje postępy, ponieważ zapoznasz się z nim podczas tworzenia gry.
Link do pobrania Unity Engine:
store.unity.com/download-nuo
Link do pobrania Visual Studio Code IDE:
code.visualstudio.com/download
Link do pobrania Arduino IDE:
www.arduino.cc/en/Main/Software
Krok 1: Ustaw granice gry
Przede wszystkim musisz pobrać unity
Gdy to zrobisz, możesz zacząć konfigurować widok gry.
Otwórz nowy projekt Unity, nazwij go i wybierz grę 2D.
Po otwarciu projektu zwróć uwagę, że istnieją 3 główne sekcje o nazwie
- Hierarchia (tutaj zostaną dodane wszystkie obiekty i szczegóły gry).
- Scena (gdzie ustawiasz widok gry).
- Gra (gdzie możesz sprawdzić, jak będzie wyglądać prawdziwa gra).
Zwróć uwagę, że pod hierarchią znajduje się twoja scena, a pod sceną jest „Główna kamera”. Po wybraniu kamery z hierarchii zostanie ona wybrana w scenie
(W prawdziwej grze wszystko będzie widoczne w obrębie tego aparatu).
Spójrz na zdjęcie 1
Nasza gra składa się z dwóch plansz, piłki, która się porusza, oraz granic, które ograniczają ruch plansz i piłki.
Zacznijmy od stworzenia granic.
- Aby utworzyć nowy obiekt gry, wybierz Assets>Create>Sprites>square (nadaj mu nazwę „prawa i lewa granica”) Spójrz na obrazek 2
- Przeciągnij i upuść prawą i lewą granicę do hierarchii, a na scenie pojawi się kwadrat.
- Ustaw jego pozycję w osi x na (5) „prawa i lewa granica”>inspektor>transformacja>pozycja>X. Spójrz na zdjęcie 3
- Następnie dostosuj jego skalę tak, aby była wystarczająco duża, aby pokryła granice aparatu (przeciągnij górną i dolną stronę kwadratu, aby go rozciągnąć).
- Dostosuj jego kolor „od prawej i lewej krawędzi”> inspektor> renderowanie sprite> kolor. Spójrz na zdjęcie 3
- Przewiń w dół inspektora i wybierz dodaj komponent, a następnie wpisz Rigidbody2D i naciśnij Enter, to w zasadzie doda fizykę do twojego obiektu gry, ponieważ daje mu wykrywanie masy, grawitacji i kolizji. Jednak nie potrzebujemy grawitacji w naszej grze, więc ustaw grawitację 0 zamiast 1. Będziesz także musiał zamrozić pozycję i rotację, aby granica nie poruszała się, gdy się zderzy. Spójrz na zdjęcie 4
- wybierz dodaj komponent, a następnie wpisz Box Collider 2D i naciśnij enter, aby dodać obszar wokół obiektu gry, w którym można wykryć kolizje. Spójrz na zdjęcie 4
- Teraz wybierz prawą i lewą granicę i naciśnij (ctrl+d), aby ją powielić.
- Zmień jego nazwę na „lewe obramowanie” i zmień nazwę pierwszego („prawa obramowanie”).
- Wybierz lewą ramkę i dostosuj jej pozycję w osi x do (-5) w ten sam sposób w kroku 3. Teraz masz prawą i lewą granicę.
Powtórz poprzednie 10 kroków z górną i dolną krawędzią i zmień pozycję y kwadratu zamiast pozycji x. Ostateczny podgląd powinien być podobny do tego na zdjęciu.
Spójrz na zdjęcie 5
Krok 2: Dodawanie płyt i tworzenie kontrolerów
Dodawanie tablic
Stwórz nowy obiekt gry i nazwij go graczem 1.
Dostosować:
- Skala: X (1,2), Y (0,15), Z(1)
- Pozycja: X(0), Y(-3,6), z(0)
- Dodaj BoxCollider2D
- Dodaj Rigidbody 2D i zamroź osie y i z.
Powiel (ctrl+d) i zmień nazwę odtwarzacza kopii 2.
Dostosować:
- Skala: X (1,2), Y (0,15), Z(1)
- Pozycja: X(0), Y(3,6), z(0)
- BoxCollider już tam będzie.
- Rigidbody 2D już tam będzie, a osie y i z będą już zamrożone.
Spójrz na zdjęcie 1
Tworzenie kontrolerów
Będziesz potrzebować:
- 2X Arduino Nano
- 2X duża deska do chleba
- 2X mała deska do chleba
- Przełącznik 4X (przycisk)
- Rezystor 4X
- 12X przewody połączeniowe z męskiego na męskie
Teraz spójrz na zdjęcia i mapowanie tablicy chlebowej, aby złożyć joysticki.
- Dołącz jeden układ Arduino Nano za pomocą małej płytki do chleba.
- przymocuj 2 przełączniki Tack na dużej tablicy do pieczenia chleba, jak pokazano na rysunku. Staraj się, aby prawa strona tablicy chlebowej była symetryczna do lewej, ponieważ dzięki temu joystick będzie wyglądał lepiej (możesz użyć 30 kolumny jako symetrii linia)
- Połącz lewy górny pin lewego przycisku z pinem 5V w Arduino na małej płytce do krojenia chleba (rzeczy, które są połączone z tą samą kolumną na płytce stykowej, są ze sobą połączone).
- Połącz prawy górny pin prawego przycisku z pinem 5V w Arduino.
- Połącz prawy dolny pin lewego przycisku z punktem na 31. kolumnie za pomocą rezystora.
- Połącz dolny lewy pin prawego przycisku z punktem na 29. kolumnie za pomocą rezystora.
- Połącz rezystory z pinem GND w Arduino.
- Połącz prawy górny pin lewego przycisku z pinem D3 w Arduino.
- Połącz lewy górny pin prawego przycisku z pinem D9 w Arduino.
- Teraz powtórz te kroki i utwórz drugi kontroler.
Krok 3: Podłączanie Arduino do portu szeregowego
Najpierw musisz zainstalować Arduino IDE.
Po ich zainstalowaniu możesz zacząć od stworzenia programu Arduino, który odbiera dane wejściowe z przycisków i przechowuje je w porcie szeregowym (port COM). Kiedy płytka Arduino jest podłączona do laptopa, system operacyjny automatycznie rozpoznaje płytkę jako port szeregowy, na który można wgrywać programy. Wartości przechowywane w porcie szeregowym można wykorzystać w kolejnym kroku, gdy połączymy Unity Engine z portem szeregowym.
Teraz połączmy Arduino z portem Serial.
Patrz na obrazki
- Podłącz Arduino do laptopa
- Narzędzia>Płytka>Arduino Nano
- Jeśli twój układ Arduino jest nowy (2018-2020) Narzędzia>Procesor>ATmega328P (Stary Bootloader).
- Jeśli twój układ Arduino nie jest nowy (przed 2018 r.) Narzędzia>Procesor>ATmega328P
- Narzędzia>Port>COM(niezależnie od numeru, w moim przypadku jest to 10). * Jest to port szeregowy, w którym będą przechowywane wartości.
- Skopiuj kod i wklej go w Arduino IDE i naciśnij ctrl+u, aby wgrać program.
- Powtórz z drugim Arduino. (podczas wykonywania kroku 5 upewnij się, że wybrałeś inny port COM, aby oba kontrolery nie były podłączone do tego samego portu szeregowego).
Kod:
pusta konfiguracja () {
Serial.początek(9600); pinMode(3, WEJŚCIE); //Nakazanie Arduino otrzymania sygnału wejściowego z pinu D3 pinMode(9, INPUT); //Powiedzenie Arduino, aby otrzymał dane wejściowe z pinu D9 } void loop() { if(digitalRead(3)==1){ /* Jeśli Arduino otrzyma dane wejściowe 1 Serial.write(1); z pinu 3 Wyjście wartości 1 na port szeregowy Serial.flush(); */ opóźnienie(2); } if(digitalRead(9)==1){ /* Jeśli Arduino otrzyma wejście 1 Serial.write(2); z pinu 9 Wyprowadź wartość 2 na port szeregowy Serial.flush(); */ opóźnienie(2); } }
Objaśnienie programu:
Ten kod po prostu pobiera dane wejściowe z pinu D3 i pinu D9 w Arduino, które są połączone z przyciskami. Przyciski są wciśnięte lub niewciśnięte, co oznacza, że odczyty, które są z nich pobierane, mają wartość 1 (wciśnięty) lub 0 (niewciśnięty). Jeśli wejście z prawego przycisku (od D9) jest 1 (naciśnięte), zapisz wartość 1 w porcie szeregowym. Jeśli wejście z lewego przycisku (z D3) jest 1 (naciśnięte), zapisz wartość 2 w porcie szeregowym.
Krok 4: Łączenie Unity z portem szeregowym
W tym kroku zidentyfikujemy port szeregowy w Unity, aby mógł odbierać dane wejściowe z Arduino po naciśnięciu przycisków. Zainstaluj kod programu Visual Studio na swoim laptopie. Następnie przejdź do Unity, wybierz gracza 1 z hierarchii, przewiń w dół i wybierz dodaj komponent i wpisz player1_motion, a następnie naciśnij enter. Spójrz na zdjęcie 1
Skrypt C# zostanie utworzony w inspektorze, kliknij go prawym przyciskiem myszy i wybierz edytuj skrypt, kod Visual Studio powinien się otworzyć i pokaże domyślny kod, który wygląda jak na obrazku 2.
Skopiuj następujący kod, a następnie zmień "SerialPort sp = new SerialPort("COM10", 9600);" z SerialPort sp = new SerialPort ("port COM, do którego podłączony jest twój Arduino", 9600); możesz go znaleźć, wracając do kodu Arduino i wybierając Narzędzia> Port> COM (niezależnie od tego, jaki numer się pojawi).
Kod:
za pomocą System. Collections;
za pomocą System. Collections. Generic; za pomocą UnityEngine; za pomocą System. IO. Ports; public class player1_motion: MonoBehaviour { float speed = 8; prywatna kwota do przeprowadzki; SerialPort sp = nowy SerialPort("COM10", 9600); // Start jest wywoływany przed pierwszą aktualizacją ramki void Start() { sp. Open(); sp. Czas odczytu = 1; } // Aktualizacja jest wywoływana raz na klatkę void Update() { numbertomove = speed*0.01f; if(sp. IsOpen){ try { moveObject(sp. ReadByte()); print(sp. ReadByte()); } catch(System. Exception){ } } } void moveObject(int Direction) { if(Direction == 1){ transform. Translate(Vector3.left*amounttomove, Space. World); } if(Kierunek == 2){ transform. Translate(Wektor3.right*ilośćdoruchu, Przestrzeń. Świat); } } }
Wyjaśnienie kodu:
Ten kod mówi unity, aby odbierać dane wejściowe z portu szeregowego (COM 10). Po naciśnięciu lewego przycisku Arduino wysyła wartość 1 do portu szeregowego, jeśli unity odbiera 1 z portu szeregowego, prędkość jest dodawana do obiektu gry „gracz 1” w lewo. Po naciśnięciu prawego przycisku Arduino wysyła wartość 2 do portu szeregowego, jeśli Unity odbiera 2 z portu szeregowego, prędkość jest dodawana do obiektu gry „gracz 1” we właściwym kierunku. jeśli port szeregowy nie otrzymuje wartości z portu szeregowego, prędkość nie jest dodawana w żadnym kierunku, dlatego płyta pozostaje nieruchoma.
Po skopiowaniu kodu naciśnij klawisz F5, aby skompilować i uruchomić kod. Wróć do jedności i naciśnij przycisk odtwarzania, gracz 1 powinien poruszać się w prawo, gdy naciśniesz w prawo i w lewo, gdy naciśniesz w lewo.
Teraz wykonaj te same kroki jeszcze raz, ale z odtwarzaczem 2 i upewnij się, że wpisałeś 'Dodaj komponent' player2_motion zamiast player1_motion i zidentyfikowałeś drugi port COM, do którego podłączony jest drugi kontroler, a nie ten sam port szeregowy.
Będziesz także musiał zmienić "public class player1_motion: MonoBehaviour" na "public class player2_motion: MonoBehaviour" w samym kodzie.
Krok 5: Dodanie piłki
- Dodaj nowy obiekt do gry, ale tym razem wybierz okrąg zamiast kwadratu.
- Zmień jego nazwę na „piłkę”.
- Przeciągnij i upuść w hierarchii.
- Dostosuj skalę (X:0.2 - Y:0.2 - Z: 0.2).
- Dodaj Rigidbody 2D i zamroź tylko oś Z.
- Zmień masę na 0,0001
- Zmień skalę grawitacji na 0.
- Dodaj Box Collider 2D.
- Przejdź do Zasoby>Utwórz>Materiał fizyczny 2D Spójrz na zdjęcie 1
- zmień jego nazwę na "odbijać"
- Zmień tarcie na zero od inspektora
- Zmień bounciness na 1 od inspektora
- Przeciągnij i upuść "odbicie" do Rigidbody 2D>Materiał Spójrz na zdjęcie 2
- Wybierz ponownie "piłkę" z hierarchii i przejdź do dodania komponentu i wpisz Ball_movement, a następnie naciśnij enter.
- Kliknij prawym przyciskiem myszy skrypt i wybierz edytuj skrypt.
- Skopiuj poniższy kod i naciśnij klawisz F5, aby go skompilować i uruchomić.
Kod:
za pomocą System. Collections;
za pomocą System. Collections. Generic; za pomocą UnityEngine; public class Ball_movement: MonoBehaviour { // Start jest wywoływany przed pierwszą aktualizacją klatki private float force = 2; void Start() { StartCoroutine(move()); } IEnumerator move() { wydajność return new WaitForSeconds(2); GetComponent(). AddForce(nowy Vector2(1f, 0.5f)*0.02f*force); } }
Wyjaśnienie kodu
Ten kod nadaje piłce prędkość w obu kierunkach w kierunku X i Y o tej samej wartości, co powoduje, że piłka porusza się pod kątem 45°. W kroku 8 dodaliśmy materiał fizyczny do piłki i zmieniliśmy jej sprężystość, co pozwala zachować ruch piłki przez cały czas gry.
Krok 6: Finalizacja gry
Teraz musimy umożliwić przegraną, jeśli uruchomisz grę, zauważysz, że kiedy piłka mija gracza 1 lub gracza 2, po prostu odbija się od granicy i nie jest to dokładnie to, czego potrzebujemy w naszej grze. Zamiast tego chcemy stworzyć licznik punktów, który zlicza punkty za każdym razem, gdy piłka zderzy się z górną lub dolną krawędzią i zresetuje pozycję piłki.
- Przeciągnij i upuść piłkę z Hierarchii do Projektu. Stworzyłeś gotową kulę, aby móc jej później użyć.
- Kliknij prawym przyciskiem myszy Hierarchię i wybierz Utwórz pustą. pojawi się pusty obiekt, zmień jego nazwę na odrodzenie piłki i zmień jego pozycję tak, aby była taka sama jak pozycja piłki.
- Kliknij prawym przyciskiem myszy na hierarchię i wybierz UI>>Tekst. Zauważ, że tekst towarzyszy kanwie pozycja tekstu w grze zależy od pozycji tekstu na kanwie, a nie w granicach naszej gry. (Spójrz na obrazek 1).
- Zmień położenie tekstu na dowolne miejsce.
- Powtórz kroki 3 i 4 ponownie dla wyniku drugiego gracza.
- Wpisz pierwszy tekst "Punkt gracza 1: 0", a drugi tekst "Punkt gracza 2: 0". (Spójrz na obrazek 2).
- Utwórz skrypt w górnej granicy o nazwie p1wins i skopiuj poniższy kod.
Kod:
za pomocą System. Collections;
za pomocą System. Collections. Generic; za pomocą UnityEngine; za pomocą UnityEngine. SceneManagement; za pomocą UnityEngine. UI; public class p1wins: MonoBehaviour { public Text score; public Transform ball_respawn; publiczna piłka GameObject; prywatny int p1 = 0; // Start jest wywoływany przed pierwszą aktualizacją klatki void Start() { } // Aktualizacja wywoływana jest raz na klatkę void Update() { score.text = "Gracz 1 Wynik:" + p1; } void OnCollisionEnter2D (Collision2D other) { if(other.gameObject.tag == "Piłka") { Destroy(other.gameObject); p1++; Instancja(piłka, odrodzenie_kulki.pozycja, odrodzenie_kulki.rotacja); } } }
8. Przeciągnij i upuść prefabrykat kulowy z projektu w kroku 1 do parametru Kula. (spójrz na zdjęcie 3)
9. Przeciągnij i upuść kulę odrodzenia z hierarchii do parametru Odrodzenie kuli. (spójrz na zdjęcie 3)
10. przeciągnij i upuść wynik gracza 1 z hierarchii do parametru Wynik. (spójrz na zdjęcie 3)
Wyjaśnienie kodu:
Kiedy piłka zderza się z górną krawędzią, zostaje zniszczona i odradza się ponownie w pozycji ball_respawn, którą przypisaliśmy w kroku 2. Celem uczynienia piłki prefabrykatem jest możliwość odrodzenia się ze wszystkimi jej cechami, w przeciwnym razie, gdybyśmy użyli piłki z hierarchii odrodzi się, ale się nie poruszy. Również, gdy piłka zderza się z górną krawędzią, wartość, która jest pierwotnie równa 0, nazywana p1 zwiększa się o 1. wartość ta jest wyświetlana jako tekst, więc gdy piłka zderza się z górną krawędzią, wynik gracza 1 wzrasta o 1.
Teraz wykonaj kroki 7, 8, 9 i 10 dla dolnej granicy
w kroku 7 utwórz skrypt o nazwie p2wins i zamiast tego skopiuj poniższy kod.
w kroku 10 przeciągnij i upuść wynik gracza 2 z hierarchii do parametru Wynik.
Kod:
za pomocą System. Collections;
za pomocą System. Collections. Generic; za pomocą UnityEngine; za pomocą UnityEngine. SceneManagement; za pomocą UnityEngine. UI; public class p2wins: MonoBehaviour { public Text score; public Transform ball_respawn; publiczna piłka GameObject; prywatny int p2 = 0; // Start jest wywoływany przed pierwszą aktualizacją klatki void Start() { } // Aktualizacja jest wywoływana raz na klatkę void Update() { score.text = "Gracz 2 Wynik:" + p2; } void OnCollisionEnter2D (Collision2D other) { if(other.gameObject.tag == "Piłka") { Destroy(other.gameObject); p2++; Instancja(piłka, odrodzenie_kulki.pozycja, odrodzenie_kulki.rotacja); } } }
Zalecana:
Jak zrobić grę karcianą na Raspberry Pi: 8 kroków
Jak zrobić grę karcianą na Raspberry Pi: Celem tego jest stworzenie gry na Raspberry Pi przy użyciu muzyki, przycisków, świateł i brzęczyka! gra nazywa się Aces, a celem jest zbliżenie się do 21 bez przekraczania poziomu Krok 1: Przygotowanie Raspberry Pi Zdobądź raspberry pi i
Jak zrobić grę Microbit: 25 kroków
Jak zrobić grę Microbit: Cześć, nazywam się Mohammed i w tej instrukcji pokażę ci, jak krok po kroku kodować grę mikrobitową za pomocą edytora bloków, gra jest trochę jak Tetris
Jak zrobić grę w kółko i krzyżyk za pomocą Swift z Xcode: 5 kroków
Jak zrobić grę w kółko i krzyżyk za pomocą Swift z Xcode: W tym samouczku Swift pokażę, jak stworzyć aplikację w kółko i krzyżyk. Ta aplikacja jest niezwykle prosta i jest świetnym projektem dla każdego początkującego. Podzielę samouczek na trzy kroki:1. Tworzenie obiektów2. Łączenie obiektów w kod3. C
Jak zrobić grę CMD! Bezpłatne pobieranie i kopiowanie kodu!: 6 kroków
Jak zrobić grę CMD! Bezpłatne pobieranie i kopiowanie kodu!: Zrobiłem tę niesamowitą grę CMD/BATCH Bezpłatne pobieranie i kopiowanie kodu
Jak zrobić grę wideo Arduino: 5 kroków
Jak zrobić grę wideo Arduino: W tej instrukcji dowiesz się, jak stworzyć prostą grę wideo za pomocą Arduino. To będą najlepsze projekty hobbystyczne dla dzieci. Zaczynajmy