UnrealScript - ściąga 4789 2

O temacie

Autor Adanos

Zaczęty 31.07.2010 roku

Wyświetleń 4789

Odpowiedzi 2

Adanos

Adanos

Administrator
Szara eminencja
posty5220
Propsy3865
ProfesjaProgramista
  • Administrator
  • Szara eminencja

Adanos
Administrator

UnrealScript - ściąga
2010-07-31, 18:52(Ostatnia zmiana: 2012-06-02, 11:36)
Przetłumaczyłem poniższą "ściągę" języka UnrealScript:



Jako że za bardzo nie znam się na grafice 2D, będziecie musieli się zadowolić formą tekstową.

Mam nadzieję, że ustrzegłem się rażących błędów. Jeśli jakieś znajdziecie, to piszcie.


Przegląd

UnrealScript został wytworzony w celu zapewnienia rozwojowi zespołowi i innych firm wykorzystujących Unreal (third-party developers) z potężnym, wbudowanym językiem programowania, który oczywiście łączy potrzeby i niuanse programowania gier.

Głównymi celami projektu UnrealScript są:
  • Wsparcie ważnych pojęć czasu, stanu, właściwości i sieci, które nie są wspierane w tradycyjnych językach programowania. UnrealScript zawiera obsługę bezpośrednią dla czasu, stanu, właściwości i replikacji sieci, która znacznie uprości programowanie gier.
  • Zapewnienie prostoty programowania w stylu języka Java, obiektowości i kontroli błędów podczas kompilacji.
  • Umożliwienie programowania wysokopoziomowego w zakresie obiektów gry i interakcji, a nie bitów czy pikseli.

Do przykładów UnrealScript czytelnika odsyłam do kodu źródłowego silnika, który stanowi dziesiątki tysięcy wierszy kodu pracy w UnrealScript, który rozwiązuje wiele problemów, takich jak AI, ruch, wyposażenie i wyzwalacze (triggers). Dobrym pomysłem na początek może być popatrzenie na skrypty "Aktor", "Obiekt", "Kontroler", "Pionek" i "Broń".

Zmienne – podstawy

Składnia:
Cytuj
var słowo_kluczowe typ nazwa;

UnrealEd Exposed Syntax:
Cytuj
var (kategoria) słowo_kluczowe typ nazwa;

Składnia tablic:
Cytuj
var słowo_kluczowe typ nazwa
  • ;[/b]
Składnia lokalna:
Cytuj
local typ nazwa;

Przykłady:
//deklarowanie zmiennych przykłady
var string MojaNazwa;
var () bool buttonState;
var (Pets) byte petSlots;
local int myStr, myInt, myDex;
var string badGuys[10];
var editconst string petLevel;

Typy:
  • byte
  • int
  • bool
  • float
  • string
  • name
Słowa kluczowe:[/i]
  • const
  • editconst
  • inut
  • transient
  • native
  • private
  • travel
  • config
  • export
  • protected

Zmienne – zaawansowane

Składnia typu wyliczeniowego:
Cytuj
enum enumName
{
   value1; value2; value3;
};

var enumName myVariable
if (myVariable == value2)


Składnia struktury:
Cytuj
struct structName
{
   var type name;
   var type name2;
};

var structName myVariable;
if (myVariable.name2 == 3)

Składnia obiektu/aktora:
Cytuj
var typ_obiektu nazwa;

Przykład obiektu/aktora:
Cytuj
//deklaracje obiektu zmiennej
var actor MojAktor;
var () class MojaKlasa;
var texture MojaTekstura;
var <actor> mojaKlasaAktor;

Typy obiektów:
  • actor
  • class
  • pawn
  • texture
  • material
  • inne obiekty

Składnia stałych:
Cytuj
const nazwa = wartość;

Przykłady stałej:
Cytuj
const MojPI = 3.14149;
const MojaNazwa = "Tim";

Funkcje

W UnrealScript możesz deklarować nowe funkcje i pisać nowe wersje istniejących funkcji. Funkcje mogą brać jeden lub więcej argumentów (dowolnego typu zmiennej wspieranego przez UnrealScript) i może opcjonalnie zwrócić wartość.

Składnia:
Cytuj
słowo_kluczowe function typ_zmiennej nazwa (parametr_kluczowy param)
{
}

Przykład:
Cytuj
function MojaFajnaFunkcja()
{
   return;
}

