Thanks. I think I understand what you mean, but I do want the object to return to localY = 0 so that it can continue to walk after jumping. Is there an option for the object to maintain its XZ plane speed automatically so I can just play with the Y values during jumping? I have something like this which calculates the new speed of the object to maintain a XZ plane speed, but with this I'm basically defining the jump off and landing points which seems to limit how I can jump and where I can land. Code (CSharp): Vector3 relativePos = endJumpPosition - startJumpPosition; //This maintains a constant speed in the XZ plane that's the same as entering the jump. Only tested when "jumping down" (endJumpPosition.y < startJumpPostion.y) speed = startSpeed / Mathf.Sin (Vector3.Angle (relativePos, Vector3.down) * Mathf.Deg2Rad); sMove.ChangeSpeed(speed); Would I have to do something like this every frame while in a "jumping state" to constantly change the object's speed so that its XZ plane is constant?