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$
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$ Jul 30 at 15:52
  • $\begingroup$ Glad I could help $\endgroup$
    – Chris
    Jul 30 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$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.