变量(variable)是用来储存数据的。
程序语言通常都会针对不同的用途设置不同的数据类型,以提高储存效率。因此在设置变量时,需要事先申明好变量的数据类型。
- 保存“是”或者“非”的判断数据,仅需要1bit的储存空间;
- 而 8bit = 1byte,于是1byte空间如果用来保存整数的话,就只能包括64个不同的整数了,不考虑负数的话只能063,考虑负数则只能-3132;
- 但要保存一段文字内容,所需要的储存空间就大得多了。
Unity3D中常用的数据类型
Bool
“布尔”数据类型,其值要么是“True”(代表1)要么是“False”(代表0)。
Bool数据常常用来表达一个判断,例如“场景中是否有Player”、“是否发生了碰撞”等等。
Int
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,然后指定给它多个状态,比如“吃饭”、“睡觉”、“打豆豆”之类,然后通常这个Enum会被用在一个Switch条件语句中。
PlayMaker中使用变量
在PlayMaker的Variable面板中可以新建变量。变量通常仅在该FSM中使用,如果需要在多个FSM中自由调用该变量,需要将其定位为Global Variable。
如果需要在Inspector中修改变量,需要勾上“Inspector”选项。
PlayMaker提供多种数据类型给我们使用:
除了使用前面提到的Unity3D数据类型作为变量类型以外,PM还提供了一些比较特别的变量类型。比如:
-
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
来创建变量,这样就可以得到正确的数据类型了: