Warsztat.GDCompo!ProjektyMediaArtykułyQ&AForumOferty pracyPobieranie

Opisz napotkaną sytuację, a redakcja niezwłocznie znajdzie rozwiązanie!

wyślij anuluj

21. Ćwiczenia 2

Tekst został importowany z Warsztatowych artykułów. Jego oryginalnym autorem jest Grzegorz Żak. Jeżeli został importowany poprawnie, usuń ten szablon!

Pora na kilka założeń co ma znajdować się na mapce:
-ma to być wyspa otoczona morzem
-przez wyspę ma przepływać rzeka
-na wyspie ma znajdować góra i pagórek
-na wyspie znajdzie sie jeden płaskowyż
-wyspa musi posiadać plażę
-porośnięta ma być palmami i trawą
-na wyspie będzie niewielkie jeziorko
-teren musi być oteksturowany

Import Assetów Terenu
Otwórz Unity.
Wybierz kartę "Create New Project"
Za pomocą "Browse..." możesz zmienić domyślą lokalizację.
W polu "Import the following packages" wybierz paczki Assetów które chcesz zaimportować.
W naszym przypadku:
-Skyboxes
-Terrain Assets
-Water(Basic lub Pro jeśli posiadasz pełną wersję)
-Character Controller
Następnie kliknij "Create"
Nastąpi import potrzebnych nam Assetów.
W zależności od szybkości komputera może to chwilę potrwać.
Zapisz scenę jako "teren"
Standardowa paczka Assetów terenu w Unity 3.X posiada 2 rodzaje trawy(grass), 4 tekstury terenu i jedno drzewo(tree).
Jeśli chcesz większą ilość elementów terenu możesz pobrac tą paczkę Assetów i zaimportować ją:
http://unity3d.com/support/resources/assets/terrain-assets


TWORZENIE TERENU

Tworzenie terenu i podstawowe ustawienia
Zacznijmy od stworzenia terenu:
Terrain >> Create Terrain
Standardowo teren posiada wymiary 2000 x 2000 x 600[units]
Zmniejszmy szerokość i długość do 500[units]
Zaznacz teren w Hierarchy i wybierz z menu:
Terrain >> Set Resolution
W polu "Terrain Width" i "Terrain Length" wpisz 500.
Kliknij "Set Resolution", albo "Import" jeśli posiadasz starszą wersję edytora.
Teren pomniejszy się.



MODELOWANIE

Podwyższenie terenu
Teraz użyjmy opcji Flatten.
Standardowo opcja ta służy do spłaszczania calego terenu do określonej wysokości.
Nam posłuży do łatwego podwyższenia terenu na samym wstępie, tak żeby można było potem modelować teren w dół np. żeby zrobic koryto rzeki.
Zaznacz teren i wybierz
Terrain >> Flatten Heightmap...
Wpisz wartość 30.
Zauważysz że teren podniósł się do góry(o 30 jednostek).
Dopiero podwyższonemu terenowi można zmniejszać wysokość za pomocą narzędzi w Inspectorze Terenu.

Zarys wyspy
Skorzystamy z "Scene Gizmo" znajdującego się w górnym prawym rogu "Scene View".
Kliknij na odnogę "Y" Scene Gizmo, żeby uzyskać obraz z góry.
Zaznacz teren i w Inspectorze wybierz pierwsze narzędzie "Rise/Lower Terrain".
Wybierz z palety Brushes drugi pędzel.
Pierwszy jest za mały, a kolejne mają zbyt małe stopniowanie wzrostu na krawędziach pędzla.
Brush Size (rozmiar pędzla) i Opacity (szybkość zmian) ustaw suwakiem na maksimum (100).
Pamiętaj że poziom terenu wynosi teraz 30. Poziom dna morza będzie wynosić blisko 0.
Lewym przyciskiem myszy jednocześnie przytrzymyjąc Shift obniż teren do 0 na krawedziach całego terenu formując podstawowy kształt wyspy.
t1.JPG

Koryto rzeki
Rzeka nie powinna być zbyt głęboka i nie powinno być na jej dnie dużych różnic wysokości.
Zaznacz teren i w Inspectorze wybierz narzędzie "Paint Height" służące do malowania pędzlem aż do uzyskania wskazanej wysokości.
Załóżmy że lustro wody będzie na wysokości 20 jednostek, a głębokość rzeki od lustra wody to 1.5 jedostki.
Czyli ustalamy dno rzeki na wysokości 18.5 (20-1.5) jednostki.
W polu Height (wysokość) wpisujemy 18.5, Opacity i Brush Size na 60.
Lewym przyciskiem myszy przejeżdżamy powoli przez środek terenu tworząc koryto rzeki.
t2.JPG

