Postanowiłem trochę czasu poświęcić na unity zrealizować kolejny „prosty” tutorial. Tym razem o katapulcie.

Tym razem pomocne i źródłowe linki na początku:

Co jest zrobione.

Katapulta wyrzuca kulę w ścianę na której znajdują się tarcze w trzech kolorach.

Kod na Githubie  Katapulta projekt.

Co jest do zrobienia:

Lista poniżej będzie się wydłużać.

  1. Określenie sterowania, czyli możliwość zmiany masy kuli, siły wyrzucania
  2. Zmiana kamery na taką, która pozwoli zobaczyć w którym miejscu kula uderzyła w tarczę
  3. Wyświetlenie prędkości ruchu kuli, odległości na jaką spadła
  4. Animacja uderzenia w tarcze
  5. Zliczanie punktów za uderzenie w odpowiedni obszar
  6. Losowanie pozycji ściany z tarczą na platformie, na przycisk
  7. Ruch na boki katapulty
  8. Wzięcie pod uwagę siły wiatru
  9. Restart gry, powrót kuli na pozycje wyjściowe
  10. Kamera podążająca za kulą
  11. Ponowne wyrzucenie kuli
  12. Zrobienie prostego Menu, podpowiedzi na temat klawiszy
  13. Z powodu generowania pozycji celu na płaszczyźnie trzeba zmieniać pozycje celu kamery
  14. Mała refaktoryzacja metody losującej (nie mogłem wytrzymać)

Odp. 2

Wyszukanie kamer znajduje się w metodzie Start(). Wyświetlanie w konsoli tych informacji służy tylko jako pomoc.

Odp. 10

Kamera za kulą została wykonana ale kod wymaga poprawy, zrobiła się „ifologia stosowana”. Jak poprawie kod to wtedy zamieszczę.

Odp. 9

Kula po naciśnięciu klawisza „R” wraca na pozycje startowe ale nie jest idealnie jeszcze.

Przy okazji restartu pojawił się problem z ramieniem, które nie zawsze wraca do pozycji „wyjściowej”. Problem został rozwiązany za pomocą przekazania obiektu walca do kuli. Ponieważ to do walca przyczepione jest ramie. Za pierwszym podejściem zmieniałem pozycje ramienia i było to błędne. Wystarczy wrócić do rotacji startowej walca.

Dodatkowo ustawiono na pozycje startowe „hamulce” dla katapulty

 

Odp. 11

To okazało się najprostsze zadanie jak do tej pory gdyż w oryginalnym kodzie z yuotuba jest już napisana funkcja wyrzucająca kulę. Wystarczy ją tylko podpisać pod odpowiedni klawisz oraz wrzucić do metody Update().

Wyrzucanie kuli opakowałem w metodę ponieważ wiem, że będę zmieniał parametry, lepiej żeby metoda Update() była „czysta”.

Rozwiązanie nie jest idealne, trzeba dopracować.

Odp. 6

Losowanie pozycji ściany z celem na powierzchni platformy. Nie jest jeszcze idelane gdyż wartości są wpisane na stałe

Odp. 13

Pozycja kamery również się generuje. W moim przypadku problemem było zrozumienie do której pozycji powinienem się odnieść. Mur, który jest celem jest „dzieckiem” płaszczyzny na której się znajduje, więc powinienem określać pozycje lokalną.

Pozycja kamery jest na stałe ustawiona, mniejsza o 0.1 od pozycji muru.

Odp. 14

Proste! prawda?

W porównaniu do wcześniejszej wersji jest tu trochę więcej „paździerza”.

Lubię interfejsy, ale nie koniecznie przypisywanie stałych wartości. Stałe wartości w kodzie prowadzą w dłuższe perspektywie do błędu. Wartości powinny być wprowadzane z zewnątrz po to są parametry metod czy też właściwości klas. Są oczywiście odstępstwa.

Widzę teraz, że niepotrzebne są trzy osobne metody, wystarczy wywołąć jedną i dopisać w parametrze nazwę współrzednych których dotyczą warotści. Czyli kolejny krok refaktoryzacji.

Zapewne coś by się tu dało jeszcze uprościć, na razie wystarczy.

Dodałem jeszcze klasę statyczną, nie lubię ich ale na tę chwilę uznałem, że warto zapamiętać gdzieś wartości współrzędnych do losowania ściany.

 

 

Kategorie: Unity