常用表达式用法

本篇教程将为大家介绍一些比较常用的表达式的使用方法, 如果您还不清楚表达式的概念,可以参阅表达式
点我下载教程工程

转换成整数:int(x)

int()用于将指定值变成整数类型,一般在下面两种情况下会有使用

  • 将字符串的数字转换成数值:例如将 “1” 转换成 1 : int(“1”)
  • 将小数变成整数:向下取整,例如将 1.5 变成 1。: int(1.5)

生成随机数:random(a,b)

random(a,b)会生成一个随机值(可以是小数),随机值的范围在a和b之间,包含a但不包含b。
例如:random(0,10) 可以生成0、2.5、9.9等,但是不会生成10。可以搭配其他表达式,例如【int(random(0,10))+1】产生1-10的整数

从指定列表中随机选择值:choose(a,b,…)

choose表达式与random类似,根据参数随机选出一个值。 choose可以写多个参数,系统会自动从参数中随机选择一个返回。 例如:choose(1,3,5,7,9) 会随机从这个5个数字中返回一个值。
choose的参数也可以是字符串: choose(1,“a”,2.4,“Hello”)

计算两点的直线距离: distance(A.x,A.y,B.x,B.y)

distance表达式用于计算两个坐标之间的直线距离,前两个参数代表了对象A的坐标,后两个参数为对象B的坐标。 需要了解的是,A到B的距离等于B到A的距离,所以写成distance(B.x,B.y,A.x,A.y)得到的数值也是一样的。

限制值的范围:clamp(x,min,max)

clamp表达式用于限制值x的范围,让其不会小于min,不会大于max。
当x小于min时,返回min,当x大于max时,返回max,当x位于min和max之间时,返回x。
例如:

  1. clamp(10,5,20) 返回10。 因为10大于5并且小于20,位于二者之间。
  2. clamp(3,6,9) 返回6。 3小于6,超出了clamp指定的范围,所以返回6.
  3. clamp(100,10,50) 返回50. 100大于50,同样超出了clamp的指定范围,所以返回50.

clamp表达式可应用的领域很多,只要希望将一个值限定在指定范围内,都可以使用该表达式。 例如限制生命的范围0~100、限制对象移动的距离等。

数值的平滑更改(线性插值): lerp(a,b,x)

线性插值lerp表达式用于数值A到数值B的平滑改变,可以用在对象移动、镜头移动、大小更改等涉及数值改变的地方。
大致原理为,lerp根据X的值,在a和b之间返回一个特定的值。 x是0~1之间的数字,可以理解为返回值在a和b之间的比例。 x是0时,返回a。x是1时,返回b。X是0.5时,返回a和b中间数字。
b通常是最终的目标数值,a是当前的数值。 将lerp(a,b,x)的返回值赋值到a中,使a不断发生改变,因此a和b的距离也不断发生改变。
最初,a和b的距离最远,lerp所返回的值变化也很大,当a和b的距离不断缩小,lerp返回值变化逐渐变小,最后趋近于无变化(使用lerp时,返回的值不会等于b,只会无限接近b)。
具体使用:精灵A.x=lerp(精灵A.x,500,dt*10)
x的值,通常我们使用dt*指定值,dt代表了当前帧在这一秒内占用的时间,如果不好理解,可以当做一个指定的小数,例如:1/60。 dt的详细说明会在下面教程中讲到。
lerp可以搭配clamp使用,在镜头控制教程中有详细说明

字符串分割: tokenat(str,index,split)、tokencount(str,split)

tokencount返回通过指定分隔符分割后的字符串数量
tokenat返回通过指定分隔符分割后,指定序号的字符串

参数str是要进行分割的目标字符串
index是已经分割的字符串列表下标,下标从0开始。
split是字符串分割符,表达式将通过该分割符对字符串进行分割。

例如:tokenat(“a,b,c,d,e”,2,",") 代表通过英文逗号",“对目标字符串进行分割,并返回下标为2的分割结果。 字符串通过逗号会被分割成a b c d e ,其中c为下标为2的字符,所以表达式将返回c。
而tokencount(“a,b,c,d,e”,”,")返回5, 因为逗号将字符串分割成了5份。

此外,如果split参数填写空字符串:"",代表将每个字符单独分割,例如"a,b,c"将被分割成:“a” “,” “b” “,” "c"5个字符

使用字符串分割表达式,可以实现仅通过一个变量来存储多个信息,在本次教程实例中,用于存储需要生成的对象名称