Archives Maj 2018

Tworzenie pierwszej klasy Blueprint

W tym artykule stworzymy prostą klasę Blueprint, by nauczyć się podstawowych kroków w edytorze. Istnieją dwa sposob na stworzenie klasy Blueprint. Jednym z nich jest użycie okna “Content Browser”. Wybierz opcję “New -> Blueprint” tak jak wygląda to poniżej.

2.PNG

Inną opcją jest “Toolbar zlokalizowany na górze główne okna edytora.

3

W następnym oknie wybieramy klasę parent, którą będzie stanowiła dla nas fundament naszego Blueprint. Na tą chwilę wybierzmy opcję “Actor”.

4

W tym ekranie możemy wpisać nazwę nowego Blueprinta i wybrać folder w którym zostanie on stworzony. Wybrałem nazwę “HelloUnreal” w folderze Blueprint. Nazwa Blueprintu nie może zawierać pustych miejsc lub specjalnych symboli.

bp03d

Przy otworzeniu naszego blueprinta możemy zmienić tryb w którym aktualnie chcemy pracować.

5

Zadaniem naszego pierwszego skryptu jest napisanie wiadomości “Hello Unreal” na ekranie, gdy gra startuje. By wykonać to, potrzebujemy zdarzenia i akcji. Używamy akcji by definiowania zachowania Blueprintów w przypadku zdarzenia.

Zdarzenie, które użyjemy to “Begin Play”. By je dodać klikamy prawym przyciskiem na centrum “EventGraph” i wybierz opcję “Add Event -> Event Begin Play”.

bp03f

Dodajmy teraz akcję, która wypisz tekst na naszym ekranie. Kliknijmy prawym przyciskiem w miejscu “EventGraph” i wpiszmy słowo “print”w wyszukiwarce. Wybierzmy funkcję “Print String”, tak jak na ilustracji poniżej.

bp03g

Akcja “Print String” posiada parametr o nazwie “In String”. To jest tekst, który zostanie wypisany na ekranie. W moim przykładzie umieściłem tekst “Hello Unreal”. Połącz białe piny pomiędzy zdarzeniem a akcją, jak na ilustracji poniżej.

bp03h

Nasz Blueprint zostanie uruchomiony po kompilacji, czyli musimy wcisnąć przycisk znajdujący się w górnym lewym rogu “compile”. Jeśli natrafiamy na jakiś error w Blueprints to dany przycisk zmieni grafikę z zielonym ptaszkiem wskazujący, że dany Blueprint jest poprawny.

bp03i

Musimy dodac Blueprint do naszego poziomu. Wrócimy do naszego edytora Unreal Engine 4. Wrócimy do Content Browser i wybierzmy Blueprint, który został stworzony po czym wciśnijmy prawy przycisk w dowolnym miejscu na naszym poziomie i wybierzmy opcję “Place Actor”, która zawiera wybrany Blueprint.

bp03j

“Scene Outliner”, który jest na górze po prawej stronie głównego edytora zawiera odniesienia aktorów, które są częścią obecnego poziomu. Blueprint dodany do danego poziomu pojawi się w tej liście.

bp03k

By przetestować Blueprint, wciskamy przycisk “Play” w górnym części edytora.

bp03l

Wiadomość “Hello Unreal” zostanie wyświetlona w górnym lewym rogu naszego ekranu.

bp03m


Źródło:http://romeroblueprints.blogspot.com/2014/04/creating-first-class-blueprint.html

Kompendium: Execute Console Command

Execute Console Command

Funkcja Blueprint, która pozwala na wykonanie komendy w konsoli. Konsola komend może zostać wykonana w edytorze lub w grze.

Punkty wejścia:

  • Command: Konsola komend, która zostanie wykonana
  • Specific Player: Opcjonalne, odniesienie kontrolera gracza, który otrzyma komendę

Przykładowe użycie:

W prostej grze, poziom zostanie zrestartowany kiedy gracz umrze. Zostanie to wykonane używając niestandardowego wydarzenia o nazwie “Death”, które wykona komendę w konsoli “RestartLevel”

25a_bpc3_console

Dla skompletowania listy komend konsoli, otwórz okno “Output Log” (Window -> Developer Tools -> Output Log). Linia na dole okna służy do wprowadzania komend. Wpiszmy komendę “DumpConsoleCommands” i wciśnijmy Enter by uzyskać listę  dostępnych komend z poziomu edytora Unreal Engine.

25b_bpc3_console

