aaa
import bpy
import random
# タグ名
tag_name = "sokudoittei"
# コレクションを取得する
collection = bpy.data.collections.get(tag_name)
# コレクションが存在しない場合は作成する
if not collection:
collection = bpy.data.collections.new(tag_name)
bpy.context.scene.collection.children.link(collection)
# 球体の半径を設定
radius = 5.0
for i in range(50):
# 球体の初期位置と移動先の位置をランダムに設定
y = random.uniform(-300, 300)
loc_a_start = (0, y, 300)
loc_a_end = (0, 0, 0)
# 球体Aを作成し、初期位置を設定する
bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
obj_a = bpy.context.object
# コレクションにオブジェクトを追加する
collection.objects.link(obj_a)
# アニメーションのフレーム設定を行う
start_frame = 1 # アニメーションの最初のフレーム
end_frame_a = int(20 * bpy.context.scene.render.fps) # 球体Aの移動が終わるフレーム
bpy.context.scene.frame_start = start_frame # アニメーションの開始フレームを設定
bpy.context.scene.frame_end = end_frame_a # アニメーションの終了フレームを設定
# キーフレームを設定する
obj_a.location = loc_a_start # 球体Aの開始位置を設定
obj_a.keyframe_insert(data_path="location", frame=start_frame) # 開始フレームでキーフレームを設定
obj_a.location = loc_a_end # 球体Aの終了位置を設定
obj_a.keyframe_insert(data_path="location", frame=end_frame_a) # 終了フレームでキーフレームを設定
# アニメーション再生
bpy.ops.screen.animation_play() # アニメーションを再生
を使って
distance = (((0-0)**2 + (y-0)**2 + (300-0)**2)**0.5) *300
end_frame_a = int(distance *20 * bpy.context.scene.render.fps)
に 修正して
を使って
参考に 球体の発生位置を (0,-300,300) から (0,300,300)で 等間隔にして
球体の速度を 出現場所の数値を使って
(((300 - i*12) **2 + 300 **2 ) **(0.5)) *300 にして
start_position = Vector((0, 300 - i*12, 300))
球体の速度を 出現場所の数値を使って
1/(((300 - i*12) **2 + 300 **2 ) **(0.5)) にして
bbb
import bpy
import random
# タグ名
tag_name = "sokudoittei"
# コレクションを取得する
collection = bpy.data.collections.get(tag_name)
# コレクションが存在しない場合は作成する
if not collection:
collection = bpy.data.collections.new(tag_name)
bpy.context.scene.collection.children.link(collection)
# 球体の半径を設定
radius = 5.0
for i in range(50):
# 球体の初期位置と移動先の位置を設定
y = -300 + i * 12 # 出現位置を等間隔に設定
loc_a_start = (0, y, 300)
loc_a_end = (0, 0, 0)
# 球体Aを作成し、初期位置を設定する
bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
obj_a = bpy.context.object
# コレクションにオブジェクトを追加する
collection.objects.link(obj_a)
# アニメーションのフレーム設定を行う
start_frame = 1 # アニメーションの最初のフレーム
end_frame_a =20 * int((1/(300 - y) / 12) * bpy.context.scene.render.fps) # 球体Aの移動が終わるフレーム
bpy.context.scene.frame_start = start_frame # アニメーションの開始フレームを設定
bpy.context.scene.frame_end = end_frame_a # アニメーションの終了フレームを設定
# キーフレームを設定する
obj_a.location = loc_a_start # 球体Aの開始位置を設定
obj_a.keyframe_insert(data_path="location", frame=start_frame) # 開始フレームでキーフレームを設定
obj_a.location = loc_a_end # 球体Aの終了位置を設定
obj_a.keyframe_insert(data_path="location", frame=end_frame_a) # 終了フレームでキーフレームを設定
# 速度を設定する
speed = (((300 - y) ** 2 + 300 ** 2) ** (0.5))
obj_a.animation_data.action.fcurves[0].keyframe_points[0].interpolation = 'LINEAR' # キーフレームの補間方法を設定
for kf in obj_a.animation_data.action.fcurves[0].keyframe_points:
kf.co[1] = speed * (kf.co[0] - start_frame) # 速度を反映させる
# アニメーション再生
bpy.ops.screen.animation_play() # アニメーションを再生
distance = (((0-0)**2 + (y-0)**2 + (300-0)**2)**0.5) *300
y=300
import bpy
import random
# タグ名
tag_name = "sokudoittei"
# コレクションを取得する
collection = bpy.data.collections.get(tag_name)
# コレクションが存在しない場合は作成する
if not collection:
collection = bpy.data.collections.new(tag_name)
bpy.context.scene.collection.children.link(collection)
# 球体の半径を設定
radius = 5.0
# 発生位置のy座標リストを作成
y_positions = list(range(-300, 301, 12))
for i, y in enumerate(y_positions):
# 球体の初期位置と移動先の位置を設定
loc_a_start = (0, y, 300)
loc_a_end = (0, 0, 0)
# 球体Aを作成し、初期位置を設定する
bpy.ops.mesh.primitive_uv_sphere_add(radius=radius, location=loc_a_start)
obj_a = bpy.context.object
# コレクションにオブジェクトを追加する
collection.objects.link(obj_a)
# 球体の速度を設定する
speed = (1/(((300 - i*12) **2 + 300 **2 ) **(0.5))) * 300
# アニメーションのフレーム設定を行う
start_frame = 1 # アニメーションの最初のフレーム
end_frame_a = int(300 / speed * bpy.context.scene.render.fps) # 球体Aの移動が終わるフレーム
bpy.context.scene.frame_start = start_frame # アニメーションの開始フレームを設定
bpy.context.scene.frame_end = end_frame_a # アニメーションの終了フレームを設定
# キーフレームを設定する
obj_a.location = loc_a_start # 球体Aの開始位置を設定
obj_a.keyframe_insert(data_path="location", frame=start_frame) # 開始フレームでキーフレームを設定
obj_a.location = loc_a_end # 球体Aの終了位置を設定
obj_a.keyframe_insert(data_path="location", frame=end_frame_a) # 終了フレームでキーフレームを設定
(0,0,0)から(0,300,300)の長さを求めて
(0,0,0)から(0,y,300)の長さを求めて