Witaj nieznajomy
Użytkownik:

Hasło:

Pamiętaj mnie

Zarajestruj się TUTAJ.
Main
News
Linki
Galeria
Polityka prywatności
Artykuły
Różne
O UnrealED
Unreal Script
Unreal Engine 1
Unreal Engine 3
Gotowce
Mody
W produkcji
Skończone
Nigdy nie ukończone
Download
Mapy
Assault
Capture The Flag
Domination
Death Match
Mappacki
Single Player
Archiwum
Inne
Mutatory
Tutoriale
Programy
UnrealED
Brushe
Muzyka
Programy
Prefabs
Tekstury
Skrypty
Przykłady
Losowy obrazek

Corrupted Land
Nazwa: Corrupted Land
Dodał: Raven

Inne
Hostowanie







O Unreal Script
Unreal Engine 1 Unreal Script 2 Typy zmiennych


     Jak każdy język programowania także i Unreal Script posiada zmienne. Zmienne deklaruje się następująco:

Kod:
Var([nazwa]) [Prefixy] TypZmiennej NazwaZmiennej;


Typy
     Istnieje kilka typów zmiennych:

byte
Liczba całkowita od 0 do 255
Unreal Script:
  1. var byte MyByte;
  2. MyByte=255;


iInt
Liczba całkowita (32 bitowa)

Unreal Script:
  1. var int MyInt;
  2. MyInt=11;
  3. MyInt++; //wartość większa o 1
  4. MyInt--; //wartość mniejsza o 1
  5.  


float
Liczba zmiennoprzecinkowa
Unreal Script:
  1. var float MyFloat;
  2. MyFloat=11.05;
  3. MyFloat*=2.0;
  4. MyFloat = MyFloat/22;


bool
Zmienna logiczna (wartość true lub false)
Unreal Script:
  1. var bool MyBool;
  2. MyBool=false;


string
Ciąg znaków ograniczony poprzez " i ":
Unreal Script:
  1. var string MyString1;
  2. var string MyString2;
  3. var string MyString3;
  4. MyString1="ssdd1";
  5. MyString2="ddss2";
  6. MyString3= MyString1$MyString2;//łączy string
  7. iMyString3=Right(MyString1, 2); // zwraca 2 znaki z MyString2, zaczynając od prawej strony
  8. MyString3=Left(MyString2, 2);// zwraca 2 znaki z MyString2, zaczynając od lewej strony
  9. MyString3=Len(MyString1);// zwraca liczbę znaków w MyString1
  10.  


name
Nazwa właściwie też jest ciągiem znaków, z tą różnicą, że ograniczamy go znakami ' i '. Najlepiej jeśli spojrzysz na nie jako na nazwy (tagi) przedmiotów w UT. Nie wykonuj na nich żadnych operacji, które wykonałbyś na ciągach.
Unreal Script:
  1. var name MyName;
  2. MyName='FirstName';


enum
Zmienna, która przyjmuje wartość spośród kilku zdefiniowanych nazw
Unreal Script:
  1. enum EMyEnum //struktura
  2. {
  3.     MY_Enum1,
  4.    MY_Enum2
  5. };
  6. var EMyEnum FirstEnumVar; // dostęp poprzez FirstEnumVar
  7. FirstEnumVar=MY_Enum1;


struct
Struktura jest to złożony typ danych, którego głównym zadaniem jest grupowanie zmiennych różnego typu. Składnia wygląda następująco:

Unreal Script:
  1. struct nazwa [extends struktura_nadrzędna] {
  2.   //tu deklaruje się zmienne.
  3. };


Przykład:

Unreal Script:
  1. struct SMyStruct //struktura
  2. {
  3.     var int IntInStruct;
  4.     var float FloatInStruct;
  5.     var string StringInStruct;
  6. };
  7. var SMyStruct FirstStructVar; // dostęp poprzez FirstStructVar
  8. var SmyStruct FirstStructArray[3];
  9. (...)
  10. FirstStructVar.IntInStruct=1;
  11. FirstStructVar.FloatInStruct=1.05;
  12. FirstStructVar.StringInStruct="jeden"; /* Nadaje warość JEDNEJ zmiennej z danej komórki tabeli.*/
  13. (...)for(i=0; i<3; i++)
  14. {
  15.   FirstStructArray[i]. IntInStruct =1;
  16.   FirstStructArray[i]. FloatInStruct =1.05;
  17.   FirstStructArray[i]. StringInStruct ="jeden";
  18. }/* nadaje wartosci wszystkim zmiennym w FirstStructArray */