Plaża
W częsci wyspy na dnie morza gdzie pozostało sporo pustego miejsca można zrobić plażę.
Użyjemy do tego tego samego narzędzia co przy tworzeniu koryta rzeki.
Lustro wody jest na wysokości 20 jednostek.
Plaża musi być minimalnie wyżej żeby tekstury wody i terenu nie przenikały się nawzajem więc ustalmy wysokość plaży na 20.05 jednostek.
t3.JPG

Płaskowyż
Nadal korzystając z tego samego narzędzia stworzymy płaskowyż.
Parametr Height ustal na 45 jednostek, czyli jego rzeczywista wysokość będzie wynosić 15 (45-30) jednostek.
I zacznij rysować owalny kształt na terenie tak jak na poniższym screenie.
t4.JPG

Pagórek
Do stworzenia pagórka skorzystamy z narzędzia "Raise/Lower Terrain".
Powróćmy do widoku perspektywistycznego klikając na kwadrat w "Scene Gizmo" i ustalamy kamerę tak żeby łatwo było nam modelować teren.
Skorzystajmy z pierwszego pędzla. Rozmiar ustalmy na 76, a szybkość zmian na 18.
Pagórek modelujemy najlepiej pojedynczymi kliknięciami za każdym razem przesuwając myszkę trochę w bok.
Szybkość zmian (opacity) jest mała, a stopniowanie wzrostu na krawędziach pędzla jest duże, więc możemy dzięki temu tworzyć w łatwy sposób niestrome pagórki.
Dzięki temu zabiegowi przy zwiększonym trochę "Opacity" można także wymodelować góry przeznaczone do chodzenia po nich.
t5.JPG


Góra
Teraz pokażę jak zrobić górę o ciekawym wyglądzie.
Niezmieniaj wartości parametrów.
Wybierz piąty pędzel w pierwszym rzędzie.
Zacznij malować niewysoką podstawę góry bez puszczania lewego przycisku myszy.
Gdy już masz stworzoną niewysoką podstawę góry o wysokości podobnej do pagórka najedź na środek podstawy góry, naciśnij ponownie lewy przycisk myszy i wykonuj niewielkie ruchy myszką tak żeby stworzyć szczyt góry.
Czynność tą wkonuj aż do uzyskania satysfakcjonującej wysokości.
W razie gdy uznasz że coś poszło nie tak, możesz skorzystać kilka razy w razie potrzeby z kombinacji "CTLR+Z" żeby cofnąć zmiany.
t6.JPG

Jeziorko
Wybierz drugi pędzel. Zmniejsz jego Opacity do 10.
Trzymając cały czas SHIFT, pojedynczymi kliknięciami kształtuj jezioro.
Pamiętaj, że jezioro nie może być zbyt płytkie, bo woda będzie dopiero na poziomie 20 jednostek.
Przy narzędziu "Raise / Lower Terrain" czasem zdarzają się pęknięcia terenu co jest normalne dla Unity.
Wtedy poprostu trzeba użyć któregoś z narzędzi do modelowania jeszcze raz i pęknięcie zniknie.
t7.JPG


Zejście do morza
Użytkownik powinien mieć możliwość zejścia do morza z kilku stron.
Żeby było szybciej zróbmy takie zejście jedynie przy rzece.
Wysokość dna rzeki to 18.5 jednostki.
Zróbmy za pomocą narzędzia "Paint height" schodki do dna morza.
Ustawmy "Brush Size" na 10, Opacity na 100 i wybierzmy pierwszy pędzel.
Rysujemy schodki kolejno 15, 13, 11, 9, 6.5, 4.5, 3, 2, 1 jednostek.
t8.JPG
Teraz wykorzystajmy narzędzie "Smooth Height" do wygładzenia zejścia.
Ustaw Brush Size na 12, a Opacity na 100 i przejedź kilka razy wolnymi ruchamy pędzlem całe zejście.
Teren się wygładził i zniknęły schodki.
t9.JPG


TEKSTUROWANIE

Pierwsza tekstura
Kliknij na teren. Wybierz narzędzie "Paint Texture".
Naciśnij "Edit Textures..." i wybierz "Add Texture..."
Standardowo cały teren ma być pokryty trawą więc jako pierwszą wybieramy teksturę trawy.
Naciśnij kropkę po prawo od napisu "Splat" i wybierz teksturę "Grass (Hill)".
"Title Size X" i "Title Size Y" ustaw na 8, żeby pomniejszyć prostokąty trawy, co polepszy efekt.
Kliknij "Apply".
Teren pokrył się zieloną teksturą.
t10.JPG

