2023年4月3日月曜日

成功 速度一定 できた フレーム毎の 移動量 設定

 改良 試験


最初の 一個は 捨て





import bpy

from mathutils import Vector



zion_x =-10

zion_y = -50




distance_per_frame = 1.0  # 1フレームごとの移動距離(ブレンダー単位)

run_simultaneously = False  # True なら同時移動、False なら順次移動


for a in range(11):

    # 新しい球体を作成

    bpy.ops.mesh.primitive_uv_sphere_add(radius=1)

    sphere = bpy.context.object


    # 初期位置のキーフレームを設定

    sphere.location = Vector((zion_x +a * 10 + 10, zion_y, 0))

    sphere.keyframe_insert(data_path='location', frame=a * 10)


    # 終了位置のキーフレームを設定

    sphere.location = Vector((zion_x +a * 10 + 10, 500, 0))

    sphere.keyframe_insert(data_path='location', frame=500)


    # 位置のキーフレームを設定

    if run_simultaneously:

        for i in range(101):

            sphere.location = Vector((a * 10 + 10, i * distance_per_frame, 0))

            sphere.keyframe_insert(data_path='location', frame=i)

    else:

        current_frame = a * 10

        current_pos = Vector((a * 10 + 10, zion_y, 0))

        while current_frame <= 500:

            current_pos += Vector((0, distance_per_frame, 0))

            sphere.location = current_pos

            sphere.keyframe_insert(data_path='location', frame=current_frame)

            current_frame += 1


# アニメーションを再生

bpy.context.scene.frame_end = 500

bpy.ops.screen.animation_play()




現在のスクリプトでは、各球体が一定速度で移動するように設定されていますが、各球体が1フレーム毎に同じ距離だけ移動するようにするには、球体の位置をフレームごとに更新するときに、現在の位置から1フレームごとの移動距離を加算することが必要です。

修正後のスクリプトは以下のようになります


この修正後のスクリプトでは、distance_per_frame 変数に1フレームごとの移動距離を設定し、各球体の位置を while ループを用いてフレームごとに更新しています。また、順次移動する場合、現在のフレームと位置を変数 current_framecurrent_pos に格納しています。

これにより、各球体が1フレーム毎に同じ距離だけ移動するアニメーションが作成されます。





各球体が1フレーム毎に同じ速度で移動するように


run_simultaneously の値を False に設定する。

位置のキーフレームを設定する際のループの開始値を、球体の番号 a に合わせるように変更する。

修正後のスクリプトは以下のようになります。





import bpy

from mathutils import Vector


zion_y = -50


zion_speed = 0.2  # 1秒あたりの移動距離(ブレンダー単位)

run_simultaneously = False  # True なら同時移動、False なら順次移動


for a in range(11):

    # 新しい球体を作成

    bpy.ops.mesh.primitive_uv_sphere_add(radius=1)

    sphere = bpy.context.object


    # 初期位置のキーフレームを設定

    sphere.location = Vector((a * 10 + 10, zion_y, 0))

    sphere.keyframe_insert(data_path='location', frame=a * 10)


    # 終了位置のキーフレームを設定

    sphere.location = Vector((a * 10 + 10, 500, 0))

    sphere.keyframe_insert(data_path='location', frame=500)


    # 位置のキーフレームを設定

    if run_simultaneously:

        for i in range(101):

            sphere.location = Vector((a * 10 + 10, i * zion_speed, 0))

            sphere.keyframe_insert(data_path='location', frame=i)

    else:

        for i in range(a * 10, 101):

            sphere.location = Vector((a * 10 + 10, (i - a * 10) * zion_speed, 0))

            sphere.keyframe_insert(data_path='location', frame=i)


# アニメーションを再生

bpy.context.scene.frame_end = 500

bpy.ops.screen.animation_play()







# import bpy

# from mathutils import Vector


# zion_y = -50


zion_speed = 0.2  # 1秒あたりの移動距離(ブレンダー単位)

run_simultaneously = True  # True なら同時移動、False なら順次移動


for a in range(11):

    # 新しい球体を作成

    bpy.ops.mesh.primitive_uv_sphere_add(radius=1)

    sphere = bpy.context.object


    # 初期位置のキーフレームを設定

    sphere.location = Vector((a * 10 + 10, zion_y, 0))

    sphere.keyframe_insert(data_path='location', frame=a * 10)


    # 終了位置のキーフレームを設定

    sphere.location = Vector((a * 10 + 10, 500, 0))

    sphere.keyframe_insert(data_path='location', frame=500)


    # 位置のキーフレームを設定

    if run_simultaneously:

        for i in range(101):

            sphere.location = Vector((a * 10 + 10, i * zion_speed, 0))

            sphere.keyframe_insert(data_path='location', frame=i)

    else:

        for i in range(a * 10, 101):

            sphere.location = Vector((a * 10 + 10, (i - a * 10) * zion_speed, 0))

            sphere.keyframe_insert(data_path='location', frame=i)


# アニメーションを再生

bpy.context.scene.frame_end = 500

bpy.ops.screen.animation_play()






  # 初期位置のキーフレームを設定

    sphere.location = Vector((a * 10 + 10, zion_y, 0))

  

    # 終了位置のキーフレームを設定

    sphere.location = Vector((a * 10 + 10, 500, 0))


の 直線距離を zion_length を計算し


zion_standard = 500 


zion_slow = zion_standard / zion_length  にして


球体毎の速度に それぞれの zion_slow を掛けて

速度を調整して

改良中 y=-30 中心 円周への球体36個

できた y= -30 中心で z=0平面移動  import bpy import math zion_collection_name = "線路レール 観察者" # コレクションを作成する col = bpy.data.collections.new(zio...