コード例 #1
0
    def do_draw(self, context, scene, layout, obj):
        obj = get_unity_target(context)
        unity_settings = scene.unity_settings

        col = layout.column(align=True)
        row = col.row(align=True)

        row.prop(unity_settings, "mode")

        row.separator()

        if unity_settings.mode != "ACTIVE":
            row.prop_search(
                unity_settings,
                "target_armature",
                bpy.data,
                "objects",
                text="",
                icon=icons.ARMATURE_DATA,
            )

        row.separator()
        row.prop(
            unity_settings,
            "draw_sheets",
            toggle=True,
            text="",
            icon=unity_settings.icon_sheets,
        )
        row.prop(
            unity_settings,
            "draw_keyframes",
            toggle=True,
            text="",
            icon=unity_settings.icon_keys,
        )
        row.prop(
            unity_settings,
            "draw_clips",
            toggle=True,
            text="",
            icon=unity_settings.icon_clips,
        )

        obj = get_unity_target(context)

        if obj:
            row.separator()
            row.prop(obj.data, "pose_position", expand=True)
コード例 #2
0
    def finish_draw(self, context, scene, layout, obj, action, clip):
        obj = get_unity_target(context)
        box = layout.box()
        col = box.column(align=True)
        row = col.row(align=True)

        row_1 = row.split()
        row_1.enabled = False
        row_1.prop(clip, "action")

        row_2 = row.split()
        row_2.operator(UNITY_OT_sync_actions_with_clips.bl_idname, text="Sync")
        row_2.enabled = clip.action != clip.id_data

        row_3 = col.row(align=True)
        row_3.enabled = False
        row_3.prop(clip, "fbx_name")

        row_4 = col.row(align=True)
        row_4a = row_4.split()
        row_4a.prop(clip, "name")
        row_4a.enabled = clip.can_edit

        row_4b = row_4.split()
        row_4b.prop(clip,
                    "can_edit",
                    toggle=True,
                    text="",
                    icon=icons.UNLOCKED)
        row_4b.enabled = True
コード例 #3
0
    def do_execute(self, context):
        action = get_unity_target(context).animation_data.action
        clip = action.unity_clips[self.clip_name]

        clip.decorate_action(action)

        return {"FINISHED"}
コード例 #4
0
    def do_execute(self, context):
        action = get_unity_target(context).animation_data.action

        for clip in action.unity_clips:
            clip.action = action

        return {"FINISHED"}
コード例 #5
0
    def do_execute(self, context):
        obj = get_unity_target(context)
        action, clip, clip_index = get_unity_action_and_clip(context)

        self.bake_action(context, obj, action, clip)

        return {"FINISHED"}
コード例 #6
0
    def do_execute(self, context):
        obj = get_unity_target(context)

        action = obj.animation_data.action

        action.unity_clips.clear()

        return {"FINISHED"}
コード例 #7
0
    def do_draw(self, context, scene, layout, obj):
        obj = get_unity_target(context)
        action, clip, clip_index = get_unity_action_and_clip(context)

        if action is None or clip is None:
            return

        self.finish_draw(context, scene, layout, obj, action, clip)
コード例 #8
0
    def do_execute(self, context):
        obj = get_unity_target(context)

        action = obj.animation_data.action

        collections.sort(action.unity_clips, "frame_start")

        return {"FINISHED"}
コード例 #9
0
    def do_execute(self, context):
        obj = get_unity_target(context)
        scene = context.scene
        action = obj.animation_data.action

        clip = action.unity_clips[0]
        clip.refresh_keys()

        return {"FINISHED"}
コード例 #10
0
    def do_execute(self, context):
        obj = get_unity_target(context)

        clips = get_filtered_clips(context)

        for clip in clips:
            self.bake_action(context, obj, clip.action, clip)

        return {"FINISHED"}
コード例 #11
0
    def do_execute(self, context):
        obj = get_unity_target(context)
        scene = context.scene
        key_offset = 1

        path = bpy.path.abspath(scene.unity_settings.sheet_dir_path)
        action, clip, clip_index = get_unity_action_and_clip(context)

        UnityClipMetadata.parse_clip_files(context, path, key_offset, action)
        return {"FINISHED"}