W defultproperties z kolei zmiennym w strukturze przypisuje się wartości tak

Unreal Script:
  1. defaultproperties
  2. {
  3.   FirstStructVar=(IntInStruct=1,FloatInStruct=1.05,SringInStruct ="jeden")
  4. }


Jedną z istniejących struktur jest werkor.

     Prefixy

const
     Stała – po nadaniu jej wartości (domyślna wartość zmiennej lub w UED) podczas działania skryptu nie możesz jej zmienić.
Unreal Script:
  1. var const bool MyBool;

editconst
     Zmiennej nie można zmienić z poziomu UnrealED :]
Unreal Script:
  1. var editconst bool MyBool;

input
     Sprawia, że możemy taką zmienną zbindować. Działa tylko z typami byte i float
Unreal Script:
  1. var input byte MyInputByte;

transient
     Jest jedynie do użycia tymczasowego. Przy ładowaniu obiektu jest zerowana.
Unreal Script:
  1. var transient bool MyBool;

native
     Zmienna jest częściej używana przez C++ niż Unreal Script.
Unreal Script:
  1. var native bool MyBool;

private
     Zmienna będzie prywatna, dostępna tylko dla skryptu
Unreal Script:
  1. var private bool MyBool;

travel
     Odnosi się tylko do PlayerPawn oraz Inventory. Znaczy mniej więcej tyle: "wartość tej zmiennej musi podróżować pomiędzy poziomami". Sprawia to, że po załadowaniu nowej mapy (tryb Single Player) broń, ilość amunicji, stan zdrowia nie jest "zapominany"
Unreal Script:
  1. var travel bool MyBool;

