前言:
最近在学单壹崽崽的绑定教程,学到了很多,所以简单的做点笔记。
一、车轮左右颠簸
思路:
1、颠簸控制器 同时控制物体轴心变化着 **物体的旋转**;
2、左右车轮控制器再用驱动关键帧的方法驱动 颠簸控制器;
3、注意这里并非用打组的方法控制。
效果预览图
…………………………………………………………………………………………
节点说明图
a:multiplyDivide 乘除节点
b:vectorProduct 向量积节点
B.car ra : 平衡车的半径
1.主要问题
B.car ra → b输入2 :主要是为了解决物体的缩放问题
vectorProduct 向量积节点 要选择 无缘算 规格化输出:向量的规格化[-1,1]之间,利于控制。
二、轮胎实时转动
1.轮胎x轴转动方向
mel语句表达式
if(FreeGo_body_ctrrl.auto==1)
{
float $angle1=angle(<<grpFreeGo_l_wheelDre_ctrl.translateX-grpFreeGo_l_wheelDre_ctrl.fx,grpFreeGo_l_wheelDre_ctrl.translateY-grpFreeGo_l_wheelDre_ctrl.fy,grpFreeGo_l_wheelDre_ctrl.translateZ-grpFreeGo_l_wheelDre_ctrl.fz>>,
<<vc_loc.translateX-grpFreeGo_l_wheelDre_ctrl.translateX,vc_loc.translateY-grpFreeGo_l_wheelDre_ctrl.translateY,vc_loc.translateZ-grpFreeGo_l_wheelDre_ctrl.translateZ>>);
float $dis=mag(<<grpFreeGo_l_wheelDre_ctrl.translateX-grpFreeGo_l_wheelDre_ctrl.fx,grpFreeGo_l_wheelDre_ctrl.translateY-grpFreeGo_l_wheelDre_ctrl.fy,grpFreeGo_l_wheelDre_ctrl.translateZ-grpFreeGo_l_wheelDre_ctrl.fz>>);
if ($angle1>1.570796)
{
$dis=-$dis;
}
}
如果
angle(<<轮胎位移向量>>,<<轮胎方向向量>>) 大于 90°
mag(<< 轮胎位移向量>> 为正
否则
mag(<< 轮胎位移向量>> 为负
2.轮胎x轴转动度数
FreeGo_l_wheel_ctrl.rotateX=(FreeGo_l_wheel_ctrl.rotateX+$dis/(2*3.1415*FreeGo_body_ctrrl.wheelRa)*360)%360;
轮胎旋转角度=(轮胎旋转角度+(位移)/(2Π轮胎半径) *360)%360
三.完整代码如下
if(FreeGo_body_ctrrl.auto==1)
{
float $angle1=angle(<<grpFreeGo_l_wheelDre_ctrl.translateX-grpFreeGo_l_wheelDre_ctrl.fx,grpFreeGo_l_wheelDre_ctrl.translateY-grpFreeGo_l_wheelDre_ctrl.fy,grpFreeGo_l_wheelDre_ctrl.translateZ-grpFreeGo_l_wheelDre_ctrl.fz>>,
<<vc_loc.translateX-grpFreeGo_l_wheelDre_ctrl.translateX,vc_loc.translateY-grpFreeGo_l_wheelDre_ctrl.translateY,vc_loc.translateZ-grpFreeGo_l_wheelDre_ctrl.translateZ>>);
float $dis=mag(<<grpFreeGo_l_wheelDre_ctrl.translateX-grpFreeGo_l_wheelDre_ctrl.fx,grpFreeGo_l_wheelDre_ctrl.translateY-grpFreeGo_l_wheelDre_ctrl.fy,grpFreeGo_l_wheelDre_ctrl.translateZ-grpFreeGo_l_wheelDre_ctrl.fz>>);
if ($angle1>1.570796)
{
$dis=-$dis;
}
FreeGo_l_wheel_ctrl.rotateX=(FreeGo_l_wheel_ctrl.rotateX+$dis/(2*3.1415*FreeGo_body_ctrrl.wheelRa)*360)%360;
grpFreeGo_l_wheelDre_ctrl.fx=grpFreeGo_l_wheelDre_ctrl.translateX;
grpFreeGo_l_wheelDre_ctrl.fy=grpFreeGo_l_wheelDre_ctrl.translateY;
grpFreeGo_l_wheelDre_ctrl.fz=grpFreeGo_l_wheelDre_ctrl.translateZ;
}