作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 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)
实际上它看起来是这样的:
最佳答案
你很接近,你想用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/
我是一名优秀的程序员,十分优秀!