Unity3D的數(shù)據(jù)類型以及PlayMaker的變量

變量(variable)是用來儲(chǔ)存數(shù)據(jù)的。

程序語言通常都會(huì)針對(duì)不同的用途設(shè)置不同的數(shù)據(jù)類型,以提高儲(chǔ)存效率。因此在設(shè)置變量時(shí),需要事先申明好變量的數(shù)據(jù)類型。

  • 保存“是”或者“非”的判斷數(shù)據(jù),僅需要1bit的儲(chǔ)存空間;
  • 而 8bit = 1byte,于是1byte空間如果用來保存整數(shù)的話,就只能包括64個(gè)不同的整數(shù)了,不考慮負(fù)數(shù)的話只能063,考慮負(fù)數(shù)則只能-3132;
  • 但要保存一段文字內(nèi)容,所需要的儲(chǔ)存空間就大得多了。

Unity3D中常用的數(shù)據(jù)類型

Bool

“布爾”數(shù)據(jù)類型,其值要么是“True”(代表1)要么是“False”(代表0)。

Bool數(shù)據(jù)常常用來表達(dá)一個(gè)判斷,例如“場(chǎng)景中是否有Player”、“是否發(fā)生了碰撞”等等。

Int

Int數(shù)據(jù)用來表示整數(shù),包括正整數(shù)、負(fù)整數(shù)、0。

我們通常用int數(shù)據(jù)儲(chǔ)存諸如:“xxx物體的數(shù)量”這樣的數(shù)據(jù)。另外,for循環(huán)中也用int來計(jì)數(shù)。

Float

Float數(shù)據(jù)用來表示“小數(shù)”,同樣包括正數(shù)、負(fù)數(shù)、和0。當(dāng)然整數(shù)也可以用float數(shù)據(jù)類型來儲(chǔ)存,只不過有點(diǎn)浪費(fèi)。

如果我們寫腳本的時(shí)候直接賦值 a = 1,那么系統(tǒng)會(huì)自動(dòng)將變量a設(shè)置為int類型,如果需要讓系統(tǒng)自動(dòng)將a設(shè)置為float,則可以寫成 a = 1.0 或者 a = 1f。
同理,如果讓系統(tǒng)計(jì)算 a = 3 / 5,系統(tǒng)會(huì)認(rèn)為3和5都是int類型,于是結(jié)果會(huì) = 0。除非寫成 a = 3f / 5f, 系統(tǒng)才會(huì)算出 = 0.6 。

Float數(shù)據(jù)的應(yīng)用范圍就很廣泛了,距離、時(shí)間、速度等等。

String

String數(shù)據(jù)用來表示“字符串”,也就是文字內(nèi)容。

游戲中要儲(chǔ)存一句對(duì)話,就需要使用string類型的數(shù)據(jù);獲取游戲物體的名字,其數(shù)據(jù)格式也是string。

要注意的是,UI中使用的文字都是string格式的,如果我們希望顯示生命值為10,那么需要把10這個(gè)float類型的數(shù)據(jù)先轉(zhuǎn)換成string類型的數(shù)據(jù)再賦給相應(yīng)UI組件來使用。

Vector2

Vector2是二維矢量數(shù)據(jù),相當(dāng)于兩個(gè)float數(shù)據(jù)組合起來。

很多數(shù)據(jù)需要成對(duì)出現(xiàn)才有意義,比如屏幕坐標(biāo)、方形的長(zhǎng)寬等等,這時(shí)候就要用到Vector2。

Vector2數(shù)據(jù)寫法是用,將兩個(gè)float數(shù)據(jù)連起來,再用<<>>框起來,比如<<320, 240>>這樣。

Vector3

Vector3是三維矢量數(shù)據(jù),相當(dāng)于三個(gè)float數(shù)據(jù)組合起來。

Vector3的使用就很常見了,一個(gè)物體在三維空間中的坐標(biāo),運(yùn)動(dòng)的方向,translate、rotate、scale值,顏色(RGB)等數(shù)據(jù)都使用Vector3來儲(chǔ)存。

Vector3的寫法和Vector2一樣,只不過多了一個(gè)float數(shù)據(jù),比如<<2, 4, 6>>

注意:Vector2和Vector3的每一個(gè)分量都是float形式的,所以寫的時(shí)候不需要加“f”。

GameObject

GameObject類型的數(shù)據(jù)就沒有上面這些那么好理解了,我們姑且認(rèn)為這就是Unity3D中用來表示一個(gè)游戲物體的專有數(shù)據(jù)就好了。

實(shí)際上,GameObject與其說是一個(gè)“數(shù)據(jù)”,不如說是一個(gè)“對(duì)象”。只不過我們還不了解什么叫“對(duì)象”,所以姑且當(dāng)它是個(gè)特殊的數(shù)據(jù)吧。

