1.6.2 关系运算
所谓的关系运算,是指对两个操作数的值进行比较,得出它们的关系是否与关系运算符表示的关系一致,比较的双方可以是变量值或属性值。
下图所示为Maya认可的关系运算符。
关系运算的结果经常会用作一段程序是 否执行的条件。
1.6.3 逻辑运算
上文中提到的关系运算实际上是一 些简单的判断,这些判断都是单个条件,这是比较简单的一种用法。很多时候可能需要同时满足多个条件,或是满足多个条件中的一个就可以了,这时就需要用到逻辑运算。下图所示为常用的逻辑运算符。
逻辑运算主要有两个:“与” 运算和“或”运算。
“与”运算
“与”运算表示同时满足两个条件,即A符合条件1和条件2。
“或”运算
“或”运算表示只需要满足给出的两个条件中的一-个就可以,即A符合条件1或条件2。
例如:
if (time> 5) && (time< 10))
Ball.scaleZ = time;
表示当时间在第5~ 10秒之间时,Ball的scaleZ (缩放Z)属性等于时间。使用的逻辑运算为“与”运算,即时间必须同时满足大于5小于10的条件,Ball的scaleZ (缩放Z)属性才等于时间,当时间小于5秒或者超过10秒后,Ball的scaleZ (缩放Z)属性不再与时间保持致。
试想一下:如果将此条件语句中的“与”运算(&&)换成“或”运算(),会发生什么情况?因为任何时候时间都一定会符合“大于5”或者“小于10”两个条件中的一个,所以Ball的scaleZ属性总是等于时间。
虽然在条件语句中逻辑运算符连接的是两个或两个以上的关系运算,但还是要一起放在if后的小括号中,以表明一起构成一一个判断条件。
1.7 条件语句
在任何一种编程语言中,都有根据逻辑判断的结果选择不同的程序运行过程的结构,这种结构叫做条件语句,也叫条件分支语句、判断语句或选择语句。条件语句的执行过程为先对某一条件进行判断,例如两个数是否相等,某数是否大于另一一个数或小于另一个数,根据判断结果正确与否执行不同的程序段,即当判断结果为“真”时执行一段程序,当判断结果为“假”时执行另一段程序。条件语句的流程如下图所示。
条件语句包括: if和switch两种语句。
if语句
常用的if语句有以下3种形式。
●形式1:
if(条件)进程1
如下图所示。
●形式2:
if(条件)进程1
else进程2;
如下图所示。
形式3:
if(条件1)进程1
else if (条件2)进程2;
else if (条件3)进程3;
……
else进程n;
如下图所示。
形式1主要用于表达式运行过程中可能出现的某一特殊情况, 需要进行特殊处理。例如用表达式控制小球从高处落下,并在地面上弹跳的运动过程,整个过程中小球都受到重力的影响,所以重力对小球速度变化的影响是始终存在并且恒定的,即“当前帧小球速度=上一帧小球速度-9.8x单帧时间”始终成立,当小球与地面碰撞时小球会受弹力作用,速度发生反转,也就是说只有这一个时间点小球的速度要进行反向处理,即“小球的速度= -小球速度”(注意,这里的“=”不是数学中的“等于”,而是计算机语言中的赋值)。
将它们一并写成类似计算机语言的形式如下。
if (小球中心距地面小于小球半径且小球速度向下)小球的速度= -小球速度;
小球速度=小球速度-9.8/ 帧率;
形式2主要用于两种并行情况,还以从高处下落的小球为例。在释放小球的前一刻为计时零点,这一刻小球同时受手的握力与重力,而且二者平衡,所以这刻可以视为小球不受力, 即速度为0,加速度为0,除此之外的任何时刻,加速度等于重力加速度。小球运动速度的变化符合规律“当前帧小球速度=上一帧小球速度-9.8x单帧时间”, 将它写成类似计算机语言的形式如下。
if ( time为零)小球的速度=0;
else小球速度=小球速度-9.8/帧率;
形式3主要用于有3种或3种以上的并行情况。
1.8 循环语句
在工作中经常会遇到这样一些任务: 总是对同一个物体重复同项操作,或对不同的物体重复同一项操作,这种情况下可以将所有发生的操作罗列出来,也可以使用循环语句来缩短代码。
循环语句的基本功能是根据预先设置的条件反复执行相同的操作,其中被反复执行的操作称为循环体。
1.8.1 循环语句的基本形式
在大多数计算机语言中,循环语句有两种基本形式: while循环和for循环。
while循环又称为当型循环,其基本结构为:当条件为“真"时重复执行循环体中的指令。根据循环体与循环条件的先后关系,while循环又有两种具体形式: while和do-while。
for循环是较为常用的一种循环语句形式,for循环也有 两种具体形式: for和for-in。 本教程主要介绍for循环和for-in循环。
1.8.2 for循环
For循环的格式
For (设定循环初值;循环条件判定;改变循环变量)
循环体;
实例7: For循环计算
for($t= -5;$t <0;$t=$t+ 1)
{
print("t minus"+ (-$t) + " seconds and counting.\n");
}
print("Houston, we have lift-off!\n");
运行结果如下:
t minus 5 seconds and counting.
t minus 4 seconds and counting.
t minus 3 seconds and counting.
t minus 2 seconds and counting.
t minus 1 seconds and counting.
Houston, we have lift-off!
1.8.3 for -in循环
for-in循环是由for循环派生出来的一种形式,这种形式专门用于阵列(数组)。for-in循环只需要一个元素,在循环过程中它依次指向阵列(数组)中的每个成员,由此确定循环过程。
实例8: For in循环计算
string $car;
string $cars[3] = {'n NSX",”Porsche", 'n Acura];
for ($car in $cars)
print("Ihavea + $car + ".n");
运行结果如下:
I have an NSX.
I have a Porsche.
I have an Acura.
这个例子也可以写成for循环的形式。
int $carIndex;
string $cars[3] = {n NSX", " Porsche', 'n Acura};
for ($carIndex = O; $carindex < size($cars); $carIndex++)
print("I have a' + $cars[$carIndex] + "\n");
1.9 MEL命令
MEL脚本的基础就是MEL命令,接下来介绍MEL命令的一般形式和几个最常用的MEL命令。
1.9.1 MEL命令的一般形式
几乎所有的MEL命令在使用时都会以下面的形式出现。
command [-修饰词[参数] ]物体名;
command:任意条MEL命令。
[-修饰词[参数]]:用来规定命令操作中的.些具体细节,如操作方式,参数项等。
物体名:用来指定命令的操作对象。它可能是场景中的一一个节点名,也可能是一一个节点的属性或者是一个文件名,有一些命令不需要指定操作对象。
除了以上提到的这3部分以外,MEL命令的格式中还有一项重 要内容是必不可少的,即命令结束符“;”分号。所有的命令都必须以分号结束,对于中国用户来说,还必须注意分号不能是全角分号,而必须是单字节的英文分号。
实例9:张开曲面
(1)在命令行中输入并执行下列命令。
sphere -n mySpmod;
场景原点位置新生成一个轴向与世界坐标系x轴平行的NURBS球体,球体半径为1,如下图所示。
(2)在命令行中输入并执行下列命令。
sphere -q -ax mySpmod;
执行结果:
//Result: 100//球体轴向。
(3)在命令行中输入并执行下列命令。
sphere -e -esw 300 mySpmod;
执行结果:球体由闭口状态变为张口状态。
1.9.2 MEL命令的修饰词
在上例中-q、-e、-esw和-ax都是sphere命令的修饰词,它还包含-p、-SSw、 -r、-d、-ut、-tol、 -S、-nsp和-ch等修饰词。
修饰词-q表明当前命令为询问操作,-e表 明当前命令为编辑操作,这两个修饰词指定命令的操作方式。其他的修饰词控制命令操作对象NURBS小球的参数,-p:小球的位置,-ax: 轴向,-ssw:包裹范围的起始角,-esw: 包裹范围的终止角,一r:半径,-d:小球的光滑级别,-s: 径向分段数,-nsp: 纬向分段数,-ch: 是否保留历史等。
不同的命令有完全不同的命令参数修饰词。
1.9.3 Is命令
格式
Is <修饰词> <物体名>
返回值
字符串组
命令说明
该命令会列出场景中各种不同的节点(或物体)名,具体由命令所带的修饰词决定。
1.9.4 select命令
格式
select <修饰词> <物体名>
返回值
字符串组
命令说明
该命令用来控制选择操作,即完成诸如有条件地选择、加选、从选择集中去除部分对象等操作,使用此命令会改变选择集中的内容。
命令修饰词
-all:选择所有最高- -级的可删除物体。
-hi/-hierarchy:选择当前所选物体的所有下级物体,包括子级及更深层级的物体。
-add:加选物体。
-r/-replace:替换选择,相当于清空原来选择集中的内容,重新选择指定物体。
-d/-deselect:减选,从当前选择集中去除指定物体。
-c/-clear:清除选择集中的内容。
1.9.5 getAttr命令
格式
getAttr <修饰词>节点名.属性名。
命令说明
该命令用来查询指定节点属性的有关信息。
命令修饰词
k/-keyable:返回指定属性是否可设关键帧。可设关键帧的transform (变换)属性会显示在主窗口右边的Channels Box (通道盒),如果没有显示在通道盒中,则是不可设关键帧的。
-l/-lock:返回指定属性是否被锁定,即不可更改。
-typ/-type:返回指定属性的数据类别。
-s/-size:返回多值属性阵列的属性值个数,非多值属性,结果为1。所谓多值属性是节点上一个属性名对应许多属性值,如粒子物体的position (位置)属性、NURBS物体的cp (CV点)属性。
-t/-time<time>:返回指定时间的属性值。
1.9.6 setAtr命令
格式
setAttr <修饰词>节点名.属性名属性值<值>
返回值
没有返回值。
命令说明
该命令用来改变属性值或属性状态。
命令修饰词
-k/-keyable Boolean:改变节点属性是否可设关键帧的状态,这个操作通常使用主窗口菜单中的Channel Control编辑器来完成。
-1/-lock boolean:改变节点属性的锁定状态,这个操作通常也用[通道控制( Channel Control) ]编辑器来完成。
-typ/-type string: 确认属性的数据类型,如果不使用-type修饰词,则会假定属性数据类型是数字型的。
M27.2 表达式
表达式动画采用一种数学的方式来控制物体属性的变化,这种方式非常适合制作可以用数学公式精确描述的运动方式。
热门课程
专业讲师指导 快速摆脱技能困惑相关文章
多种教程 总有一个适合自己专业问题咨询
你担心的问题,火星帮你解答学习游戏开发班可以帮助游戏爱好者从零基础成为游戏开发专家,掌握全面的游戏开发技能。
火星时代教育为您提供专业的界面设计实战班,在实践中掌握界面设计的核心技巧和最新趋势,成为优秀的UI设计师。
了解UI交互设计培训的最佳选择,比较不同培训机构的优势和特点。
火星时代教育为您推荐专业的学影视后期培训机构,提供高质量的培训内容及资深导师指导,助您成为优秀的影视后期剪辑师或合成师。
火星时代教育是一家专注于交互设计培训的机构,为学员提供专业的交互设计培训课程,并帮助他们成为优秀的交互设计师。
本文章将介绍关于UE5智慧城市专业学习的重要性和火星时代教育的资讯。
1. 打开微信扫一扫,扫描左侧二维码
2. 添加老师微信,马上领取免费课程资源
同学您好!