Programowanie Unity 3D - wyjaśnienie działania kodu

0

Cześć

Mam podstawy programowania w C++ (znam też strukturę javy), moja wiedza odpowiada kursowi (do poziomu 4) ze strony http://cpp0x.pl/kursy/Kurs-C++/1

Mam mało praktyki bo czasami jak chce coś napisać z głowy to muszę wrócić do niektórych z lekcji.
Całe te podwaliny pod programowanie w unity 3d. Pomimo podstaw nie rozumiem dużej części kodu, który chciał bym wykorzystać, np:

    // Moves object according to finger movement on the screen
    var speed : float = 1;
    function Update () {
    if (Input.touchCount > 0 &&
    Input.GetTouch(0).phase == TouchPhase.Moved) {
     
    // Get movement of the finger since last frame
    var touchDeltaPosition:Vector2 = Input.GetTouch(0).deltaPosition;
     
    // Move object across XY plane
    transform.Translate (touchDeltaPosition.x * speed,
    touchDeltaPosition.y * speed, 0);
    }}

Komentarze pozwalają mi ogarnąć co za co odpowiada ale nie rozumiem poszczególnych linijek kodu.
Może znajdzie się ktoś na forum co poda mi jakieś konkretne linki do dokumentacji albo innych poradników?

Dodam tylko, że ciężko przyswajam programowanie ale mam zacięcie - chodzi o to, że czasami muszę mieć wytłumaczone jak dla dziecka z przedszkola.

1

Może http://helion.pl/ksiazki/projektowanie-gier-w-srodowisku-unity-3-x-will-goldstone,prgun3.htm ? W bibliotekach ta książka bywa, i tłumaczą jak dziecku :P Co rzadko bywa w tego typu ksiazkach (Totalnie od podstaw silnika)

0

Na pewno poszukam po bibliotekach.
Często w poradnikach spotykam się z pokazaniem jak coś zrobić w unity bez omawiania szczegółów. Walną jakiś kod powiedzą za co odpowiada i na tym koniec - strasznie mnie to demotywuje.

0

Tak w ogóle, wszystko zależy co jest twoim problemem:
Jeżeli widzisz nawiasy i w środku jakiś ciąg znaków i nie jesteś w stanie powiedzieć, że to funkcja no to nie znasz podstaw podstaw programowania lub takie twory

Input.touchCount 

Akurat to co to jest to się nie domyślam:

  var touchDeltaPosition:Vector2

poza tym ze to jakaś zmienna to dalej "Vector2" to jakiś kontener!?

Btw. do nauki na razie powinno wystarczyć ci to co jest na głównej stronie unity. Ale jeśli nie rozróżniasz funkcji obiektu klasy lub zmiennej no to wracaj do nauki C/C++ ze strony co podałeś.

EDIT: dobra ogarnąłem w C# unitowskim dziwinie deklaruje się typ zmiennych ;p

0
woks napisał(a):

Komentarze pozwalają mi ogarnąć co za co odpowiada ale nie rozumiem poszczególnych linijek kodu.

Świetnie - odkryłeś znaczenie komentarzy w kodzie. My też nie wiemy co dokładnie oznaczają bo to zależy od reszty kodu.
Doświadczenie jednak pozwala się domyśleć większości, a żeby do niego dojść trzeba korzystać z dokumentacji

No więc w pierwszej linijce masz jakąś zmienną którą wstępnie ustawiasz na 1
Masz metodę Update która będzie się wywoływać z każdą klatką obrazu
W pierwszej linijce podejrzewam że pobierasz ilość dotknięć na wejściu (Input.touchCount) czyli po prostu liczysz ile paluchów dotyka ekranu smartfonu
Funkcją GetTouch możesz zapewne pobrać szczegóły dotyczące dotknięcia
Aplikacja zakłada że będziesz obsługiwał ją tylko jednym palcem bo od razu sprawdza czy pierwszy palec (GetTouch(0)) jest w fazie ruchu phase == TouchPhase.Moved - czyli po prostu czy poruszyłeś palcem który pierwszy dotknął ekranu (ponieważ jest to unity to prawdopodobnie działa to też na kliknięcia myszką)

Vector2 to wektor dwuwymiarowy - czyli po prostu dwie zmienne oznaczające "x" i "y", ale owinięte w specjalną klasę która pozwala na łatwe operacje na wektorach
Tu wkracza czysta matematyka - proponuję pouczyć się o operacjach na wektorach oraz macierzach
Mi kiedyś wiele pomogła ta stronka http://www.riemers.net/eng/ExtraReading/matrices_geometrical.php

No więc pobierasz do tego wektora deltę przesunięcia Input.GetTouch(0).deltaPosition;
Pojęcie delta pewnie miałeś w podstawówce, ale przypominam że oznacza przyrost czegość
A więc w wektorze o nazwie touchDeltaPosition masz teraz współrzędne przesunięcia względem poprzedniej pozycji (może być ujemna)

Na końcu dokonujesz translacji czegoś o nazwie transform - domyślam się że macierz
(translacja czyli przesunięcie)

transform.Translate (touchDeltaPosition.x * speed, touchDeltaPosition.y * speed, 0);

Macierze są tak magiczne że możesz w nich składować różne przekształcenia (typu obrót, przesunięcie, skalowanie) a potem wystarczy tylko pomnożyć macierz * współrzędne obiektu żeby ten obiekt przekształcić

A więc przesuwasz obiekt o wektor przesunięcia pomnożony * prędkość (speed).
0 to ilość o jaką przesuwasz obiekt "w głąb" - a więc w kierunku do lub od kamery - w tym przypadku wpisujesz "0" czyli obiekt będzie w tej samej odłegości (prawdopodobnie aplikacja 2D).

Nie zmieniasz w tym kodzie prędkości - domyślam się że jest zmieniana gdzieś dalej, na przykład po dłuższym przytrzymaniu możesz ją zwiększać - w ten sposób im dłużej przytrzymasz palec w danym kierunku tym szybciej będzie się poruszał obiekt.

Brakuje tu też obsługi czasu - powinno policzyć się czas jaki minął od ostatniego wywołania Update a następnie zeskalować ruch tak żeby był zależny od czasu - w ten sposób obiekt będzie się przesuwał z tą samą prędkością urządzieniach o różnych parametrach

woks napisał(a):

Może znajdzie się ktoś na forum co poda mi jakieś konkretne linki do dokumentacji albo innych poradników?

dostęp do tajemnej dokumentacji można dostać wpisując w google "unity documentation", ale proszę:
http://docs.unity3d.com/Manual/EventFunctions.html

0

pupfa dziękuję za obszerny opis. Dokumentacje sam znalazłem ale czytanie jej po angielsku mija się chyba z celem gdzie musiał bym pewnie czytać po kilka razy polską wersję, żeby zrozumieć o co chodzi.
michu45 znalazłem dostępny kawałek książki w sieci, którą poleciłeś i to chyba będzie coś dla mnie.

1

Unity ma wlasne tutoriale nawet jezeli chodzi o jezyk
Ty co wkleiles to jest javascript.
Tutoriali w necie jest na peczki

Sprobuj zrobic jakas prosta aplikacje. Nie gre, ale aplikacje. Np napisz proste menu gdzie masz slidery do podglaszania przyciszania czy dropdown etc

Dlaczego to wazne? Nauczysz sie podstaw unity a bedziesz mial cos dobrego juz dla swojej gry.

W unity jest bardzo proste
GameObject jest KONTENEREM na COMPONENTY. Componenty definiuja zachowanie obiektu.

Angielski to jest mus przy programowaniu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1