1
$\begingroup$

Q: Can or how can I call a keyframed action on an object and play it at a later frame time instead of its current dopesheets or NLAs playheads start?

Explainer:

Im trying to animate a sequence of objects when they reach a condition for a fake collision simulation. In this example multiple balls falling with paint, so two objects ball that bursts and paint object that splashes.

I thought I could setup up some keyframed actions and remove them from the object and later call them from nodes on conditions but found no node way to do this.

So then I limited the animation to keeping one animation action on the object and thought I could delay it at frame 1 by feeding it frame zero until its ready to play in full with a stopwatch. But found no node that did that either.

So now all im trying to do is call the one action without a name via the "action from object" node and delay it but that does not seem to work at all. I have tried unhooking all orders but nothing seems to respect what I was expecting, attached screenshot is a simple example

I also can not figure out how to make a stopwatch to feed a time value to a lerp but did see a post about that subject

animation nodes action test

$\endgroup$

2 Answers 2

0
$\begingroup$

As you can see the cube animation is from 0 to 20. By the node setup the delay is 40, so the animation starts at frame 40.

you can do it with this node setup:

enter image description here

$\endgroup$
2
  • $\begingroup$ Thank you this worked, I think the play activation was broken as well! I did figure out how to also do a delta time via script, which all post in an answer $\endgroup$ Commented Jul 30, 2021 at 15:52
  • $\begingroup$ Glad I could help $\endgroup$
    – Chris
    Commented Jul 30, 2021 at 15:53
0
$\begingroup$

As stated above that worked, I also figured out how to store a delta time on the object itself and feed it frames using a custom property. HOWEVER I encountered a logic issue for INVALID NETWORK that ill ask in another post

selfObject = bpy.data.objects[watashi.name]

if x > 0 and selfObject["hasPopped"] == 0 :
    selfObject["hasPopped"] = 1.0
    selfObject["startTime"] = timein

#outtext = watashi.name
#hasPopped = selfObject["hasPopped"]

hasPopped = selfObject["hasPopped"]

timeout = selfObject["startTime"]

deltaTime = timein - selfObject["startTime"]
if selfObject["hasPopped"] == 0 :
    deltaTime = 0

enter image description here

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .