1.uc變量作用範圍 與聲明
在UnrealScript中可以聲明兩種類型的變量,這兩種變量由于其作用範圍不同而區分開來。變量的作用範圍決定了變量的生命周期及變量的可用範圍。
這兩種類型的變量是:
- Instance Variables(執行個體變量) - 這些變量應用于整個對象(類或結構體),并且在它們所屬對象的整個生命周期内都可用。執行個體變量在建立對象時建立,在銷毀對象時被銷毀。這些變量可以在屬于該對象的任何非靜态函數中使用,或通過到該變量所屬的的對象的引用可以從其他對象中通路該變量。使用var 關鍵字來聲明
- Local Variables(局部變量) - 這些變量是屬于函數的“局部”變量,它們屬于一個特定的函數。僅當執行函數時這些變量有效。當函數開始執行時建立這些局部變量,當函數執行結束時銷毀這些變量。不能從其它函數或其他對象中使用或通路它們。使用 local 關鍵字來聲明。
聲明的變量的方式與java 類似(java沒有關鍵字 var local )
var Type Name;
local Type Name;
關鍵字+資料類型+變量名稱
var int A; // Declare an integer variable named "A".
var byte Table[64]; // Declare a static array of 64 bytes named "Table".
var string PlayerName; // Declare a string variable named "PlayerName".
var actor Other; // Declare a variable which can be assigned a reference to an Actor instance.
var() float MaxTargetDist; // Declare a float variable named "MaxTargetDist" and allow its value to be modified from an UnrealEd property window.
struct RangeVector
{
var Vector Min; // Declare a vector variable named "Min" within the struct.
var Vector Max; // Declare a vector variable named "Max" within the struct.
};
var RangeVector Bounds; // Declare a RangeVector variable named "Bounds".
function foo
{
// All local variables must be declared before
// any other code in the function body
local int Count;
local float Seconds;
Count = 1;
// Declaring a local variable here would cause an error
local float Minutes;
return Count;
}
還有進階的變量的 修飾符,都是一些在遊戲中特有的。支援許多遊戲-和特定環境中-的專用概念。
- config
- 這個變量是可以配置的。目前的值将被儲存到一個ini檔案中并在建立時加載。 這個變量不能在預設屬性中指派。 意味着它是常量。 globalconfig
- 和config的使用基本相同,除了不可以在子類中重寫使用它所定義的變量。 這個變量不能在預設屬性中指派。 意味着它是常量。 localized
- 這個變量的值将會定義一個本地化變量。主要用于字元串。意味着它是常量。在本地化參考指南 及 Unreal 字元串獲得關于此的更多資訊。 const
- 把變量的内容當成一個常量。在UnrealScript,你可以讀取常量的值,但是你不能對其寫入值。"Const"僅用于引擎來負責更新的變量及不能從UnrealScript中安全地進行更新的變量,比如一個物體的位置(僅能通過調用MoveActor函數來進行設定)。 private
- 這個變量是私有的,僅能通過該類的腳本來進行通路;其它的類(包括子類)不能通路該變量。 protected
- 這個變量僅能由此變量的類及其子類進行通路,其它類不能通路。 repnotify
- 當通過複制接收到這個屬性的值時,應該通知Actors(通過 ReplicatedEvent 函數)。 deprecated
- 意味着這個變量在不久的将來将會被删除,并且将不能在編輯器中通路。 Deprecated屬性可以被加載,但不能被儲存。 instanced
- 僅用于對象屬性。 當建立了一個這個類的執行個體,将會預設地為這個變量賦予一個這個對象的唯一拷貝。 用于在類的預設屬性中定義的執行個體化子對象。 databinding
- 這個屬性可以通過資料庫系統進行操作。 editoronly
- 屬性值僅在運作UnrealEd或者一個指令開關時被加載。 在遊戲中,這個屬性值将被丢棄。 notforconsole
- 這個屬性值将僅在運作PC時加載。 在遊戲控制台中,該屬性值被丢棄。
- editconst
- 編輯器。這個變量可以在UnrealEd中看到,但不能被編輯。一個editconst變量并 不 暗示着它是"const"變量。 editfixedsize
- 編輯器。僅用于動态數組。這将防止使用者通過UnrealEd屬性視窗來改變數組的長度。 editinline
- 編輯器。允許使用者編輯在UnrealEd屬性視窗中編輯這個變量所引用的物體屬性。(僅用于對象引用,包括數組對象的引用)。 editinlineuse
- 編輯器。 除了執行 editinline 的相關行為外,在編輯器中這個對象引用的旁邊添加一個"Use"按鈕。 noclear
- 編輯器。防止從編輯器中将該對象引用設定為None。 interp
- 編輯器。意味着這個值可以受到Matinee中的浮點或向量屬性軌迹的驅動進而随時間改變。
- input
- 進階。使得在Unreal的輸入系統中是可以通路的該變量,進而使輸入(比如按鈕的押下和操作杆的運動)能夠和變量直接地進行映射。僅和變量類型"byte"和"float"相關。 transient
- 進階。說明這個變量是臨時使用的,且不是對象永久狀态的一部分。Transient變量不會被儲存到磁盤。當加載一個對象時,Transient變量被初始化為類的預設值。 duplicatetransient
- 進階。意味着當建立對象的一個二進制副本時,變量的值将被重置為類的預設值(通過StaticDuplicateObject). noimport
- 進階。 意味着當導入T3D文本時,将跳過這個變量。 換句話說,當導入或者 複制/粘帖 對象時,這個變量的值将不會被傳遞到新的對象執行個體中。 native
- 進階。聲明了這個變量通過C++代碼進行加載和儲存,而不是通過UnrealScript。 export
- 進階。僅對對象屬性(或對象數組)有用。 意味着當一個對象被複制(複制/粘帖)或導出到T3D中而不是僅僅輸出對象引用本身時,賦予給這個屬性的對象應該作為一個子對象塊整體地導出。 noexport
- 進階。僅用于native類。 這個變量不能包含在自動生成的類聲明中。 nontransactional
- 進階。意味着這個變量值的改變将不會被包含到編輯器的 取消/重複 曆史中。 pointer{type}
- 進階。 這個變量是一個指向 type(資料類型) 的指針 ( type(資料類型) 是随意的)。注意文法是: pointer varname(指針變量名){ type(資料類型)} init
- 進階。 這個屬性将被作為FString或TArray而不是一個FStringNoInit 或TArrayNoInit導出到頭檔案中。 僅适用于在native類中聲明的字元串和動态數組。 'Init'屬性不能被賦予預設值,因為當建立對象時,預設值将會被清除。(請檢視 Unreal 字元串 和 Native 字元串) repretry
- 進階;僅用于結構體屬性。如果沒能完全成功發送該屬性(比如,網絡上沒有獲得要進行序列化的對象應用)則重新複制它。對于簡單的引用來說這個處理是預設的,但是對于結構體來說,由于帶寬消耗通常我們不會将其作為預設修飾符,是以如果沒有指定這個标志将會禁用該處理。 allowabstract
- 高進;僅用于對象引用。允許在編輯器中将抽象類賦予該變量。
- out
- 這個修飾符僅對函數參數有效。 請檢視 函數參數修飾符頁面來擷取詳細資訊。 coerce
- 這個修飾符僅對函數參數有效。 請檢視 函數參數修飾符頁面來擷取詳細資訊。 optional
- 這個修飾符僅對函數參數有效。 請檢視 函數參數修飾符頁面來擷取詳細資訊。
- skip
-
這個修飾符僅對運算符函數參數有效。 僅用于邏輯運算符比如&& 和 ||。如果可以通過第一個參數決定邏輯操作的結果,那麼則告訴編譯器插入一小段代碼到程式流中以便跳過(不計算)第二個參數。
這保證了表達樹中C語言風格的行為,比如:
這裡,如果第一個表達式失敗則跳過++b計算。if( ++a==10 && ++b==10 )
2.中繼資料
變量也可以通過在每個變量上指定中繼資料的形式來具有額外資訊,以供引擎或編輯器使用,進而提供擴充功能。可以使用中繼資料指定一個顯示名稱、工具提示資訊、其他東西之間的最小值和最大值。
要想将中繼資料連結到變量,您可以将它添加到變量聲明中,它位于在變量名稱的後面且在結束聲明的分号的前面。中繼資料被指定為一系列成對的
Tag(标簽)=Value(值)
,位于尖括号内由豎線 (
|
)分隔< >。
變量類型
UnrealScript包含了多個可以在聲明變量時使用的内置資料類型。變量類型決定了它可以存放的資料的類型。某些類型非常簡單,而有些類型卻很難了解及應用。
基本資料類型
這裡是UnrealScript中支援的通常可以在其他語言中找到的基本資料類型的清單:
- byte(位元組型)
- 範圍是 到
的一個位元組值。255
int(整型) - 32位的整型值 bool(布爾型)
- 布爾值:
或true
。false
float(浮點型) - 32位的浮點數。 string(字元串型)
- 一個字元串。(請參照 虛幻字元串)。 constant(常量)
- 不能修改的變量。 enumeration(枚舉型)
- 一個能夠代表多個預先設定的整數值中其中一個值的變量。比如,在Actor腳本中定義的枚舉類型ELightType描述了一個動态光源,它可以具有像
等值。LT_None=、 =LT_Pulse=、 =LT_Strobe
集合資料類型
- array<Type>(數組類型)
- 一個
類型的數組。Type
-
var int MyArray[20];
struct - 和C中的結構體類似,UnrealScript的structs可以讓您建立包含子變量的新的變量類型。比如,兩個常用的Unreal structs是由X坐标、Y坐标及Z坐标組成的
;及由傾斜度、偏轉度、旋轉度組成的vector(向量)
。請參照 Structs(結構體)部分獲得更多資訊。rotator
Unreal類型
- Name
- 在Unreal中一個東西的名稱(比如函數名、狀态名、類名等)。 Names(名稱)會作為一個索引存儲到全局名稱表中。Names(名稱)和簡單的字元串相對應,最多可以包含64個字元。Names(名稱)不像字元串那樣一旦建立不能改變(請檢視 Unreal 字元串獲得更多的資訊)。 對象和Actor引用
- 指向世界中另一個object 或 actor的變量。比如,Pawn類有一個
actor 引用,那麼它指定了玩家應該攻擊的物體。Object 及actor引用是非常強大的工具,因為它們使您可以通路另一個actor的變量及函數。比如,在Pawn的腳本中,你可以用Enemy
來調用您的敵人的Enemy.TakeDamage(123)
函數—進而導緻敵人受到傷害。Object 引用也可能包含着一個特殊值TakeDamage
,它和C 語言中的None=
指針是等同的: 它的意思是這個變量不能指向任何物體。NULL
Delegate - 儲存着到一個Unrealscript函數的引用。