コード例 #12
0
    def do_execute(self, context):
        master_action_name = "MASTER"
        master_action = bpy.data.actions[master_action_name]
        obj = get_unity_target(context)

        padding = 10
        round_to_nearest = 10

        master_action.unity_metadata.master_action = True
        master_action.unity_metadata.clips_protected = True
        master_action.unity_clips.clear()
        for marker in reversed(master_action.pose_markers):
            master_action.pose_markers.remove(marker)

        start = 1

        for action in bpy.data.actions:
            if (action == master_action or action.name.endswith("Action")
                    or action.name.endswith("_Layer")
                    or "PoseLib" in action.name):
                continue

            print("Getting metadata for action {0}".format(action.name))

            if start != 1:
                start += padding  # 47 + 10 = 57
                overlap = start % round_to_nearest  # 57 %  5 =  2
                offset = round_to_nearest - overlap  #  5 -  2 =  3
                start += offset  # 57 +  3 = 60  - clean frame start

            action_start = action.frame_range[0]
            action_end = action.frame_range[1]

            start -= action_start

            if action.unity_clips:
                for unity_clip in action.unity_clips:
                    new_clip = master_action.unity_clips.add()
                    new_clip.copy_from(unity_clip)

                    new_clip.action = master_action

                    new_clip.frame_start += start
                    new_clip.frame_end += start

            start += (action_end - action_start) + 1

        # print('Decorating {0} clips'.format(len(master_action.unity_clips)))
        # for clip in master_action.unity_clips:
        #    clip.decorate(master_action)

        for fc in master_action.fcurves:
            fc.update()

        return {"FINISHED"}
コード例 #13
0
    def do_execute(self, context):
        action = get_unity_target(context).animation_data.action

        for fcurve in action.fcurves:
            for clip in action.unity_clips:
                clip.demarcate(fcurve)

        for fcurve in action.fcurves:
            fcurve.update()

        return {"FINISHED"}
コード例 #14
0
    def do_execute(self, context):
        obj = get_unity_target(context)
        action = obj.animation_data.action
        clip = None

        if action.unity_clips:
            clip = action.unity_clips[action.unity_metadata.clip_index]

        self.do_clip(context, obj, action, clip)

        return {"FINISHED"}
コード例 #15
0
    def finish_draw(self, context, scene, layout, obj, action, clip):
        obj = get_unity_target(context)
        box = layout.box()
        col = box.column(align=True)

        row = col.row(align=True)
        row.operator(UNITY_OT_split_by_clip.bl_idname)
        row.operator(UNITY_OT_decorate_clip.bl_idname)
        row.operator(UNITY_OT_demarcate_clip.bl_idname)
        row = col.row(align=True)
        row.operator(UNITY_OT_bake_clip.bl_idname)
コード例 #16
0
    def do_poll(cls, context):
        ao = get_unity_target(context)
        if not ao:
            return False
        s = ao.data.root_motion_settings
        if not s:
            return False

        if s.original_root_bone == "":
            return False

        return True
コード例 #17
0
    def do_execute(self, context):
        action = get_unity_target(context).animation_data.action
        template = action.unity_metadata.clip_template

        action.unity_clips.clear()

        for clip in template.unity_clips:
            new_clip = action.unity_clips.add()
            new_clip.copy_from(clip)
            new_clip.action = action

        return {"FINISHED"}
コード例 #18
0
    def do_execute(self, context):
        action = get_unity_target(context).animation_data.action

        f = context.scene.frame_current
        for index, clip in enumerate(action.unity_clips):
            if f >= clip.frame_start and f <= clip.frame_end:
                action.unity_metadata.clip_index = index
                active_clip = clip
                break

        clamp_to_unity_clip(context, active_clip, True)

        return {"FINISHED"}
コード例 #19
0
    def do_execute(self, context):
        obj = get_unity_target(context)
        action = obj.animation_data.action

        for bone in obj.data.bones:
            if bone.parent is None and not self.rooted:
                bone.select = False
            else:
                bone.select = True

        apply_pose_to_frame(context, obj, self.pose_name, self.frame)

        return {"FINISHED"}
コード例 #20
0
    def finish_header(self, context, scene, layout, obj):
        obj = get_unity_target(context)
        action, clip, clip_index = get_unity_action_and_clip(context)
        if action is None or clip is None:
            return

        row = layout.row(align=True)

        row.label(text=clip.name)

        r2 = row.split()

        r2.alignment = "RIGHT"

        draw_settings = scene.unity_settings

        r2.prop(
            draw_settings,
            "draw_metadata",
            toggle=True,
            text="",
            icon=scene.unity_settings.icon_metadata,
        )
        r2.prop(
            draw_settings,
            "draw_root_motion",
            toggle=True,
            text="",
            icon=scene.unity_settings.icon_root_motion,
        )
        r2.prop(
            draw_settings,
            "draw_frames",
            toggle=True,
            text="",
            icon=scene.unity_settings.icon_frames,
        )
        r2.prop(
            draw_settings,
            "draw_pose",
            toggle=True,
            text="",
            icon=scene.unity_settings.icon_pose,
        )
        r2.prop(
            draw_settings,
            "draw_operations",
            toggle=True,
            text="",
            icon=scene.unity_settings.icon_operations,
        )
