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:浮点数
加速度