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

Programowanie Unity 3D - wyjaśnienie działania kodu
WO
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:16
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:

Kopiuj
    // 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.

edytowany 3x, ostatnio: flowCRANE
flowCRANE
Tytułuj sensowniej wątki
MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:280
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)

edytowany 2x, ostatnio: MoorfoxD
WO
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:16
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.

edytowany 1x, ostatnio: flowCRANE
MD
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 8 lat
  • Postów:280
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

Kopiuj
Input.touchCount 

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

Kopiuj
  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

edytowany 3x, ostatnio: MoorfoxD
Zobacz pozostałe 8 komentarzy
MD
jeszcze mi udowodnij, że jest konstrukcja typu var touchDeltaPosition:Vector2 ;p
n0name_l
C# nie, F# ma let variable: Type = ... no i Scala ma var/val/def variable: Type = ...
Azarien
Microsoftowy kompilator C# jest już open source, można zaimplementować taką składnię ;-)
MD
Pytanie podobne do tego co ty zadałeś kiedyś z miotłą czy jeśli zaimplementuje w kompilatorze C# funkcjonalność var nazwazmiennej:zmienna to nadal będzie kompilator C# czy kompilator mojego wymyślnego języka i czy moja funkcjonalność stanie się częścią języka
Azarien
pytanie o miotle było cytatem, z którego pozwoliłem sobie wyciąć konkluzję ;-) Question: if you take a broom and replace the handle, and then later replace the brush – and you do it over and over again – is it still the same broom? Answer: no, of course it isn’t, but you can still sweep the floor
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

WO
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 4 lata
  • Postów:16
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.

fasadin
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
  • Postów:4882
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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)