使用python脚本将对象链接到混合器中关键帧处的父对象



我想在第40帧将对象链接到其父对象,并在第80帧取消链接。我觉得应该是这样的:

o.parent = p
o.keyframe_insert(data_path="???", index=-1, frame=40)
o.parent = None
o.keyframe_insert(data_path="???", index=-1, frame=80)

谢谢!

经过谷歌搜索和实验,我想出了一个关于如何设置和取消设置(也就是影响(子约束的小例子。

import bpy
def add_frame(oArgObject, sArgType, dArgFrame, sArgName):
if sArgType == 'location':
oArgObject.keyframe_insert(data_path='location', index=-1, frame=dArgFrame)
elif sArgType == 'influence':
oArgObject.keyframe_insert(data_path='constraints["'+sArgName+'"].influence', frame=dArgFrame)
else:
print('Unrecognized frame option: ' + sArgType)

def add_parent(oArgChild, oArgParent, bArgScale):
sName = 'Child' + oArgChild.name + 'Parent' + oArgParent.name
if sName in oArgChild.constraints:
print('Constraint ' + sName + ' exists')
else:
oConst = oArgChild.constraints.new(type = 'CHILD_OF')
oConst.name = sName
oConst.target = oArgParent
oConst.use_scale_x = bArgScale[0]
oConst.use_scale_y = bArgScale[1]
oConst.use_scale_z = bArgScale[2]
print('Constraint ' + sName + ' added')

def set_influence(oArgChild, oArgParent, dArgFrame, dArgInfluence): 
sName = 'Child' + oArgChild.name + 'Parent' + oArgParent.name
if sName in oArgChild.constraints:
index = 0
while oArgChild.constraints[index].name != sName:
index += 1
o = oArgChild.constraints[index]
o.influence = 1 - dArgInfluence
add_frame(oArgChild, 'influence', dArgFrame-1, sName)
o.influence = dArgInfluence
add_frame(oArgChild, 'influence', dArgFrame, sName)
else:
print('No constraints exists for object ' + oArgChild.name)

bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete()
bpy.ops.mesh.primitive_cube_add(size = 1, location = (1,0,0))
oParent1 = bpy.context.object
oParent1.scale = (0.5, 1.0, 0.5)
oParent1.name = 'Parent1'
add_frame(oParent1, 'location', 10, 'n/a')
oParent1.location.x += 4
add_frame(oParent1, 'location', 50, 'n/a')
bpy.ops.mesh.primitive_cube_add(size = 1, location = (0,1,0))
oParent2 = bpy.context.object
oParent2.scale = (1.0, 0.5, 0.5)
oParent2.name = 'Parent2'
add_frame(oParent2, 'location', 60, 'n/a')
oParent2.location.y += 4
add_frame(oParent2, 'location', 100, 'n/a')
bpy.ops.mesh.primitive_cube_add(size = 1, location = (0,0,1))
oChild = bpy.context.object
oChild.scale = (0.5, 0.5, 1.0)
oChild.name = 'Child'
add_frame(oChild, 'location', 5, 'n/a')
add_parent(oChild, oParent1, (True,True,True))
add_parent(oChild, oParent2, (False,False,False))
set_influence(oChild, oParent1, 20, 1)
set_influence(oChild, oParent1, 40, 0)
set_influence(oChild, oParent2, 70, 1)
set_influence(oChild, oParent2, 90, 0)

最新更新