https://ia2023sha.blogspot.com/2023/03/blog-post_24.html
フレーム毎の球体移動距離を すべての球体で 同じにしたい 移動終了地点に同時刻に 到着しないことになる スクリプト 全体 作成
この修正により、どの球体も1フレームで移動する距離だけが同じになります。distance_per_frameの値を変更することで、1フレームで移動する距離を調整することができます。
このスクリプトでは、移動距離をフレームごとに均等に設定しています。すべての球体が同じ速度で移動するため、すべての球体は同時に到着しないことになります。
import bpy
import math
from mathutils import Vector
# 目標位置を指定する
target_location = Vector((0, 30, 0))
# フレーム数を指定する
last_frame = 1500
# 移動する距離を指定する
distance_per_frame = 0.2
# 16個の球体を作成する
spheres = []
for i in range(16):
angle = 2 * i * 3.14159 / 16
x = 30 * math.cos(angle)
y = 30 * math.sin(angle)
z = 0
location = Vector((x, y, z))
radius = 1
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius)
obj = bpy.context.active_object
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_location = sphere.location
direction = (target_location - start_location).normalized()
for frame in range(1, last_frame + 1):
sphere.location += distance_per_frame * direction
sphere.keyframe_insert(data_path="location", frame=frame)
import bpy
import math
from mathutils import Vector
# 目標位置を指定する
target_location = Vector((0, 30, 0))
# フレーム数を指定する
last_frame = 150
# 移動する距離を指定する
distance_per_frame = 0.2
# 16個の球体を作成する
spheres = []
for i in range(16):
angle = 2 * i * 3.14159 / 16
x = 30 * math.cos(angle)
y = 30 * math.sin(angle)
z = 0
location = Vector((x, y, z))
radius = 1
bpy.ops.mesh.primitive_uv_sphere_add(location=location, radius=radius)
obj = bpy.context.active_object
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_location = sphere.location
direction = (target_location - start_location).normalized()
for frame in range(1, last_frame + 1):
sphere.location += distance_per_frame * direction
sphere.keyframe_insert(data_path="location", frame=frame)
import bpy
import math
from mathutils import Vector
# 目標位置を指定する
zion_target = Vector((0, 30, 0))
# ラストフレームを指定する
zion_last_frame = 500
# 移動する距離を指定する
distance_per_frame = 0.01
# オブジェクトを作成する関数
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, distance_per_frame):
distance = (target_location - obj.location).length
frames = int(distance / distance_per_frame) + 1
for frame in range(frames):
t = frame / (frames - 1)
obj.location = obj.location.lerp(target_location, t)
obj.keyframe_insert(data_path="location", frame=start_frame+frame)
# 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 = Vector((x, y, z))
radius = 1
create_sphere(location, radius)
obj = bpy.context.active_object
spheres.append(obj)
# アニメーションを設定する
for i, sphere in enumerate(spheres):
start_frame = 1
end_frame = zion_last_frame
set_animation(sphere, start_frame, end_frame, zion_target, distance_per_frame)