Unity3D的数据类型以及PlayMaker的变量

变量(variable)是用来储存数据的。

程序语言通常都会针对不同的用途设置不同的数据类型,以提高储存效率。因此在设置变量时,需要事先申明好变量的数据类型。

  • 保存“是”或者“非”的判断数据,仅需要1bit的储存空间;
  • 而 8bit = 1byte,于是1byte空间如果用来保存整数的话,就只能包括64个不同的整数了,不考虑负数的话只能0 63,考虑负数则只能-31 32;
  • 但要保存一段文字内容,所需要的储存空间就大得多了。
  • Unity3D中常用的数据类型

    “布尔”数据类型,其值要么是“True”(代表1)要么是“False”(代表0)。

    Bool数据常常用来表达一个判断,例如“场景中是否有Player”、“是否发生了碰撞”等等。

    Int数据用来表示整数,包括正整数、负整数、0。

    我们通常用int数据储存诸如:“xxx物体的数量”这样的数据。另外,for循环中也用int来计数。

    Float

    Float数据用来表示“小数”,同样包括正数、负数、和0。当然整数也可以用float数据类型来储存,只不过有点浪费。

    如果我们写脚本的时候直接赋值 a = 1,那么系统会自动将变量a设置为int类型,如果需要让系统自动将a设置为float,则可以写成 a = 1.0 或者 a = 1f。
    同理,如果让系统计算 a = 3 / 5,系统会认为3和5都是int类型,于是结果会 = 0。除非写成 a = 3f / 5f, 系统才会算出 = 0.6 。

    Float数据的应用范围就很广泛了,距离、时间、速度等等。

    String

    String数据用来表示“字符串”,也就是文字内容。

    游戏中要储存一句对话,就需要使用string类型的数据;获取游戏物体的名字,其数据格式也是string。

    要注意的是,UI中使用的文字都是string格式的,如果我们希望显示生命值为10,那么需要把10这个float类型的数据先转换成string类型的数据再赋给相应UI组件来使用。

    Vector2

    Vector2是二维矢量数据,相当于两个float数据组合起来。

    很多数据需要成对出现才有意义,比如屏幕坐标、方形的长宽等等,这时候就要用到Vector2。

    Vector2数据写法是用 , 将两个float数据连起来,再用 << >> 框起来,比如 <<320, 240>> 这样。

    Vector3

    Vector3是三维矢量数据,相当于三个float数据组合起来。

    Vector3的使用就很常见了,一个物体在三维空间中的坐标,运动的方向,translate、rotate、scale值,颜色(RGB)等数据都使用Vector3来储存。

    Vector3的写法和Vector2一样,只不过多了一个float数据,比如 <<2, 4, 6>>

    注意:Vector2和Vector3的每一个分量都是float形式的,所以写的时候不需要加“f”。

    GameObject

    GameObject类型的数据就没有上面这些那么好理解了,我们姑且认为这就是Unity3D中用来表示一个游戏物体的专有数据就好了。

    实际上,GameObject与其说是一个“数据”,不如说是一个“对象”。只不过我们还不了解什么叫“对象”,所以姑且当它是个特殊的数据吧。

    Array

    Array是“数组”,前述的任何一种数据类型,多个数据按顺序组合到一起就是一个“数组”。

    比如可以将全班所有人的名字组合成一个string类型数据的Array: names[] = {"name1", "name2", "name3", "name4"} ,如果需要获取 name1 ,则需要通过 names[0] 来得到。

    所以,一个有4个数据的数组,其编号是0、1、2、3,没有4。

    同时,数组只能将同一类型的数据放在一起,不能混搭,混搭就成了对象(object)了。

    Enum是一个“状态”数据。我们可以定义一个Enum,然后指定给它多个状态,比如“吃饭”、“睡觉”、“打豆豆”之类,然后通常这个Enum会被用在一个Switch条件语句中。

    PlayMaker中使用变量

    Color :用来表示颜色,本质上是Vector3 Rect :用来表示一个矩形方框的大小和在屏幕坐标系的位置,本质上是4个float的组合(X:方框左上角的横轴坐标;Y:方框左上角的纵轴坐标;W:方框宽度;H:方框高度),当然我们也可以用来表示别的东西 Material :材质,用来储存一个材质球(material)资源 Texture :贴图,用来储存一张图片资源 Quaternion :代表物体旋转角度的数据,但不同于我们常用的rotateX,rotateY,rotateZ这种算法 Object Object不是GameObject! Object其实是用来存放组件(component)的。对于一些PM中没有专门action支持的component,PM提供了Object这么一种数据类型让我们可以通过 Get Component 去获取一个component,然后在通过 Get Property Set Property 来获取或设置目标component的某个属性 Enum :PlayMaker的Enum不能自行创建其包含的状态,只能使用Unity3D已有的Enum结构来生成变量

    PlayMaker中所使用的变量都需要在PlayMaker中提前定义好。而且,由于PlayMaker又是可视化界面,因此对于所用数据的数据类型十分敏感,一个GameOjbect类型的数据是放不进一个Vector3类型的参数中去的。

    初学者一般都不是非常清楚每个Action的每个参数都需要哪种类型的数据。所以建议通过在Action的参数选择框中选择 New Variable 来创建变量,这样就可以得到正确的数据类型了: