How to modify gameObject's position in an animation?

I have a gameObject with Animation Controller. It has an animation of moving at Y axis. What I want to do is add a moving vector by x & z axis. I tried to modify gameObjects’s position at OnStateUpdate():

override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) {
		Vector3 newPosition = animator.gameObject.transform.position;
		Vector3 deltaVectorOnGround = animator.gameObject.GetComponent<HLItemSphere>().DeltaVectorOnGround;
		newPosition.x += deltaVectorOnGround.x * Time.deltaTime * 100;
		newPosition.z += deltaVectorOnGround.z * Time.deltaTime * 100; 
		animator.gameObject.transform.position = newPosition;
		Debug.Log(deltaVectorOnGround + " " + Time.deltaTime + " " + newPosition);
	}

I found it’s not working since the animation always override gameObject’s position every frame. So the actual position was based on animation itself, can’t modify it.

Is there any way or solution to modify gameObject’s position by code?

Use LateUpdate().