Uwagi:
Możesz użyć "zdarzenia"(event) w miejscu "funkcji"(function) (generuje to namiastkę C++)

Słowa kluczowe:
  • static
  • singular
  • native(#)
  • latent
  • iterator
  • final
  • simulated
  • operator
  • preOperator
  • postOperator
  • event

Parametry kluczowe:
  • out
  • optional
  • coerce

Zwracane typy:
  • return
  • return zmienna
  • return true(prawda)
  • return false(fałsz)

Klasy

Każdy skrypt odpowiada dokładnie jednej klasie, a skrypt rozpoczyna się od zadeklarowania klasy, klasy rodzicielskiej i wszelkich dodatkowych informacji, które są istotne dla danej klasy.

Składnia:
Cytuj
class nazwa extends klasa_rodzicielska
słowa_kluczowe;

Przykład:
class MojaKlasa extends Actor;
{
}

Uwagi:
Niektóre klasy mogą zależeć od aktywów, które zostaną załadowane. Użyj polecenia #EXEC na początku klasy, aby załadować potrzebne aktywa/pakiety. (Polecenie #EXEC uruchamia konsolę poleceń)

Słowa kluczowe:
  • native
  • nativereplication
  • abstract
  • guid(a, b, c, d)
  • transientconfig(file_name)
  • placeable
  • notplaceable
  • hidecategories(category_list)
Operatory
$ napis
*= pomnożenie i przypisanie
/= podzielenie i przypisanie
+= dodanie i przypisanie
-= odjęcie i przypisanie
|| logiczne lub (alternatywa)
&& logiczne i (koniunkcja)
& bitowa koniunkcja
| bitowa alternatywa
^ XOR (bitowa różnica symetryczna)
!= różne
== równe
< mniejsze niż
> większe niż
<= mniejsze niż lub równe
>= większe niż lub równe
~= przybliżone równości
<< przesunięcie w lewo
>> przesunięcie w prawo
+ dodawanie
- odejmowanie
% dzielenie modulo
* mnożenie
/ dzielenie
Dot Iloczyn skalarny
Cross Iloczyn wektorowy
** Potęgowanie

Operatory napisowe

$ Bierze dwa napisy i łączy je.
@ Bierze dwa napisy i łączy je ze spacją między nimi.
< Zwraca prawdę (true), jeśli pierwszy napis jest alfabetycznie przed niż drugi napis.
> Zwraca prawdę (true), jeśli pierwszy napis jest alfabetycznie za niż drugi napis.
<= Zwraca prawdę, jeśli pierwszy napis jest alfabetycznie przed niż drugi napis lub taki sam.
>= Zwraca prawdę, jeśli pierwszy napis jest alfabetycznie za niż drugi napis lub taki sam.
== Zwraca prawdę, jeśli napisy są takie same.
!= Zwraca prawdę, jeśli dwa napisy NIE są takie same.
~= Bierze dwa napisy i zwraca prawdę, jeśli napisy są takie same, niezależnie od przypadku.

Uwaga 1: Te operatory ROZRÓŻNIAJĄ wielkość liter.
Uwaga 2: Wielkie litery są wcześniej niż małe litery.

Przykłady:
  log("Unreal"&"Script"); //wydrukuje "UnrealScript" do dziennika.
   ("Małpa" < "Robot") //to jest PRAWDA.
   ("Małpa"<"małpa") //to jest FAŁSZ.
Inne operatory
++ zwiększenie o 1 (postfiksowa / prefiksowa zmiana zmiennej)
zmniejszenie o 1 (postfiksowa / prefiksowa zmiana zmiennej)
- negacja (liczby ujemne)
~ bitowa negacja (dopełnienie jedynkowe)
! logiczne nie

// komentarz
/*  */ blok komentarzu

Odnośniki do sieci

http://udn.epicgames.com
http://wiki.beyondunreal.com/wiki
http://udn.epicgames.com/Two/UnrealScriptReference

Funkcje napisowe

Len(napis1)   Zwraca długość napis1.
InStr(napis1, napis2)   Zwraca pozycję pierwszego wystąpienia napis2 w napis1. Jeśli podsłowa nie znaleziono, InStr zwraca -1.
Mid(napis1, int1, int2)   Generuje nowy napis z napis1, zaczynając od znaku int1 i kopiując int2 znaki. int2 jest opcjonalne.
Left(napis1, int1)   Zwraca int1 znaków od lewej strony w napis1. Zwraca napis do indeksu int1 od lewej, ale nie włączając znaku o indeksie int1.
Rigft(napis1, int1)   Zwraca int1 znaków od prawej strony w napis1.
Caps(napis1)   Zwraca napis1 napisany wielkimi literami. Jest to dobry sposób na "normalizację" napisów przed porównaniem.
Chr(int1)   Zwraca napisową reprezentację int1. Może być to cokolwiek w Unicode, zakres 0 – 65535.
Asc(napis1)   Zwraca numeryczną reprezentację Unicode pierwszej litery napis1. Przeciwieństwo Chr(int1).

Stany

W UnrealScript, możesz pisać funkcje i kod, który istnieje w określonym stanie. Funkcje te są wywoływane, kiedy aktor jest w takim stanie. Użyj opcjonalnego () przy deklarowaniu stanu, aby ujawnić to w UnrealEd.

Składnia:
Cytuj
słowo_kluczowe state() StateName extends ParentState
{
}

Składnia ustawianie stanu:
Cytuj
GotoState('StateName');

Przykład:
auto state Idle
{
   //kiedy zostanie dotknięte przez innego aktora
   function Touch (actor Other)
   {
      log("Dotknięty! Przejdź do stanu Attacking!");
      GotoState ('Attacking');
   }
Begin:
   log ("Jestem leniwy...");
   sleep(10);
   goto 'Begin';
}

Słowa_kluczowe:
auto (sprawia, że stan jest domyślny, kiedy aktor jest tworzony)

Reguły:
  • Jeśli wywołasz GotoState bez funkcji, to nie idzie to od razu do miejsca przeznaczenia, a raczej po wykonaniu wraca do [state code] stanu kodu(?).
  • Nowa klasa dziedziczy wszystkie stany jej klasy rodzicielskiej, włączając funkcje i pola bez ich stanów. Możesz: nadpisać dowolne odziedziczone funkcje stanu, nadpisać dowolne odziedziczone pola stanu, dodać nowe funkcje stanu i możesz dodać nowe pola stanu.
  • Jeśli stan nie nadpisze stanu o tej samej nazwie w klasie rodzicielskiej, wtedy możesz użyć opcjonalnie słowa kluczowego "extends", aby rozszerzyć stan na istniejący stan w bieżącej klasie.
  • Możesz powiedzieć jaki konkretnie stan aktora jest w jego "stanie" zmiennej (type "nazwa").
  • Używając GotoState('') umieszcza aktora w "bez stanie". W "bez stanie", tylko jej globalne (non-state) funkcje są wywoływane.
  • Podczas korzystania z GotoState(), żeby ustawić stan aktora, silnik może wywołać dwie specjalne funkcje powiadomienia, jeżeli zostało to określone dla nich: EndState() i BeginState().

Instrukcje przepływu sterowania (Flow - Control)

Instrukcje If:
if (i<10)
{
}
else if (i==10)
{
}
else
{
}

Pętle:
//Pętla For
for (i=0;i<4;i++)
{
}

//Pętla do until
do
{
   //tutaj skrypt
} until (i==4);

//Pętla do while
while (i<4)
{
}
Przypadki:
//Switch Case
switch(LightType)
{
   case LT_None:
      //tutaj skrypt
      break;
   case LT_Steady:
      //tutaj skrypt
      break;
   default:
      //tutaj skrypt
      break;
}

Break:
break;
Goto:
goto MyLabel2;

MyLabel1:
   //tutaj skrypt
MyLabel2:
   //tutaj skrypt

Kompilowanie i debugowanie

Kompilowanie:
Skompiluj skrypty uruchamiając: "YourGame.exe make".
.uc jest domyślnym rozszerzeniem nieskompilowanych skryptów.
.u jest domyślnym rozszerzeniem skompilowanych skryptów.
Debugowanie:
NIEZNANE. Był Udebugger.exe.

sahari

sahari

Użytkownicy
posty13
Propsy1
  • Użytkownicy
fajnie jakbyś przerobił ten obrazek a nie tutaj tak piszesz że nie wiadomo co i gdzie -.-
 

mgr Fartuess

mgr Fartuess

Użytkownicy
Kiedyś to były czasy!
posty1486
Propsy890
ProfesjaProgramista
  • Użytkownicy
  • Kiedyś to były czasy!
to czytaj treść posta, a nie porównuj z rozpiską. Wszystko jest chyba napisane :)
 
Popisuje się ciągle menda jedna...


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry