Paintball Arena. Prototyp – kolizja gracza z przeszkodą. #dajsiepoznac

Siemanko

W poprzedniej części poruszaliśmy trochę graczem. Jednak wtedy gracz mógł przechodzić również przez przeszkody co jest oczywiście zjawiskiem niepożądanym. Dziś temu zaradzimy.

Komponent Collider2D

Collider2D to komponent, który pozwala na kolizję między obiektami gry i ich obsługę. Na tę chwilę wymagane jest aby gracz nie mógł przejść przez przeszkode czyli aby się na niej zatrzymał. Jest kilka klas Collidera w zależności od kształtu obiektu gry. Dla obiektu gracza użyłem CircleCollider2D natomiast dla przeszkód BoxCollider2D. Nazwy mówią same za siebie. W naszym przypadku ważne jest aby collidery obiektów przeszkód miały ustawioną wartość IsKinematic na true. Jeśli tego nie zrobimy to to obiekty przeszkód zaczną się przemieszczać po kolizji, a tego nie chcemy bo balony są przecież mocno zaśledziowane w ziemii 😉

[RequireComponent(typeof(BoxCollider2D))]
public class BunkerBase : Unit
{
	private BoxCollider2D BoxCollider { get { return GetComponent(); } }
	protected override void Start()
	{
		Rigid.isKinematic = true;
		base.Start();
	}
}

Podsumowanie

Możemy już się poruszać i chować za balonami. To może teraz by coś postrzelać? 🙂

Pjona!

Reklamy

Paintball Arena. Prototyp – poruszanie gracza. #dajsiepoznac

Siemanko

Dziś poruszamy trochę tą czerwoną kropką, tffu, graczem 🙂

Klasa MonoBehaviour

MonoBehaviour to klasa, która w Unity jest bazową klasą dla obiektów gry i zawiera wiele metod, które są wywoływane przez silnik Unity w trakcie wykonywanie programu. Jedną z nich jest metoda Update, która jest wywoływana przy każdej klatce gry.

Komponent RigidBody2d

Jest to komponent, który po dodaniu go do obiektu gry umożliwia np. poruszanie nim. My oczywiście chcemy się poruszać w każdym kierunku za pomocą strzałek i ew. klawiszami WSAD. W tym celu zaimplementowałem metodę Update w skrypcie dla gracza, w której zmieniam „velocity” komponentu RigidBody2d w opowiedzi na naciśnięte przyciski. Kod jest bardzo krótki.

private float speed = 100;
protected void Update()
{
	var vector = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
	vector *= Time.deltaTime;
	vector *= speed;

	Rigid.velocity = vector;
}

Dzięki temu zabiegowi obiektem możemy poruszać.

www-gifcreator-me_iw9dbt

Podsumowanie

W następnym wpisie kolizja z balonem.

Pjona!

Paintball Arena. Prototyp – scena i obiekty gry. #dajsiepoznac

Siemanko.

W dzisiejszym odcinku scena i obiekty gry. W repo jest branch „Prototype” gdzie będę wrzucał wszystkie próbne kody itp. Nie będzie to ani ładne, ani zgrabne ale od tego jest prototyp. Jak ogarnę wszystkie funkcjonalności to wtedy utworzę nowy projekt, który będę już pisał „produkcyjnie” i kod będzie lądował na masterze.

Scena

Jest to wszystko co widzi gracz. Tło, obiekty ruchome jak i nieruchome to wszystko jest sceną.

Obiekty gry

Wszystko co dodamy do sceny będzie to „game object”. Każdy game object może posiadać wiele komponentów, z których najwazniejszy to script, który nada życiu obiektowi.

scene

go

Game object i jego kilka komponentów

Demo

A tak wyglada na tę chwilę gra. Przepiękna nieprawdaż? 🙂

gra

Aaach gdyby na wszystkich polach w PL była taka zielona trawka 😉

Na scenie z zielonym tłem jest 8 obiektów gry (game objects) z czego 7 to przeszkody, a jeden (czerwona kropka) to zawodnik.

Podsumowanie

W następnym wpisie wprawimy tę czerwoną kropkę w ruch! 🙂

Pjona!

Opis sceny – Paintball Arena #dajsiepoznac

Siemanko

Dziś przybliżę nieco jak będzie wyglądać scena gry.

Perspektywa

Widok będzie z góry w formacie 4:3 gdzie na dole i na górze sceny będą bazy (miejsca startu drużyn). Na polu będą rozmieszczone obiekty przeszkód (balony) o różnych wymiarach i kształtach. W realu balony są niższe i wyższe co przy widoku z góry będzie słabo widoczne ale grający w paintball będą doskonale wiedzieli. To oczywiście sprawia problem bo na jednej przeszkodzie możemy być całkowicie zasłonięci, natomiast na innej nie, więc będę musiał jakoś sprytnie to ogarnąć żeby przy widoku z góry kulki odbijały się od jednej przeszkody natomiast przez inną przelatywały i trafiały gracza. Druga sprawa to pozycja gracza – stojącą, kucająca czy wreszcie leżąca na wężu (podłużny balon) – jeszcze nie mam pomysłu ale jestem pewien, że wyjdzie „w praniu”.

