1つ1つの球体速度を
(終点位置ー開始位置)の 直線距離で 割って
zion_speed = 10
zion_speed を 掛けて
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, speed):
distance = math.dist(obj.location, target_location) # 初期位置と目標位置の直線距離を計算
duration = distance / speed # 移動に必要な時間を計算
obj.keyframe_insert(data_path="location", frame=start_frame)
obj.location = target_location
obj.keyframe_insert(data_path="location", frame=start_frame + duration)
# 16個の球体を作成する
spheres = []
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
spheres.append(obj)
# すべての球体の速度を変更する
zion_speed = 10
for sphere in spheres:
distance = math.dist(sphere.location, (0, -30, 0))
speed = 1 / distance * zion_speed
set_animation(sphere, 1, 250, (0, -30, 0), speed)
作動するけど 到着時刻 同じ球体 16個
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, 250, (0, -30, -30))
このスクリプトでは、set_animation()
関数が更新され、オブジェクトの速度を計算しています。 set_animation()
関数は、移動するオブジェクト、開始フレーム、終了フレーム、目標位置、およびオブジェクトの速度を引数として受け取ります。start_location
とdistance
変数を使用して、オブジェクトの現在位置から目標位置までの直線距離を計算します。duration
変数は、オブジェクトが目標位置に到達するのに必要なフレーム数を計算します。最後に、オブジェクトの速度に基づいてフレーム数を計算し、アニメーションを設定します。
16個の球体が作成され、set_animation()
関数が呼び出されて、各オブジェクトが目標位置に移動するアニメーションが作成されます。オブジェクトの速度は、 set_animation()
関数が自動的に計算するため、速度は手動で計算する必要はありません。
bbb