turniej.unreal.pl :: Zobacz temat - [UE1] [UC] 2 Typy zmiennych
graphic logo logo graphic graphic  


Unreal Engine 1 Unreal Script 2 Typy zmiennych
Napisz nowy temat   Odpowiedz do tematu
   Forum turniej.unreal.pl Strona Główna -> Artykuły -> O Unreal Script  
Autor Wiadomość
 Post Wysłany: Nie Gru 02, 2007 10:01 am 

Raven
Admin
Admin


Dołączył: 13 Maj 2004
Posty: 200


 
 
 

Unreal Engine 1 Unreal Script 2 Typy zmiennych
Zobacz pojedynczy postZobacz pojedynczy post

     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 Sad
export
     Tylko do klas Object i Actor (szczegóły w licencji). Przykładu nie podam, bo nigdzie nie ma szczegółów Sad

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ą.

 
Odpowiedz z cytatem

_________________

personal wiki
Zobacz profil autora Wyślij prywatną wiadomość Wyślij email Odwiedź stronę autora Numer GG Tlen
   Forum turniej.unreal.pl Strona Główna -> Artykuły -> O Unreal Script
Napisz nowy temat   Odpowiedz do tematu
Skocz do:  

 Further options
 Wszystkie czasy w strefie GMT
Strona 1 z 1
 
Zobacz poprzedni temat :: Zobacz następny temat  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz dołączać plików na tym forum
Nie możesz ściągać plików na tym forum
Wyświetl posty z ostatnich:   
 

turniej.unreal.pl Kanał RSS tematu 
PicLens 

Powered by phpBB © 2001, 2002 phpBB Group
Illusion template v.1.0.2 © Jasidog.com
Powered by phpbb, copyright the phpbb group Template by jasidog.com