wpbo

Zdjęcie pochodzi z profilu fb organizacji WPBO

 

Tak mniej więcej będzie wyglądać scena – oczywiście będą na niej zawodnicy.

Pjona!

Start DSP 2017. Krótki opis projektu Paintball Arena.

Siemanko.

Dziś startuje kolejna (moja druga) edycja konkursu „Daj się poznać” organizowanego przez Macieja Aniserowicza. W poprzedniej edycji za cel postawiłem  sobie napisanie aplikacji mobilnej (android) oraz serwerowej udostępniającej dla niej WebApi. Wiele się nauczyłem i ostatnio nawet to zajebiście zaprocentowało, ale o tym kiedy indziej. Dziś kilka zdań na temat tego co chcę zrobić w tym roku.

Co?

Paintball Arena. Gierka 2D, w której będzie można pograć w paintball.

Jak?

Unity.

Po co?

Dla jaj! 😉

Tak na serio to zawsze mnie intrygowało jak się robi gry. To jest na pewno inny sposób myślenia i programowania więc mam nadzieję poszerzyć horyzonty. A dlaczego paintball? Ponieważ jest to moja pasja na równi z kodowaniem – gram w drużynie Grim Reapers.

W kolejnych postach będę przybliżał jak będzie wyglądać scena, obiekty, sterowanie i w ogóle o co będzie kaman.

Pjona!

Kolejna edycja – kolejne wyzwanie! :)

Siemanko

Z początkiem lutego wystartowała rejestracja do kolejnej edycji konkursu „Daj się poznać”. Jesli nie wiesz co to, to odsyłam Cię do źródła. W poprzedniej edycji wytrwałem do końca w blogowaniu i kodowaniu, i co więcej, aplikacja, którą rozwijałem znalazła się w sklepie google play. Co prawda długo później po zakończeniu ale jednak 🙂 Traktuje ten konkurs jako świetny bodziec do tego aby nauczyć się czegoś nowego na co zwykle nie ma czasu, dlatego też dziś zarejestrowałem się do tegorocznej edycji! 🙂

Co tym razem?

Co to za programista, który żadnej gry nie napisał? No właśnie, dlatego chcę napisać prostą gierkę 2D, w której będzie można pograć w paintball! 🙂 Najchętniej poszedłbym w kierunku opcji multiplayer aby można było tłuc przez sieć, ale zobaczymy jak to będzie szło gdyż jak dotąd nie miałem styczności z programowaniem gier. Gierkę będę robił w Unity.

Od marca będą pojawiać się posty na temat tego jak wejść w świat robienia gierek nie mając z tym wcześniej kontaktu. Natomiast na githubie będzie lądował kodzik.

Pjona!

 

Zewnętrzna paczka do obsługi autentykacji w aplikacjach Asp.Net Core.

Siemanko.

Coraz częściej znajomi pytają się mnie czy nie zrobiłbym im stronki. Oczywiście bez żadnych fajerwerków, ale chcieli by mieć możliwość edycji treści, a więc oprócz statycznej stronki trzeba zrobić jakiś CMS’ik. Jak już ktoś ma edytowac content to dobrze by było gdyby to była osoba, która ma do tego prawo, a nie każdy kto wejdzie na odpowiedni url 😉 Dlatego potrzebna jest autentykacja. Oczywiście jest gotowe rozwiązanie o nazwie Microsoft.Identity, ale wymaga ono bazy danych i ogólnie jest to wyciąganie armaty na komara. Z kolei za każdym razem robić obsługę autentykacji dla każdej aplikacji też by mi się nie chciało (lenistwo) dlatego pomyślałem, że napiszę coś zewnętrznego w class library, spakuję w paczke i wrzucę do nugeta. W taki sposób, w kilka kliknięć i kilka linijek kodu będe miał rozwiązaną obsługę autentykacji (oczywiście na prostym poziomie).

Funkcjonalności

Plan jest taki aby konfiguracja wymagała dodania jednej linijki kodu w klasie Startup.cs oraz jednej linijki przy logowaniu. Będzię się to wiązało z doklejeniem ciasteczka zawierającego token JWT oraz jego validacją w middleware tuż przed wejściem do MVC. W ten sposób po sprawdzeniu property User.Identity.IsAuthenticated bedę wiedział czy user jest zalogowany czy nie. Planuje także dorobic obsługę delegata, który będzie uzupełniał User.Identity o odpowiednie dla danej aplikacji dane z tokena (nazwa usera, uprawnienia, itp.). To jak go będę logował to juz zupełnie inna sprawa (czy bedę sprawdzał w bazie, w pliku, w innej aplikacji – to już inna bajka). Biblioteczka będzie jedynie validowała wchodzące requesty oraz tworzyła i doklejała ciasteczko do response.

Kodzik

Kodzik wrzuciłem na github’a.

Pjona!