Źródło:http://romeroblueprints.blogspot.com/2017/06/bp-compendium-3-execute-console-command.html

Kompendium: AI Move To

AI Move To

Akcja “AI Move To” została użyta do przemieszczenia Pawn/Character. Punktem docelowym może być lokacja lub inny aktor. Poziom musi posiadać “Nav Mesh Bounds Volume“, by zdefiniować obszar w którym akcja “AI Move To” może zostać użyta. Ta akcja jest utajona i uruchamiana równolegle z normalnego przepływu wykonania blueprinta.

Punkty wejścia:

  • Pawn: Odniesienie do Pawn/Character, który może się poruszyć
  • Destination: Wektor wskazujący punkt docelowy
  • Target Actor: Odniesienie do aktora użyte jako punkt docelowy
  • Acceptance Radius: Maksymalny dystans punktu docelowego do wykonania ruchu
  • Stop on Overlap: Wartość zmiennej Boolean. Jeśli jest prawdziwa, to wykonuje ruch gdy Pawn zaczyna najeżdżać na “Acceptance Radius”

Punkty wyjścia:

  • On Success: Wykonanie tego pinu zostanie aktywowane, jeśli akcja “AI Move To” osiągnie swój cel
  • On Fail: Wykonanie pinu, który zostanie zaktywowany gdy nie osiągnie celu
  • Movement Result: Enumeracja, która wskazuje rezultat ruchu

Przykładowe użycie:

Ilustracja poniżej przedstawia “AI Move To” użyty przez Pawn do podążania ścieżką przedstawianą przez zestaw zdefiniowanych punktów na danym poziomie. Te punkty przedstawiają ścieżkę, która może być przechowywana w Array. Makro “FindNextPoint” jest odpowiedzialna za wybranie następnego punktu w ścieżce i przechowuje ją w zmiennej “Next Point”.

24_bpc3_aimove

Ikona zegara w górnym prawym roku wskazuje, że akcja “AI Move To” jest utajona. Zdarzenie “GoNextPoint” startuje akcje “AI Move To“, tylko jeśli gdy Pawn osiągnie punkt docelowy przy tym samym akcje połączone do pinu “On Sucess” zostaną wykonane, a makro  “FindNextPoint”  zaktualizuje zmienną “Next Point”, a same zdarzenie “GoNextPoint” zostanie wezwane ponownie.


Źródło:http://romeroblueprints.blogspot.com/2017/06/bp-compendium-3-ai-move-to.html

Kompendium: Spawn Emitter at Location

Spawn Emitter at Location

Odtwarza system particle w określonej lokacji.

Punkty wejścia:

  • Emitter Template: Szablon systemu particle, który zostanie użyty
  • Location: Lokacja gdzie particle system zostanie utworzony
  • Rotation: Rotacja użyta przez system particle
  • Auto Destroy: Wartość zmiennej Boolean. Jeśli jest prawdziwa to zniszczy system particle po jej ukończeniu

Punkty wyjścia:

  • Return Value: odniesienie do komponentu systemu particle, który został utworzony.

Przykładowe użycie:

Ilustracja poniżej jest formą Blueprintu, który przedstawia “Bullet”. Kiedy ten pocisk koliduje z jakimś systemem particle, zostanie stworzony w lokacji kolizji używając szablonu “P_Explosion”. Po wykonaniu pocisk zostanie zniszczony.

23a_bpc3_emitter

W następnym przykładzie, system particle zostanie stworzony, gdy aktor najedzie na blueprint i zostanie zniszczony gdy aktor skończy na niego najeżdżać. Odniesienie systemu particle jest zapisane w zmiennej “Emitter Reference”. Szablon “P_Sparks” został użyty do pętli, która nie zostanie zastopowana automatycznie.

23b_bpc3_emitter

Źródło:http://romeroblueprints.blogspot.com/2017/06/bp-compendium-3-spawn-emitter-at.html

Kompendium: Add Child Actor Component

Add Child Actor Component

Dodanie aktora jako komponent innego aktora. Zatem komponent aktora podąża za zmianami parent aktora. Kiedy parent Actor zostanie zniszczony, to jego komponent Actor również temu ulegnie. Klasa aktora musi zostać określona w oknie “Details” w funkcji “Add Child Actor Component

Punkty wejścia:

  • Target: Odniesienie aktora, który otrzyma nowy komponent
  • Manual Attachment: Wartość zmiennej Boolean. Jeśli jest false, to nowy Actor zostanie automatycznie dołączony
  • Relative Transform: Transformacje użyte przez nowy komponent

