Z uwagi na  coraz więcej kodu, część druga projektu ćwiczebnego.

Poniżej  wszystkie zadania:

  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 startowe
  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ć)
  15. Nowy hamulec ramienia katapulty
  16. Zmiana celu, na cel wiszący na sznurku
  17. Ściana którą da się zniszczyć
  18. Brama rusza się do przodu lub tyłu i nie wypada za plansze
  19. Losowanie pozycji bramy i celu zawieszonego na bramie

Część pierwsza zmagań z materią.

Odp. 7

Ten punkt zajął mi bardzo dużo czasu, na razie to są próby ale ruch podstawy jest zrobiony.

Na razie tylko podstawa, bez ograniczeń. Jeżeli będą ograniczenia ta metoda musi być rozbudowana.

Tym razem rusza się cały zestaw ale prace trwają nad ogranicznikami.

Ramie katapulty nie ma ustawionej rotacji, jest częścią walca (podstawy katapulty).

Dalej jest problem z hamulcami czyli ograniczeniem przemieszczania się ramienia katapulty.

Odp. 9

Restart, dotyczy również podstawy katapulty, gdyż ona też się obraca.

Restart powinien w tym wypadku pamiętać ostanie położenie całego zestawu ale to nie restart tylko powrót kuli do katapulty.

Odp. 18

Brama porusza się do przodu i tyłu pod wpływem naciśnięcia przycisku W – przód, S-tył

Bez pomocy bym tego nie dokona. Cóż nauka polega na tym, że uczymy się od innych.

Kod ograniczników jest legacy (mocno) ale działa. Refaktoryzacja w następnym kroku, bo jak wiadomo można refaktoryzować tylko działający kod.

Debugowanie pomogło w napisaniu tego paździerza.

Pierwszy krok refaktoryzacji

Zamiast tworzyć w metodzie nowy obiekt Vectora3, będzie on przekazywany do metody w parametrze. Prędkość wyciągnięta z wektora „velocity.x”.

Drugi krok refaktoryzacji

Kod,  metodę MovePosition wyciągnołem po za metodę MoveForwardObject. Jest to dość logiczne posunięcie gdyż miałem ją użytą w sześciu miejscach teraz mam dwie dodatkowe metody które mówią mi że obiekt przesuwa się do przodu lub do tyłu.

Trzeci krok refaktoryzacji

Umnieszczenie metod w jeden metodzie, dodałem parametr wyboru true/false.

Czwarty krok refaktoryzacji

Dodanie interfejsu z metodą MoveForwardBack

Dodanie konstruktora bezparametrowego

Piąty krok refkatoryzacji

Dodanie jeszcze jednego interfejsu i klasy rozwiązującej ten interfejs. Klasa posiada metodę MoveForwardObject, dodatkowo posiada parametr określający czas.

Plik GateMethods wygląda tak:

Jednie co nie jest jeszcze wystarczające to konstruktor, nad którym można by się pochylić. Po za tym w tym momencie można dodać testy i zacząć „zaślepiać” (mock) obiekty.

Odp. 3

Do sceny został dodany pusty obiekt z komponentem TextMesh, na którym za pomocą skryptu wyświetlam prędkość i masę kuli.

Wywołanie w metodzie Update()

Odp.12

Dodałem kolejny komponent TextMesh z rozpisaniem używanych klawiszy. Dodatkowo włączyłem go do spite który jest jako półprzeźroczyste tło dla tekstu.

Odp. 15

Poddałem refaktoryzacji kod sterujący ramieniem aktualnie wygląda następująco:

Kod odpowiedzialny za zmianę rotacji przesunięty do innej metody

Pozycje ograniczników wrzucone do słownika, wartość przypisywana w konstruktorze. Ale ten zapis powinien się docelowo zmienić gdyż nie powininen wartości trzymać w kodzie, a otrzymywać je z interfejsu w tym wypadku środowiska Unity. Zadanie na tym poziomie mojej wiedzy jeszczen nie takie oczywiste i proste. Trzymanie wartości w kodzie generuje kłopoty.

Refaktoryzajca kolejny krok.

 

Kategorie: Unity