Blender学堂   

【首页】

Blender游戏约束运动:线性运动


【2024-04-20】 【Blender学堂】


6DOF指6个方向自由度,即沿三个方向的平动以及绕三个轴的转动。

建立两个立方体,分别用红色和绿色标识。

浏览图片

红色立方体命名为Cube_Red,物理属性为rigid body,即刚性物体。

绿色立方体命名为Cube_Green,物理属性为static,表示静止物。

在logic editor中建立如下逻辑关系

浏览图片

运行游戏后得到如下结果:

浏览图片

即,红色立方体将向右移动一定的位移。

游戏中使用的py程序如下:


import bge

# 得到当前场景
scene = bge.logic.getCurrentScene()

# 得到场景中的对象列表
objList = scene.objects

# obj1=名为OBCube_Green的对象(绿色)
obj1 = objList["Cube_Green"]

# obj2=名为OBCube_Red的对象(红色)
obj2 = objList["Cube_Red"]

# 使用6DOF约束
constraintType = bge.constraints.GENERIC_6DOF_CONSTRAINT

0 = No Constraint (没有约束)
1 = bge.constraints.POINTTOPOINT_CONSTRAINT(点对点约束)
2 = bge.constraints.LINEHINGE_CONSTRAINT(线铰链约束)
3 = bge.constraints.ANGULAR_CONSTRAINT(角度约束)
4 = bge.constraints.CONETWIST_CONSTRAINT(锥体扭转约束)
11 = bge.constraints.VEHICLE_CONSTRAINT(车辆约束)
12 = bge.constraints.GENERIC_6DOF_CONSTRAINT (6 自由度约束)

# 得到obj1 的物理id
obj1_ID = obj1.getPhysicsId()

# 得到obj2的物理id
obj2_ID = obj2.getPhysicsId()

# 使用obj1的中心作为轴心点
pivotPos_X = 0.0
pivotPos_Y = 0.0
pivotPos_Z = 0.0

# 创建6DOF约束
cube_6DOF = bge.constraints.createConstraint( obj1_ID, obj2_ID,
constraintType,
pivotPos_X, pivotPos_Y, pivotPos_Z)

# 设置轴点沿x移动的量
cube_6DOF.setParam(0, 0.0, 10.0)

# xyz三个方向不旋转
cube_6DOF.setParam(3, 0.0, 0.0)
cube_6DOF.setParam(4, 0.0, 0.0)
cube_6DOF.setParam(5, 0.0, 0.0)

#创建x方向的移动
cube_6DOF.setParam(6, -3.0, 100)


这里我们使用了setParam这个方法,其参数说明如下。

setParam(axis, min, max)
沿 x, y 和 z轴运动。
物体2使用物体1的轴运动。
axis: 整数类型,六个自由度的轴向
0 = x axis
1 = y axis
2 = z axis
3 = x axis rotation
4 = y axis rotation
5 = z axis rotation
min:浮点数
最小距离 (0.0 表示物体2的中心)
max:浮点数
最大距离 (0.0 表示物体2的中心)

setParam(axis, speed, acceleration)
旋转运动
物体2使用物体1的轴运动。
axis: 整数类型
6 = x axis
7 = y axis
8 = z axis
9 = x axis rotation
10 = y axis rotation
11 = z axis rotation
speed:浮点数
运动速度
acceleration:浮点数
加速度




copyright©2018-2024 blender.gotopie.com