Array

Array是“數(shù)組”,前述的任何一種數(shù)據(jù)類型,多個(gè)數(shù)據(jù)按順序組合到一起就是一個(gè)“數(shù)組”。

比如可以將全班所有人的名字組合成一個(gè)string類型數(shù)據(jù)的Array:names[] = {"name1", "name2", "name3", "name4"},如果需要獲取name1,則需要通過names[0]來得到。

所以,一個(gè)有4個(gè)數(shù)據(jù)的數(shù)組,其編號(hào)是0、1、2、3,沒有4。

同時(shí),數(shù)組只能將同一類型的數(shù)據(jù)放在一起,不能混搭,混搭就成了對(duì)象(object)了。

Enum

Enum是一個(gè)“狀態(tài)”數(shù)據(jù)。我們可以定義一個(gè)Enum,然后指定給它多個(gè)狀態(tài),比如“吃飯”、“睡覺”、“打豆豆”之類,然后通常這個(gè)Enum會(huì)被用在一個(gè)Switch條件語句中。


PlayMaker中使用變量

pm_variable_new0.png

在PlayMaker的Variable面板中可以新建變量。變量通常僅在該FSM中使用,如果需要在多個(gè)FSM中自由調(diào)用該變量,需要將其定位為Global Variable。

pm_variable_new1.png

如果需要在Inspector中修改變量,需要勾上“Inspector”選項(xiàng)。

PlayMaker提供多種數(shù)據(jù)類型給我們使用:

pm_variable_types.png

除了使用前面提到的Unity3D數(shù)據(jù)類型作為變量類型以外,PM還提供了一些比較特別的變量類型。比如:

  • Color:用來表示顏色,本質(zhì)上是Vector3
  • Rect:用來表示一個(gè)矩形方框的大小和在屏幕坐標(biāo)系的位置,本質(zhì)上是4個(gè)float的組合(X:方框左上角的橫軸坐標(biāo);Y:方框左上角的縱軸坐標(biāo);W:方框?qū)挾龋籋:方框高度),當(dāng)然我們也可以用來表示別的東西
  • Material:材質(zhì),用來儲(chǔ)存一個(gè)材質(zhì)球(material)資源
  • Texture:貼圖,用來儲(chǔ)存一張圖片資源
  • Quaternion:代表物體旋轉(zhuǎn)角度的數(shù)據(jù),但不同于我們常用的rotateX,rotateY,rotateZ這種算法
  • ObjectObject不是GameObject!Object其實(shí)是用來存放組件(component)的。對(duì)于一些PM中沒有專門action支持的component,PM提供了Object這么一種數(shù)據(jù)類型讓我們可以通過Get Component去獲取一個(gè)component,然后在通過Get PropertySet Property來獲取或設(shè)置目標(biāo)component的某個(gè)屬性
  • Enum:PlayMaker的Enum不能自行創(chuàng)建其包含的狀態(tài),只能使用Unity3D已有的Enum結(jié)構(gòu)來生成變量

PlayMaker中所使用的變量都需要在PlayMaker中提前定義好。而且,由于PlayMaker又是可視化界面,因此對(duì)于所用數(shù)據(jù)的數(shù)據(jù)類型十分敏感,一個(gè)GameOjbect類型的數(shù)據(jù)是放不進(jìn)一個(gè)Vector3類型的參數(shù)中去的。

初學(xué)者一般都不是非常清楚每個(gè)Action的每個(gè)參數(shù)都需要哪種類型的數(shù)據(jù)。所以建議通過在Action的參數(shù)選擇框中選擇New Variable來創(chuàng)建變量,這樣就可以得到正確的數(shù)據(jù)類型了:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 11,141評(píng)論 6 13
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,764評(píng)論 18 399
  • 第一類:邏輯型boolean 第二類:文本型char 第三類:整數(shù)型(byte、short、int、long) c...
    Jasonme閱讀 1,106評(píng)論 0 4
  • 文/Crystal阿魚 說來慚愧 也許是因?yàn)榧拍?也許是急于想要忘記上一個(gè)人 又或許當(dāng)初是有那么一點(diǎn)點(diǎn)的動(dòng)心 我正...
    zxyCCrystal閱讀 3,107評(píng)論 0 0
  • 搞笑說一句,讓我想起了衡水一中 彈幕里有人說,飛越瘋?cè)嗽旱慕Y(jié)局形式,我認(rèn)為點(diǎn)題了 。 如果從未被賦予選擇的權(quán)利,這...
    cookie貓閱讀 838評(píng)論 0 0