天天看點

uc腳本 1--變量與資料類型

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語言風格的行為,比如:

if( ++a==10 && ++b==10 )
         
這裡,如果第一個表達式失敗則跳過++b計算。

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(向量)

 ;及由傾斜度、偏轉度、旋轉度組成的 

rotator

 。請參照  Structs(結構體)部分獲得更多資訊。

Unreal類型

Name
在Unreal中一個東西的名稱(比如函數名、狀态名、類名等)。 Names(名稱)會作為一個索引存儲到全局名稱表中。Names(名稱)和簡單的字元串相對應,最多可以包含64個字元。Names(名稱)不像字元串那樣一旦建立不能改變(請檢視 Unreal 字元串獲得更多的資訊)。
對象和Actor引用
指向世界中另一個object 或 actor的變量。比如,Pawn類有一個 

Enemy

 actor 引用,那麼它指定了玩家應該攻擊的物體。Object 及actor引用是非常強大的工具,因為它們使您可以通路另一個actor的變量及函數。比如,在Pawn的腳本中,你可以用 

Enemy.TakeDamage(123)

 來調用您的敵人的

TakeDamage

 函數—進而導緻敵人受到傷害。Object 引用也可能包含着一個特殊值 

None=

 ,它和C 語言中的 

NULL

 指針是等同的: 它的意思是這個變量不能指向任何物體。
Delegate
儲存着到一個Unrealscript函數的引用。