Set out to implement a reset of the sphere’s position when said sphere is out of bounds and the player’s hands reopen after being closed for a fixed duration. One prompt into things, and good progress has already been made.
However, I need to make it so the sphere actually starts where it’s supposed to when the hands are reopened instead of teleporting it to the center position when the timer expires.
The simple solution is to delay teleportation from taking place until the hands have actually reopened.
The intense pull from a single hand after a reset feels jarring, though. This isn’t a new problem, but I don’t think I ever gave it any thought until now.
I see two possible solution routes here, and they aren’t mutually exclusive. Solution 1 would be to initialize teleportation only when both hands are open while the sphere is out of bounds and the timer has expired. Solution 2 would be to reduce the attraction pull to the target when only a single hand is open. It does make intuitive sense that a single hand shouldn’t be as strong as two hands, so I’ll start with that.
After going through my project, I realized that I’m already dampening the force towards the sphere’s target when only a single hand is open. Simply decreasing this singleHandOpenForceDamper won’t work since I only want to weaken the force to the hands when a hand first opens.
In my VFX graph, I’m already lerping the strength of the attraction force based on the hands’ state and using the proper curve to do so.

However, I was not lerping the attraction speed based on hand state. I decided to test that out; no difference in acceleration to the attractor target is noticeable. Below are two clips, unlerped (top) vs lerped (bottom).
The original is actually better because the particles properly return to the closed hand instead of dispersing away.
There’s an even better solution to this, and it’s dead simple. When teleporting the sphere back inbounds during a change from the closed hand state to the single hand open state, I should move the teleportation destination directly to the single open hand. I already do something similar in HandForce.CalculateMidpoint, where I set the sphere’s attraction target to the position of the single open hand rather than the midpoint between the hands.
On second thought, that idea has its warts. I’m glad I didn’t implement it right away— (Shout-out to my boss for giving me a task to do). If I were to teleport the target to either a specific hand when a single hand opens or to the center between the hands when both hands are open, I’d need to account for discrepancies in timing when a player naturally opens both hands at slightly different times. I’d need to delay teleportation and particle animations with a small threshold until the user’s intent is made clear, and even that won’t fully eliminate the potential for odd behaviors that ruin the intuitiveness of the experience.
Therefore, it seems the only true, proper, and simple solution is my original Solution 1: only allow teleportation when both hands are open. While implementing this, I made it so that the reset timer pauses when a single hand opens, thereby giving the user an extra chance to pull their sphere back into play naturally.
Next, I changed the force boundary to scale equally on all sides relative to the marching cubes boundary. Seems more logical. I also changed the scale of the metaball to match the sphere because, well, they should match. I’m not sure when that got messed up.

One other enhancement I did was making the singleHandOpenForceDamper only kick into effect when a sphere is inbounds. While the player tries to cajole their energy ball back into view, they’ll appreciate all the help they can get.
My computer keeps crashing, and I have other work to do. That’s enough for today.