變量(variable)是用來儲存數(shù)據(jù)的迁筛。
程序語言通常都會針對不同的用途設(shè)置不同的數(shù)據(jù)類型咳蔚,以提高儲存效率。因此在設(shè)置變量時锯茄,需要事先申明好變量的數(shù)據(jù)類型涛菠。
- 保存“是”或者“非”的判斷數(shù)據(jù),僅需要1bit的儲存空間撇吞;
- 而 8bit = 1byte俗冻,于是1byte空間如果用來保存整數(shù)的話,就只能包括64個不同的整數(shù)了牍颈,不考慮負(fù)數(shù)的話只能063迄薄,考慮負(fù)數(shù)則只能-3132;
- 但要保存一段文字內(nèi)容煮岁,所需要的儲存空間就大得多了讥蔽。
Unity3D中常用的數(shù)據(jù)類型
Bool
“布爾”數(shù)據(jù)類型,其值要么是“True”(代表1)要么是“False”(代表0)画机。
Bool數(shù)據(jù)常常用來表達(dá)一個判斷冶伞,例如“場景中是否有Player”、“是否發(fā)生了碰撞”等等步氏。
Int
Int數(shù)據(jù)用來表示整數(shù)响禽,包括正整數(shù)、負(fù)整數(shù)、0芋类。
我們通常用int數(shù)據(jù)儲存諸如:“xxx物體的數(shù)量”這樣的數(shù)據(jù)隆嗅。另外,for循環(huán)中也用int來計數(shù)侯繁。
Float
Float數(shù)據(jù)用來表示“小數(shù)”胖喳,同樣包括正數(shù)、負(fù)數(shù)贮竟、和0丽焊。當(dāng)然整數(shù)也可以用float數(shù)據(jù)類型來儲存,只不過有點浪費咕别。
如果我們寫腳本的時候直接賦值 a = 1粹懒,那么系統(tǒng)會自動將變量a設(shè)置為int類型,如果需要讓系統(tǒng)自動將a設(shè)置為float顷级,則可以寫成 a = 1.0 或者 a = 1f凫乖。
同理,如果讓系統(tǒng)計算 a = 3 / 5弓颈,系統(tǒng)會認(rèn)為3和5都是int類型帽芽,于是結(jié)果會 = 0。除非寫成 a = 3f / 5f翔冀, 系統(tǒng)才會算出 = 0.6 导街。
Float數(shù)據(jù)的應(yīng)用范圍就很廣泛了,距離纤子、時間搬瑰、速度等等。
String
String數(shù)據(jù)用來表示“字符串”控硼,也就是文字內(nèi)容泽论。
游戲中要儲存一句對話,就需要使用string類型的數(shù)據(jù)卡乾;獲取游戲物體的名字翼悴,其數(shù)據(jù)格式也是string。
要注意的是幔妨,UI中使用的文字都是string格式的鹦赎,如果我們希望顯示生命值為10,那么需要把10這個float類型的數(shù)據(jù)先轉(zhuǎn)換成string類型的數(shù)據(jù)再賦給相應(yīng)UI組件來使用误堡。
Vector2
Vector2是二維矢量數(shù)據(jù)古话,相當(dāng)于兩個float數(shù)據(jù)組合起來。
很多數(shù)據(jù)需要成對出現(xiàn)才有意義锁施,比如屏幕坐標(biāo)陪踩、方形的長寬等等杖们,這時候就要用到Vector2。
Vector2數(shù)據(jù)寫法是用,
將兩個float數(shù)據(jù)連起來膊毁,再用<<
和>>
框起來,比如<<320, 240>>
這樣基跑。
Vector3
Vector3是三維矢量數(shù)據(jù)婚温,相當(dāng)于三個float數(shù)據(jù)組合起來。
Vector3的使用就很常見了媳否,一個物體在三維空間中的坐標(biāo)栅螟,運動的方向,translate篱竭、rotate力图、scale值,顏色(RGB)等數(shù)據(jù)都使用Vector3來儲存掺逼。
Vector3的寫法和Vector2一樣吃媒,只不過多了一個float數(shù)據(jù),比如<<2, 4, 6>>
注意:Vector2和Vector3的每一個分量都是float形式的吕喘,所以寫的時候不需要加“f”赘那。
GameObject
GameObject類型的數(shù)據(jù)就沒有上面這些那么好理解了,我們姑且認(rèn)為這就是Unity3D中用來表示一個游戲物體的專有數(shù)據(jù)就好了氯质。
實際上募舟,GameObject與其說是一個“數(shù)據(jù)”,不如說是一個“對象”闻察。只不過我們還不了解什么叫“對象”拱礁,所以姑且當(dāng)它是個特殊的數(shù)據(jù)吧。
Array
Array是“數(shù)組”辕漂,前述的任何一種數(shù)據(jù)類型呢灶,多個數(shù)據(jù)按順序組合到一起就是一個“數(shù)組”。
比如可以將全班所有人的名字組合成一個string類型數(shù)據(jù)的Array:names[] = {"name1", "name2", "name3", "name4"}
钉嘹,如果需要獲取name1
填抬,則需要通過names[0]
來得到。
所以隧期,一個有4個數(shù)據(jù)的數(shù)組飒责,其編號是0、1仆潮、2宏蛉、3,沒有4性置。
同時拾并,數(shù)組只能將同一類型的數(shù)據(jù)放在一起,不能混搭,混搭就成了對象(object)了嗅义。
Enum
Enum是一個“狀態(tài)”數(shù)據(jù)屏歹。我們可以定義一個Enum,然后指定給它多個狀態(tài)之碗,比如“吃飯”蝙眶、“睡覺”、“打豆豆”之類褪那,然后通常這個Enum會被用在一個Switch條件語句中幽纷。
PlayMaker中使用變量
在PlayMaker的Variable面板中可以新建變量。變量通常僅在該FSM中使用博敬,如果需要在多個FSM中自由調(diào)用該變量友浸,需要將其定位為Global Variable。
如果需要在Inspector中修改變量偏窝,需要勾上“Inspector”選項收恢。
PlayMaker提供多種數(shù)據(jù)類型給我們使用:
除了使用前面提到的Unity3D數(shù)據(jù)類型作為變量類型以外,PM還提供了一些比較特別的變量類型祭往。比如:
-
Color
:用來表示顏色派诬,本質(zhì)上是Vector3 -
Rect
:用來表示一個矩形方框的大小和在屏幕坐標(biāo)系的位置,本質(zhì)上是4個float的組合(X:方框左上角的橫軸坐標(biāo)链沼;Y:方框左上角的縱軸坐標(biāo)默赂;W:方框?qū)挾龋籋:方框高度)括勺,當(dāng)然我們也可以用來表示別的東西 -
Material
:材質(zhì)缆八,用來儲存一個材質(zhì)球(material)資源 -
Texture
:貼圖,用來儲存一張圖片資源 -
Quaternion
:代表物體旋轉(zhuǎn)角度的數(shù)據(jù)疾捍,但不同于我們常用的rotateX奈辰,rotateY,rotateZ這種算法 -
Object
:Object不是GameObject乱豆!Object其實是用來存放組件(component)的奖恰。對于一些PM中沒有專門action支持的component,PM提供了Object這么一種數(shù)據(jù)類型讓我們可以通過Get Component
去獲取一個component宛裕,然后在通過Get Property
和Set Property
來獲取或設(shè)置目標(biāo)component的某個屬性 -
Enum
:PlayMaker的Enum不能自行創(chuàng)建其包含的狀態(tài)瑟啃,只能使用Unity3D已有的Enum結(jié)構(gòu)來生成變量
PlayMaker中所使用的變量都需要在PlayMaker中提前定義好。而且揩尸,由于PlayMaker又是可視化界面蛹屿,因此對于所用數(shù)據(jù)的數(shù)據(jù)類型十分敏感,一個GameOjbect類型的數(shù)據(jù)是放不進(jìn)一個Vector3類型的參數(shù)中去的岩榆。
初學(xué)者一般都不是非常清楚每個Action的每個參數(shù)都需要哪種類型的數(shù)據(jù)错负。所以建議通過在Action的參數(shù)選擇框中選擇
New Variable
來創(chuàng)建變量坟瓢,這樣就可以得到正確的數(shù)據(jù)類型了: