本日は Blender の技術調査枠です。
Blender3.0で利用可能なpythonスクリプトを作ります。
アクションデータ内の各要素の値を参照する
アクションデータにはアクションの動きを示すカーブデータが含まれています。
カーブデータには設定したキーフレームのインデックス番号と値が含まれています。
docs.blender.org
サンプルスクリプト
スクリプトを実行すると指定したアクションのデータパス内に含まれる全てのインデックスと値が標準出力されます。
・Script_show_keyframelist_value.py
# bpyインポート import bpy # 指定アクションに含まれる全カーブのデータパス名を表示する def show_keyframelist_value(arg_actionname:str, arg_datapathname:str, arg_datapathindex:int) -> bool: """指定アクションに含まれる全カーブのデータパス名を表示する Keyword Arguments: arg_actionname {str} -- 指定文字列 Returns: bool -- 実行成否 """ # 指定名のアクションを取得する target_action = bpy.data.actions.get(arg_actionname) if target_action == None: return False # 指定データパスのカーブを取得する # FCurvesアクセスのマニュアル # (https://docs.blender.org/api/current/bpy.types.ActionFCurves.html) target_curve = target_action.fcurves.find(arg_datapathname, index=arg_datapathindex) # カーブ内の全キーポイントを走査する for keyframe_point in target_curve.keyframe_points: # キーフレームのインデックスとバリューを標準出力する # Keyframeアクセスのマニュアル # (https://docs.blender.org/api/current/bpy.types.Keyframe.html) print('FrameNumber = {}; Value = {}'.format(keyframe_point.co[0], keyframe_point.co[1])) return True # 関数の実行例 actionname = 'Action_Wait' datapathname = 'pose.bones["control.ChinIK"].location' datapathindex = 2 # ロケーションの場合 0:Xaxis, 1:Yaxis, 2:Zaxis の対応で値が保持されている show_keyframelist_value(arg_actionname=actionname, arg_datapathname=datapathname, arg_datapathindex=datapathindex)