Zbliżamy się do półmetku, pasowałoby scalić dotychczasową wiedzę w jakąś prostą grę na HoloLens. Chciałbym sobie powalczyć z jakimiś stworami, które zaatakują mnie w pokoju. Strzelałbym sobie do nich laserem albo hm… wyrzutnią rakiet, one też mogłby mnie atakować. Najwyżej… zginę zastrzelony. BTW czy można zginąć w HoloLens? Taka wizja na walkę w pokoju na początek wystarczy.
Pasowałoby jednak najpierw podszkolić się z samego Unity i pisania w nim gier. Rzuciłem okiem na kilka książek o Unity, całkiem dobrym wstępem wydaje się Unity for Absolute Beginners. Pokazuje sporo szczegółowych praktycznych kroków przy tworzeniu sceny z ogrodem, strachem na wróble, jakimiś dziwnymi stworzeniami (hm ni to świnia, królik, chomik)… Nie wiem czy jest tylko dla żółtodziobów, w każdym razie ukazuje sporo uporządkowanej wiedzy w oparciu o dość efektowną scenę i efekty, a nie każda książka jest taka. Eksperymentowałem coś z importem modelu i animowaniem go w trybie Humanoid. Odkryłem też polski portal http://mwin.pl/, który skupia się na Unity i grach, szczególnie interesujący wydaje się tam Unity3d FPS Tutorial złożony z kilkunastu odcinków. Jednak po jakimś czasie uznałem, że wejdę w temat przerabiając najpierw jakieś tutoriale z samego Unity. Jest tam esencja praktyki pokazywana na wideo. Najbardziej póki co przykuła moją uwagę gra Survival Shooter. Tam gracza reprezentuje biały skrzat ze strzelbą, a podążają za nim złe zombie, kojarzące mi się nieco… z misiem Uszatkiem.
Dziś napiszę trochę o tym, co zwróciło moja uwagę po wykonaniu 4 pierwszych części tutorialu:
Co prawda do HoloLens najbardziej przydatny myśle okaże się zombi z 4-tej części, ale wszędzie można się czegoś dowiedzieć.
I tak przykładowo, biały skrzat (gracz) jest wiązany z Animator Controller-em PlayerAC, do którego przekazywane są parametry na tranzycjach między stanami. Dzięki temu możemy potem z poziomu skryptów sterować przechodzeniem między stanami animacji. Hola, hola może bardziej po kolei. Jak utworzymy Animator Controller, przeciągniemy go na obiekt Player i potem wejdziemy w zakładkę Animator, to stany możemy łatwo dodać przeciągając elementy Death, Idle i Move z modelu Player. Kolor pomarańczowy oznacza stan domyślny, jeśli chcemy by był to inny stan niż pierwszy przez nas przeciągnięty wystarczy wybrać Set As Layer Default State w menu kontekstowym pożądanego stanu. Tranzycję tworzymy na stanie wybierając z menu kontekstowego Make Transition i przeciągając ją na wskazany stan docelowy. Parametry definiuje się w zakładce Parameters. W tym przypadku jest to IsWalking typu bool oraz Die typu Trigger. Teraz w inspektorze tranzycji można w sekcji Conditions wskazać parametry, od ktorych będzie zależne działanie przejścia.
Skrypt PlayerMovement podpięty pod obiekt Player dzięki linii:
anim.SetBool("IsWalking", walking);
powoduje, że obiekt animatora ustawia zmienną IsWalking, co wpływa na odpalenie animacji Move dla skrzata.
Zarówno skrzat, jak i zombi mają obiekty typu RigidBody i collider (kapsuła, a w przypadku zombi także sfera). Jak już wiemy pozwala to m.in na odbicia i wykrywanie kolizji. Najciekawszy jest jednak tutaj zupełnie dla mnie nowy element NavMeshAgent. To dzięki niemu wrogie nam zombi wie, gdzie jesteśmy i wie, jak podążać za nami!!! Zombi za nami idzie dzięki prostemu skryptowi EnemyMovement:
public class EnemyMovement : MonoBehaviour
{
Transform player;
UnityEngine.AI.NavMeshAgent nav;
void Awake ()
{
player = GameObject.FindGameObjectWithTag ("Player").transform;
nav = GetComponent <UnityEngine.AI.NavMeshAgent> ();
}
void Update ()
{
nav.SetDestination (player.position);
}
}
Co się przesunę choćby klawiszami S, W, A, D to zombi i tak do mnie przyjdzie po jakimś czasie dłuższym lub krótszym. Nieuchronnie zawsze do mnie dotrze. Robi się groźnie, a do dopiero początek. Przede mną walka z całą armią zombie i to na dodatek w moim własnym pokoju! Trzeba nabrać sił podczas świąt, by ta walka była wygrana.
Brak komentarzy:
Prześlij komentarz