Punkt wyjścia:

  • Return Value: Odniesienie do stworzonego aktora

Przykładowe użycie:

W tym przykładzie mamy Blueprint, który przedstawia broń. Nazwa tego Blueprinta to “WeaponBlueprint”. W następnym Blueprincie przedstawia on charakter gry, który jest wzywany zdarzeniem podczas edytora, by dodać broń typu “WeaponBlueprint” do danego charakteru.

22a_bpc3_childactor

Ilustracja poniżej przedstawia okno “Details” jako funkcję “Add Child Actor Component“, która wyświetla gdy funkcja zostanie wybrana. Klasa zostanie użyta przez nowego aktora, informując przy tym właściwość “Child Actor Class“.

22b_bpc3_childactor


Źródło:http://romeroblueprints.blogspot.com/2017/06/bp-compendium-3-add-child-actor.html

Kompendium: Get Overlapping Actors

Get Overlapping Actors:

Ta funkcja zwraca listę aktorów, które nachodzą na aktora lub komponent. Istnieją dwie wersje tej funkcji, jedna z nich używa Actor jako Target, druga z nich używa Component jako Target.

Punkty wejścia:

  • Target: Odniesienie do Actor/Component które zostaną użyte do testu funkcji
  • Class Filter: Opcjonalne, wskazuje która klasa/podklasa zostanie użyta w teście

Punkt wyjścia:

  • Overlapping Actors: Array zawierający aktorów najeżdżających na Actor/Component

Przykładowe użycie: 

Wyobraź sobie strefę, która zadaje obrażenia do wszystkich aktorów znajdujących się na niej. Ten obszar jest przedstawiony jako Blueprint, który posiada component Box Collision oraz określa lokacje gdzie aktor odnosi obrażenia. Zdarzenie poniżej jest wzywane cyklicznie by zadawać obrażenia wszystkim aktorom, którzy znajdują się w zasięgu Box Collision.

21a_bpc3_overlapping

Ilustracja poniżej przedstawia Timer, który został ustawiony do wzywania wydarzenia “Timer Damage” raz na sekundę.

21b_bpc3_overlapping


Źródło:http://romeroblueprints.blogspot.com/2017/06/bp-compendium-3-get-overlapping-actors.html

Kompendium: Apply Damage

Apply Damage

Ta funkcja jest używana do zadawania obrażeń aktorowi. Różne informacje związane z obrażeniami mogą przejść przez ową funkcję jak np. minusowy Float, który może ci zwiększyć wartość zmiennej health.

Punkty wejścia:

  • Damaged Actor: Odniesienie do aktora, który poniósł obrażenia
  • Base Damage: Wartość typu Float, która przedstawia obrażenia
  • Event Instigator: Opcjonalne odniesienie do kontrolera odpowiedzialnego za obrażenia
  • Damage Cuaser: Opcjonalne odniesienie aktora, które zostało spowodowane obrażeniami
  • Damage Type Class: Opcjonalna klasa, która przedstawia typ obrażeń, przykładowo od ognia, elektryczności itd.

Przykładowe użycie:

Jest to prosty przykład, które może zostać użyty w Blueprint przedstawiający pocisk. Kiedy pocisk trafi aktora, to funkcja “Apply Damage” zostanie użyta do zadania obrażeń o wartości 20. Po wykonaniu, pocisk zostanie zniszczony.

20a_bpc3_damage

W Blueprincie aktora, który został trafiony, zmienna Float o nazwie “Energy” została stworzona. Zdarzenie “AnyDamage” zostanie zaktywowane przez funkcję “Apply Damage“. Obrażenie zostaną odjęte od zmiennej “Energy“. Jeśli “Energy” jest mniejsza lub równa zero, to aktor zostanie zniszczony.

20b_bpc3_damage

Istnieją również bardziej określone wersje funkcji jak “Apply Point Damage” czy “Apply Radial Damage“. Dla każdego z nich istnieje powiązane wydarzenie.


Źródło:http://romeroblueprints.blogspot.com/2017/05/bp-compendium-3-apply-damage.html

Kompendium: Actor Has Tag

Actor Has Tag

Funkcja sprawdza, czy aktor gry posiada konkretny Tag. Użycie tagów jest bardzo prostym sposobem, by rozróżnić niektórych aktorów na danym poziomie.

Input: 

  • Target: Odniesienie aktora, który zostanie użyty do weryfikacji tagu
  • Tag: Tag, który zostanie użyty do testu