コード例 #21
0
    def finish_draw(self, context, scene, layout, obj, action, clip):
        obj = get_unity_target(context)
        box = layout.box()
        col = box.column(align=True)

        row = col.row(align=True)
        row1 = row.split()
        # row1.alignment = 'LEFT'
        row1.prop(clip, "frame_start", text="Start")
        row1.prop(clip, "frame_end", text="Stop")
        row2 = row.split()
        row2.separator()
        # row2.alignment = 'RIGHT'
        row2.prop(clip, "loop_time", text="Loop?")
コード例 #22
0
    def draw_template_list(self, context, layout):
        obj = get_unity_target(context)
        action = obj.animation_data.action
        rows = min(max(1, len(action.unity_clips)), 5)

        layout.template_list(
            "UNITY_UL_UnityClips",
            "",
            action,
            "clips",
            action.unity_metadata,
            "clip_index",
            rows=rows,
        )
コード例 #23
0
    def initiate_execute(self, context):
        c = context
        s = c.scene
        original_frame = s.frame_current
        s.frame_set(1)

        armature = get_unity_target(c)

        return (
            c,
            s,
            armature,
            original_frame,
        )
コード例 #24
0
    def do_execute(self, context):
        action = get_unity_target(context).animation_data.action

        start_ends, starts, ends, minf, maxf = get_clip_frame_range_analysis(
            action)

        for fcurve in action.fcurves:
            for keyframe_point in fcurve.keyframe_points:
                f = keyframe_point.co[0]

                if f in ends:
                    keyframe_point.interpolation = INTERPOLATION.CONSTANT
                else:
                    keyframe_point.interpolation = INTERPOLATION.LINEAR

        return {"FINISHED"}
コード例 #25
0
    def do_execute(self, context):
        obj = get_unity_target(context)
        scene = context.scene

        for action in bpy.data.actions:
            if len(action.unity_clips) != 1:
                continue

            clip = action.unity_clips[0]

            if clip.source_action is None:
                continue

            clip.refresh_keys()

        return {"FINISHED"}
コード例 #26
0
    def do_execute(self, context):
        obj = get_unity_target(context)
        action = obj.animation_data.action
        clip = action.unity_clips[action.unity_metadata.clip_index]

        bpy.ops.poselib.pose_add(frame=self.frame)

        new_pose = obj.pose_library.pose_markers["Pose"]
        new_pose.name = "{0} {1}".format(clip.name,
                                         "Start" if self.start else "End")

        if self.start:
            clip.pose_start = new_pose.name
        else:
            clip.pose_end = new_pose.name

        return {"FINISHED"}
コード例 #27
0
    def do_execute(self, context):
        action = get_unity_target(context).animation_data.action

        for clip in action.unity_clips:
            new_action_name = "{0}_{1}".format(action.name, clip.name)
            new_clip_name = clip.name
            new_action = split_action(
                action,
                new_action_name,
                clip.name,
                new_clip_name,
                clip.frame_start,
                clip.frame_end,
            )

        UNITY_OT_refresh_scene_all_clips.do_execute(
            UNITY_OT_refresh_scene_all_clips, context)
        return {"FINISHED"}
コード例 #28
0
    def do_draw(self, context, scene, layout, obj):
        obj = get_unity_target(context)
        layout.prop(scene.unity_settings, "sheet_dir_path")
        row = layout.row(align=True)
        row.operator(UNITY_OT_refresh_clip_data.bl_idname)
        row.operator(UNITY_OT_refresh_clip_data_all.bl_idname)
        row = layout.row(align=True)
        row.operator(UNITY_OT_clear_clip_data.bl_idname)
        row.operator(UNITY_OT_clear_clip_data_all.bl_idname)
        row = layout.row(align=True)
        row.operator(UNITY_OT_sort_clip_data.bl_idname)
        row.operator(UNITY_OT_sort_clip_data_all.bl_idname)

        if obj and obj.animation_data and obj.animation_data.action:
            row = layout.row(align=True)
            a = obj.animation_data.action
            row.prop(a.unity_metadata, "clip_template")
            row.operator(UNITY_OT_copy_clips_from_template.bl_idname)
コード例 #29
0
    def do_execute(self, context):
        action = get_unity_target(context).animation_data.action

        for fcurve in action.fcurves:
            for keyframe_point in reversed(fcurve.keyframe_points):
                f = keyframe_point.co[0]

                found = False
                for clip in action.unity_clips:
                    if f >= clip.frame_start and f <= clip.frame_end:
                        found = True
                    if found:
                        break

                if not found:
                    fcurve.keyframe_points.remove(keyframe_point)

        for fcurve in action.fcurves:
            fcurve.update()

        return {"FINISHED"}
コード例 #30
0
 def do_poll(cls, context):
     return (DOIF.UNITY.TARGET.SET(context) and len(
         get_unity_target(context).animation_data.action.unity_clips) > 1)