gpt4 book ai didi

python - 如何使用 Python 在 Blender 2.78a 中制作关键帧?

转载 作者:行者123 更新时间:2023-12-04 16:11:01 25 4
gpt4 key购买 nike

我是 Blender 的新手和 Python 的新手,在我的第 1 层上我有一个名为“BallB”的球。

现在我想在 Blender 中使用 Python 制作一个简单的冒泡动画,但我无法制作关键帧。这应该发生在第 2 层。

我尝试了很多并遇到了很多错误......我发现的所有片段都不起作用,我的脚本总是因 Python 错误而崩溃

RuntimeError: Operator bpy.ops.anim.change ... expected an timeline/animation area to be activated

还有更多。

有没有人给我一些提示?

我想在 Blender 中学习脚本动画,所以我非常感谢每一个让我进步的提示 ;-)

我的代码:

import bpy, math, random

d = 4
anz = 100
frameAnz = 10

scene = bpy.context.scene
scene.frame_start = 1
scene.frame_end = 100


for anz in range (0,anz):

ball = bpy.data.objects["ballB"]

tball = ball.copy()
xpos = -1 * (d/2) + random.randint(0,(d-1))
xpos += random.random()
ypos = -1 * (d/2) + random.randint(0,(d-1))
ypos += random.random()
zpos = random.randint(0,(d-1))
zpos += random.random()



bn = str(anz).zfill(5)
bn = "zz_Ball-" + bn

tball.name = bn
tball.location = (xpos, ypos, zpos)
sz = random.uniform(0.015,0.09)


tball.scale = (sz,sz,sz)

#tball.nodes["Emission"].inputs[1].default_value = 200
tball.select = False
scene.objects.link(tball)
#print ("done!")

obj = bpy.context

for actFrame in range(1,frameAnz):
# scene = bpy.context.scene
# scene.keyframe_insert(data_path="gravity", frame = actFrame)


for ob in scene.objects:

ploc = ob.location
#print (ploc)
xpos = ploc[0]
ypos = ploc[1]
zpos = ploc[2]

zpos = zpos + random.random()
ob.location = (xpos, ypos, zpos)
#ypos = ball.location[1]
#zpos = ball.location]2]

#zpos = zpos - random.random()

#ball.location = (xpoy, ypos, zpos)
#obj.keyframe_insert_menu('Location')
#bpy.context.scene.frame_set(0)
#scene = bpy.context.scene
#scene.keyframe_insert(data_path="Location", frame=actFrame)

实际上它看起来是这样的:

enter image description here

最佳答案

你很接近,你想用obj.keyframe_insert() ,使用索引参数,您可以仅对一个位置值设置关键帧。

您会遇到的一个问题是,复制初始对象意味着新对象将使用相同的动画数据,从而使它们保持一致移动。您可以创建一个新对象并使用相同的网格数据。

一个对象 layers属性是一个包含 20 个 bool 值的数组,用于指定它在何处可见,当您将对象添加到场景时,它将被设置为在事件层上可见,因此请在将其链接到场景后进行设置。

import bpy, random

d = 4
anz = 100
frameAnz = 20
scene = bpy.context.scene
scene.frame_start = 1
scene.frame_end = 100
ball = bpy.data.objects["ballB"]

for anz in range (0,anz):
xpos = -1 * (d/2) + random.randint(0,(d-1))
xpos += random.random()
ypos = -1 * (d/2) + random.randint(0,(d-1))
ypos += random.random()
zpos = random.randint(0,(d-1))
zpos += random.random()

bn = str(anz).zfill(5)
bn = "zz_Ball-" + bn

tball = bpy.data.objects.new(bn, ball.data)
tball.location = (xpos, ypos, zpos)
sz = random.uniform(0.015,0.09)
tball.scale = (sz,sz,sz)

tball.select = False
scene.objects.link(tball)
tball.layers = [False,True] + [False]*18

for actFrame in range(1,frameAnz):
for ob in scene.objects:
ob.location.z += random.random()
ob.keyframe_insert(data_path='location', index=2, frame=actFrame)

关于python - 如何使用 Python 在 Blender 2.78a 中制作关键帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41457479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com