Kolejne tekstury
Powtórz czynność 2 razy żeby pobrać tekstury:
Good Dirt, Cliff (Layered Rock)

Malowanie teksturami
W Inspectorze terenu zaznacz teksturę piasku.
Wielkość pędzla dostosuj w zależności od wielkości elementu jaki malujesz.
Opacity ustaw na 100.
Teksturą tą pomaluj dno morza, jezioro, rzekę i plażę.
t11.JPG
Teraz wybierz teksturę skały i pomaluj nią płaskowyż.
t12.JPG

Większe dno morza
Po zejściu do morza okazałoby się, że widzimy teren spoza mapy.
Musimy powiększyć dno morza. W tym celu posłużymy się prymitywnym obiektem "Plane".
GameObject >> Create Other >> Plane
Scale ustaw na (90, 0.01, 90)
Position Y ustaw na "0.15", a X i Z tak żeby teren był po środku Plane.
t13.JPG
Znajdź w Project teksturę GoodDirt i przeciągnij ją na Plane.
Zmień nazwę z "Plane" na "Dno".
Pojedyncza tekstura została rozciągnięta na cały teren.
t14.JPG
Zróbmy tak, żeby "grubość piasku" na terenie i na dnie była podobna.
Kliknij na GameObject dno i zobaczysz w jego Inspectorze teksturę i jej parametry.
Parametr "Tiling" odpowiada za ilośc powtórzeń tekstury na terenie.
Wpiszmy do niego dla X i Y 90, co będzie oznaczać, że tekstura w osi x i osi y powtórzy się 90 razy.
Trzeba pamiętać, że 90 razy w osi X i 90 w osi Y to 8100 powtórzeń tekstury na całej powierzchni dna, więc niestosuj tej metody dla dużych terenów.
Wtedy lepiej skorzystaj z jeszcze większego terenu i spłaszcz jego brzegi, żeby uzyskać dno.
Użyłem tej metody tylko żebyś nauczył sie posługiwać teksturą na prymitywnych elementach.
t15.JPG


KOMPONENTY TERENU

Trawa
W Inspectorze terenu wybierz narzędzie "Paint Details".
Zaznacz czwarty pędzel w drugim rzędzie. Ustaw jego rozmiar na 60, a Opacity na 0.001.
Ustalenie odpowiednio niskiego Opacity jest bardzo ważne dla płynnego działania gry z racji tego, że trawa ma duży wpływ na wydajność aplikacji.
Naciśnij kropkę znajdującą się po prawo od napisu "Detail Texture".
Wybierz teksturę "Grass2".
Przyciemnij "Healthy Color" i "Dry Color" klikając najpierw na kolorowy pasek w menu i po otworzeniu okna edycji przesuwając niewielkie kółko na palecie kolorów w dół.
Naciśnij "Add".
t16.JPG
Przed przystąpieniem do malowania trawą przejdź do "Terrain Settings" w Inspectorze terenu i ustaw maksymalną wartość "Detail Distance".
Zwiększy to zakres widoczności trawy i ułatwi ci malowanie.
Wróć do narzędzia "Pain Details" i zacznij malowanie uważając na to, żeby trawa nie nachodziła na takie elementy jak góry, albo dno jeziora.
t17.JPG

Drzewa
Przejdź do narzędzia "Place Trees".
Naciśnij: "Edit Trees..." >> "Add Tree"
Naciśnij kropkę znajdującą się po prawo od napisu "Tree".
Wybierz model "Palm".
Brush Size ustaw na 10 i zacznij "malowanie drzewami".
t18.JPG


OŚWIETLENIE

Symulacja słońca
Wrzuć na scenę oświetlenie typu kierunkowego.
Ten ty oświetlenia jest najbardziej wydajny i najlepiej symuluje oświetlenie słoneczne.
GameObject >> Create Other >> Directional Light
W Inspectorze Directional Light ustaw Intensity na "1.2"
Ustaw pozycję oświetlenia na wysokość 60-70 metrów i kilkadziesiąt metrów w bok od terenu.
Rotację światła ustaw na (15, 20, 0) i zaobserwuj zmianę oświetlenia oraz rozkład cieni na terenie.
t19.JPG


NIEBO

