-30,0,0 から 30,0,0 に 等間隔で11個の球体を作り 0,-30,0 へ 同じ速度で移動するアニメ ー、ー30,0への到着時刻は 異なることになる
同時刻 到着
import bpy
import math
# オブジェクトを作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location):
obj.keyframe_insert(data_path="location", frame=start_frame)
obj.location = target_location
obj.keyframe_insert(data_path="location", frame=end_frame)
# -30,0,0 から 30,0,0 に等間隔で11個の球体を作成する
for i in range(11):
x = -30 + i * 6
y = 0
z = 0
location = (x, y, z)
radius = 1
create_sphere(location, radius)
obj = bpy.context.active_object
set_animation(obj, 1, 250, (0, -30, 0))
import bpy
import math
# オブジェクトを作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location):
obj.keyframe_insert(data_path="location", frame=start_frame)
obj.location = target_location
obj.keyframe_insert(data_path="location", frame=end_frame)
# -30,0,0 から 30,0,0 に等間隔で11個の球体を作成する
for i in range(11):
x = -30 + i * 6
y = 0
z = 0
location = (x, y, z)
radius = 1
create_sphere(location, radius)
obj = bpy.context.active_object
# 等速直線運動のアニメーションを設定する
start_frame = 1
end_frame = 250
distance = math.sqrt((30 - x) ** 2 + (0 - y) ** 2 + (0 - z) ** 2)
speed = distance / (end_frame - start_frame)
duration = end_frame - start_frame
arrival_time = duration * (30 - x) / distance
target_location = (x, -30, 0)
set_animation(obj, start_frame, start_frame + int(arrival_time), target_location
このスクリプトでは、16個の球体を作成し、それらを座標(0, 0, 0)に移動するアニメーションを設定しています。アニメーション速度を変えるには、以下のように set_animation 関数内の start_frame と end_frame の値を調整します。
scss
Copy code
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location):
obj.keyframe_insert(data_path="location", frame=start_frame)
obj.location = target_location
obj.keyframe_insert(data_path="location", frame=end_frame)
# 16個の球体を作成する
for i in range(16):
angle = 2 * i * math.pi / 16
x = 30 * math.cos(angle)
y = 30 * math.sin(angle)
z = 0
location = (x, y, z)
radius = 1
create_sphere(location, radius)
obj = bpy.context.active_object
set_animation(obj, 1, 500, (0, 0, 0)) # アニメーション速度を変える
import bpy
import math
# オブジェクトを作成する関数
def create_sphere(location, radius):
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius)
# アニメーションを設定する関数
def set_animation(obj, start_frame, end_frame, target_location):
obj.keyframe_insert(data_path="location", frame=start_frame)
obj.location = target_location
obj.keyframe_insert(data_path="location", frame=end_frame)
# 16個の球体を作成する
for i in range(16):
angle = 2 * i * math.pi / 16
x = 30 * math.cos(angle)
y = 30 * math.sin(angle)
z = 0
location = (x, y, z)
radius = 1
create_sphere(location, radius)
obj = bpy.context.active_object
set_animation(obj, 1, 500, (0, -30, 0))
import bpy
# 現在のアニメーションの設定を取得する
scene = bpy.context.scene
frame_start = scene.frame_start
frame_end = scene.frame_end
fps = scene.render.fps
# 新しいアニメーションの設定を計算する
frame_end_new = frame_start + int((frame_end - frame_start) * (500 / 250))
fps_new = fps * 2
# アニメーションの設定を更新する
scene.frame_end = frame_end_new
scene.render.fps = fps_new
このスクリプトを実行すると、現在のアニメーションの設定を取得し、新しいアニメーションの設定を計算して、それらを更新します。新しいフレームレートは現在のフレームレートの倍になります。
bbb