Output

Return Value: Wartość zmiennej Boolean. Jeśli jest prawdziwa, to wskazuje, że aktora tag został powiadomiony

Przykładowe użycie:

Aktor posiada kilka tagów. By dodać tagi do aktora w edytorze blueprint, klikamy na przycisk “Class Defaults” i dodajemy je w oknie “Details”

19a_bpc3_hasflag

W tym przykładzie funkcja “Actor Has Tag” została użyta do sprawdzenia, czy aktor posiada tag “SpecialItem”. Jeśli go ma, to nowy aktor typu “Special Gem Item” zostanie stworzony, w innym przypadku aktor pozostanie typem “Game Item”.

19b_bpc3_hasflag

Źródło: http://romeroblueprints.blogspot.com/2017/05/bp-compendium-3-actor-has-tag.html

Kompendium: Map Range Clamped

Map Range Clamped

Przekształca daną wartość w zasięgu wartości, by odpowiadała wartością innego zasięgu wartości. Finalny rezultat zawsze będzie w zasięgu wartości punktu wyjścia, nawet jeśli oryginalna wartość jest na zewnątrz zasięgu wartości punktu wejścia.

Punkty wejścia:

  • Value: Oryginalna wartość do przekształcenia
  • In Range A: Minimalna wartość zasięgu punktu wejścia
  • In Range B: Maksymalna wartość zasięgu punktu wejścia
  • Out Range A: Minimalna wartość zasięgu punktu wyjścia
  • Out Range B: Maksymalna wartość zasięgu punktu wyjścia

Punkt wyjścia:

  • Return Value: Przekształca wartości do zasięgu wartości punktu wyjścia

Przykładowe użycie:

W przykładzie poniżej, zmienna Float jest używana do przedstawiania rotacji obiektu. Ta zmienna może zawierać wartości pomiędzy 0.0 oraz 1.0. Funkcja została stworzona do przekształcenia wartości tej zmiennej do odpowiedniej wartości w stopniach. Jeśli wartość wynosi 0.0, to adekwatnie do stopni jest równa 0. Jeśli wynosi ona 1.0 to odpowiada 360 stopni. Jeśli wartość wynosi 0.5 to rezultatem będzie 180 stopni.

18a_bpc3_maprange

W innym przykładzie funkcja “Get Percentage Ammo” przekształca obecną liczbę amunicji gracza w procenty wyświetlane na ekranie. Kalkulacja jest wykonywana na podstawie zmiennych, by utrzymać maksymalną liczbę amunicji gracza jaką może uzyskać, a także ich bieżącą liczbę.

18b_bpc3_maprange

Istnieje również wariacja funkcji o nazwie “Map Range Unclamped“, jedyną różnicą jest to, że końcowy rezultat nie jest limitowany do zasięgu wartości punktu wyjścia.


Źródło:http://romeroblueprints.blogspot.com/2017/05/bp-compendium-3-map-range-clamped.html

Kompendium: Select

Select

Akcja “Select” zwraca wartość związaną z opcjami, które odpowiadają indeksowi jako punkt wejścia. Moduł “Select” jest ogólny i może współpracować z różnymi typami zmiennych dla indeksu jak i opcji zmiennych. By zmienić typ opcji oraz indeksu, klikamy prawym przyciskiem na parametr i wybieramy opcję “Change Pin Type“. Gdy chcemy dodać więcej opcji, klikamy prawym przyciskiem na wejście i wybieramy opcję “Add Option Pin“.

17a_bpc3_select

Punkty wejścia:

  • Option 0, 1…: Wartości mogą zostać zwrócone przez Select. Opcje te mogą być różnego rodzaju.
  • Index: Wartość, która określi opcje do zwrotu, “Index” może być typem zmiennej Boolean, Byte, Integer czy Enum.

Punkt wyjścia:

  • Return Value: Opcja może zostać wskazana przez “Index”

Przykładowe użycie:

W zdarzeniu “Respawn”, “Select” jest użyty do uzyskania lokacji respawnu punktu opierającego się na wartości zmiennej integer o nazwie “Spawn Point Index“.

17b_bpc3_select

W następnym przykładzie “Index” jest typem ENUM o nazwie “Difficult”, który posiada wartości o nazwach “Easy”, “Normal”, “Hard”. Typ opcji “Integer” przedstawia liczbę przeciwników zgodną z poziomem trudności.

17c_bpc3_select1


Źródło:http://romeroblueprints.blogspot.com/2017/05/bp-compendium-3-select.html