Skybox
Pomimo, że nie omawiałem jeszcze skyboxa(niebo) dodajmy go do sceny, żeby lepiej się prezentował cały teren.
Zacznijmy od wybrania konkretnego skyboxa.
Edit >> Render Settings
"Skybox material" ustaw na "Sunny1 Skybox".
W podglądzie gry widoczny będzie już skybox.
t20.JPG


ZWIEDZANIE MAPY

First Person Controller
Do chodzenia po mapie skorzystamy z "First Person Controller'a"
Przeciągnij z Project do Hierarchy First Person Controller
Standard Assets >> Character Controllers >> First Person Controller
Ustaw go w dogodnej pozycji na mapie 1-3 metry nad powierzchnią terenu.
Usuń kamerę "Main Camera". Będzie ci wystarczyć ta z Controllera.
Od teraz po włączeniu gry będziesz mógł po niej chodzić. Zrób to
t21.JPG

SKRYPTY

Zmiana koloru światła
Na początek zapoznaj się z:
-zmiana koloru
http://unity3d.com/support/documentation/ScriptReference/Light-color.html
-kolory
http://unity3d.com/support/documentation/ScriptReference/Color.html
-zdarzenie po puszczeniu klawisza
http://unity3d.com/support/documentation/ScriptReference/Input.GetKeyUp.html
-klawisze
http://unity3d.com/support/documentation/ScriptReference/KeyCode.html
Napiszmy skrypt, który po naciśnięciu klawisza "k" zmieni kolor światła z białego(white) na czerwony(red).
Stwórzmy zmienną "kolor" która będzie przyjmować dwie wartości.
Jeśli zmienna przyjmuje tylko dwie wartości najlepiej korzystać z typu logicznego(boolean) z racji jego szybkości.
-true jeśli kolor światła jest czerwony
-false jeśli kolor światła jest biały
Na poczatku musimy zadeklarować zmienną i jednocześnie przypiszemy do niej wartość.

var kolor : boolean = true;
Napiszmy warunek, który wykona się po puszczeniu klawisza "k".

if(Input.GetKeyUp ("k")){
//jeśli puścisz klawisz "k" wykona się zawartość pomiędzy klamrami
}

Jeśli puścisz klawisz "k" powinna zmienić się wartość zmiennej z true na false, z false na true.
Jako, że zmienna ma typ logiczny można tego dokonać wykorzystując negację logiczną:

kolor = !kolor;

Teraz pora na kod który zmieni kolor światła:
-na biały

light.color = Color.white;

-na czerwony

light.color = Color.red;

Sprawdzanie, czy klawisz "k" nie został puszczony powinno być wykonywane co klatkę.
Do tego skrzystajmy z funkcji Update:

function Update(){

}

Połączmy wszystko w całość:

var kolor : boolean = false;

function Update(){
if(Input.GetKeyUp ("k")){
//jeśli puścisz klawisz "k" wykona się zawartość pomiędzy klamrami
kolor = !kolor; //zmiana koloru na drugi
if(kolor){ //warunek się wykona jeśli zmienna ma wartość true
light.color = Color.red;
}else{ //warunek się wykona jeśli zmienna ma wartość false
light.color = Color.white;
}
}
}

Zapiszmy i dołączmy ten skrypt do światła "Directional Light".
Przetestuj stworzoną scenę i postaraj się dodać kilka modyfikacji.
t22.JPG

Przykładowe zadania dla ciebie:
1. Edytuj kolor trawy
2. Stwórz zejścia w większej ilości miejsc na mapie, tak żeby łatwo było się poruszać po niej.
3. Stwórz górę po której będzie można poruszać się po ścieżkach.
4. Stwórz wejście na płaskowyż.
5. Zrób przełącznik dla 3 kolorów światła.
Resztę elementów terenu dodamy w kolejnej części ćwiczeń.


by Grzegorz Żak (sztacheta28) Forum o Unity

Tekst dodał:
Grzegorz Żak
05.08.2011 12:34

Ostatnia edycja:
Grzegorz Żak
05.08.2011 12:34

Kategorie:

Aby edytować tekst, musisz się zalogować.

# Edytuj Porównaj Czas Autor Rozmiar
#1 edytuj 05.08.2011 12:34 Grzegorz Żak 16.36 KB
Zwykły
Do sprawdzenia
Do akceptacji
  • Napisz komentarz:
    Aby dodać swój komentarz, musisz się zalogować.
Licencja Creative Commons

Warsztat używa plików cookies. | Copyright © 2006-2017 Warsztat · Kontakt · Regulamin i polityka prywatności
build #ff080b4740 (Tue Mar 25 11:39:28 CET 2014)