skip
     Tylko do operacji logicznych (szczegóły w licencji). Przykładu nie podam, bo nigdzie nie ma szczegółów :(
export
     Tylko do klas Object i Actor (szczegóły w licencji). Przykładu nie podam, bo nigdzie nie ma szczegółów :(

Tablice

     Unreal Engine 1.x supportuje tylko jednowymiarowe tablice:

Unreal Script:
  1. var int MyArInt[3];


Dostęp do takiej zmiennej uzyskujemy następująco:

Unreal Script:
  1. JakasZmienna=MyArInt[i];


Gdzie "i" oznacza liczbę z zakresu od 0 do wymiar_tablicy-1 czyli w naszym przypadku od 0 do 2.

Edycja z poziomu UnrealED

Uzyskujemy dzięki wstawieniu () po var. Deklaracja powinna wyglądać następująco:

Kod:
Var([nazwa]) [Prefixy] TypZmiennej NazwaZmiennej;


Ilustruje to przykład:

Unreal Script:
  1. /*edytujemy ją z poziomu UED nazwa grupy=nazwa klasy */
  2. var() int MyInt;
  3. /*edytujemy ją z poziomu UED nazwa grupy=MyGroup=nazwa w nawiasie :]*/
  4. var(MyGroup) int MyInt2;


Jeśli w () nie wpiszemy żadnej nazwy, to grupą takiej zmiennej będzie nazwa klasy.

     Struktury

Aby struktura mogła być edytowana z poziomu UnrealED, odpowiednio zadeklarowane muszą być także zmienne wewnątrz struktury:

Unreal Script:
  1. struct nazwa [extends struktura_nadrzędna] {
  2.   Var([nazwa]) [Prefixy] TypZmiennej NazwaZmiennej;
  3. };


Ilustruje to przykład:

Unreal Script:
  1. struct SMyStruct //struktura
  2. {
  3.     var() int IntInStruct;      //zmienna widoczna z poziomu UnrealED
  4.     var() float FloatInStruct;  //zmienna widoczna z poziomu UnrealED
  5.     var string StringInStruct;  //zmienna niewidoczna w UnrealED
  6. };
  7. var() SMyStruct FirstStructVar; // dostęp poprzez FirstStructVar
  8.  


Zmienne a Obiekty

Można także zadeklarować zmienne odnoszące się do obiektów:

Unreal Script:
  1. var actor A; // Odnosi się do klasy Actor
  2. var pawn P; // Odnosi się do klasy Pawn
  3. var texture T; // Odnosi się do Textury
  4.  


Należy pamiętać, iż zmienna P może przechowywać każdy istniejący w grze obiekt będący dzieckiem klasy Pawn.

Unreal Script:
  1. var pawn P, S;
  2. function MyFunction()
  3. {
  4.    if(P.Enemy == S)
  5.       P.PlayRunning();
  6. }


Zmienna P albo odnosi się do jakiegoś istniejącego w czasie działania skryptu Pawna, albo jej wartość wynosi None. Dzięki temu możemy ulepszyć powyższą funkcję

Unreal Script:
  1. var pawn P, S;
  2. function MyFunction()
  3. {
  4.    if(P == none)  return; /* jeśli pawn nie istnieje nie mamy nic do roboty i kończymy działanie funkcji, w przeciwnym wypadku kontynuujemy */
  5.    if(P.Enemy == S) // jeśli mamy przeciwnika I jest nim S     
  6.       P.PlayRunning(); // odtwarzamy aminację biegania
  7. }


Oczywiście można się obyć bez warunku if(P == none) return; i skrypt będzie działać poprawnie. W momencie jednak, gdy któraś ze zmiennych będzie pusta (wartość none) w logu zostanie zapisany słynny błąd Accessed None. Kilka takich błędów nic nie zmieni, lecz duże ich nagromadzenie może znacząco spowolnić grę.

Zmienne a Klasy

W powyrzszym przypadku, obiekty musiały istnieć w grze, aby byłć użyte. Zmiena jako klasa nie wymaga tego.

Unreal Script:
  1. var() class C; // klasa do Spawnowania
  2. var actor A; // zmienna "przechowująca" obiekt
  3. A = Spawn(C); // tworzy obiekt w grze
  4.  


Zmienna C określa klasę, która ma zostać utworzona w grze (dowolna), zaś A "przechowuje" obiekt. Dzięki niej możemy się odwołać do funkcji i zmiennych wewnątrz zespawnowanej klasy. Jest tylko jeden drobny szczegół... odwołać się możesz do wszystkiego zawartego w obiekcie ACTOR. Dlaczego? Bo odwołujesz się do klasy Actor i nie możesz "sięgnąć dalej". Aby uniknąć ograniczenia, musimy zdefiniować grupę:

Unreal Script:
  1. var() class<nazwa_istniejącej_klasy> NazwaZmiennej;


Czy dzięki temu zapisowi możemy się odwoływać do wartości innych niż te z klasy Actor? Niezupełnie, ale to jeden krok do przodu. Proszę zwrócić uwagę, że w UED będziesz mógł wstawić tylko klasę zawartą pomiędzy < i > lub klasy pochodne. No, ale przejdźmy dalej:

Unreal Script:
  1. var() class< decoration > D; // klasa do Spawnowaniavar
  2. Decoration A; // zmienna "przechowująca"
  3. A = Spawn(D); // tworzy obiekt w grze
  4.  


Dopiero po zdefiniowani kolejnej zmiennej odnoszącej się do obiektu (w tym przypadku Decoration) możemy zespawnować odpowiednią klasę i odnosić się do funkcji i zmiennych w niej zawartych. W tym przypadku musimy także wpisać w defaultproperties odnośnik do klasy.

Unreal Script:
  1. defaultproperties
  2. {
  3.      D=class'Botpack.Bin2'
  4. }


Istniejące struktury

Vector
     Punkt w przestrzeni 3D. Opisany za pomocą wartości na osiach X, Y oraz Z
Unreal Script:
  1. struct Vector
  2. {
  3.         var() config float X, Y, Z;
  4. };


Plane
     Punkt w 3D wraz z punktem odniesienia od środka czyli X, Y, Z oraz W.
Unreal Script:
  1. struct Plane extends Vector
  2. {
  3.         var() config float W;
  4. };
  5.  

Rotator
     Rotacja (obrót) jest opisana za pomocą Pitch, Yaw, i Rol.
Unreal Script:
  1. struct Rotator
  2. {
  3.         var() config int Pitch, Yaw, Roll;
  4. };


Color
     Kolor RGB. Jeśli nie wiesz co to takiego, poszukaj w wikipedi lub pogoogluj.
Unreal Script:
  1. struct Color
  2. {
  3.         var() config byte R, G, B, A;
  4. };


Coords
     Definicja płaszczyzny w 3D
Unreal Script:
  1. struct Coords
  2. {
  3.         var() config vector Origin, XAxis, YAxis, ZAxis;
  4. };


Region
     Region w którym znajduje się dany actor
Unreal Script:
  1. struct PointRegion
  2. {
  3.         var zoneinfo Zone;       // Zone.
  4.         var int      iLeaf;      // Bsp leaf.
  5.         var byte     ZoneNumber; // Zone number.
  6. };
  7. var const PointRegion     Region;   


Zmienne lokalne i globalne

Do tej pory pisałem o zmiennych globalnych, czym jednak są zmienne lokalne? W praktyce nie różnią się one za bardzo od zmiennych globalnych, z tym wyjątkiem, że do zmiennych globalnych mają dostęp wszystkie funkcje w skrypcie, do nich można się także odwoływać poprzez inne skrypty, oraz ustawiać wartości z poziomu UnrealEd. Zmienne lokalne zaś dostępne są tylko dla funkcji w której zostały zadeklarowane i, w przeciwieństwie do zmiennych globalnych, mogą się powtarzać (oczywiście nie w jednej funkcji i nazwa nie może być taka sama jak zmienna globalna). Zmienne lokalne deklaruje się w następujący sposób:

Kod:
local [TypZmiennej] [NazwaZmiennej];


Skąd jednak podział na zmienne lokalne i globalne i jaki sens jest używania tych pierwszych? Otóż zmienne lokalne są stosowane w funkcjach, w momencie, gdy mają służyć do wykonania pewnych obliczeń, których wynik nie trzeba na dłużej zapamiętywać. Prześledźmy to na następującej funkcji:

Unreal Script:
  1. function Draw100Lines()
  2. {
  3.     local int i;    for(i=0; i<100; i++;)
  4.    {
  5.         BroadCastMessage("Liczymy do 100. Jest to liczba: "$i+1);
  6.     }
  7. }


Ta prosta funkcja wypisuje liczby od 0 do 100. Nie chodzi jednak o funkcje a o zmienną i. Teoretycznie mógłbym zadeklarować ją jako globalną, ale w praktyce takie postępowanie nie miałoby najmniejszego sensu. Przyjrzyjmy się jednak takiej funkcji:


Unreal Script:
  1. function PowiekszI()
  2. {
  3.     local int i;
  4.     i=i+1;
  5. }


Najciekawsze w tej funkcji jest to, że choćbyśmy wywoływali ją 1000 razy, maksymalną wartością jaką osiągnie zmienna i będzie 1. Dzieje się tak dlatego, gdyż podczas każdego wywołania funkcja powiększa i o 1, zaś kolejne wywołania nie mają dostępu do poprzedniej wartości. Jeśli chcielibyśmy aby wartość zmiennej i była zapamiętywana, funkcja powinna mieć taki wygląd:


Unreal Script:
  1. var int i;
  2. function PowiekszI()
  3. {
  4.     i=i+1;
  5. }


W takiej postaci i zostanie zapamiętane, gdyż jest ono zmienną globalną.

Raven dnia 02 Grudzień 2007, 11:01 - Skomentuj (0)

All graphics created by InfectedFx and modified by Raven, except turniej.unreal.pl logo.
Site engine and design created by Raven 2004©. All rights reserved.

Strona korzysta z plików cookie w celu realizacji usług zgodnie z Polityką prywatności.