Сделал в итоге так
private IEnumerator Move(Axis axis, int point)
{
var direction = Vector3.zero;
direction[(int) axis] = point;
_move = true;
if (Physics.RaycastAll(transform.position, direction, 2f).Length > 1)
{
_move = false;
yield break;
}
_finishPosition = transform.position + direction;
_timer = 0;
_curve = new AnimationCurve();
_curve.AddKey(0f, transform.position[(int) axis]);
_curve.AddKey(_speedMove, _finishPosition[(int) axis]);
while (true)
{
_tmpPosition = transform.position;
_tmpPosition[(int) axis] = _curve.Evaluate(_timer);
_rb.MovePosition(_tmpPosition);
if (transform.position == _finishPosition)
{
_move = false;
yield break;
}
_timer += Time.fixedDeltaTime;
yield return new WaitForFixedUpdate();
}
}
axis это enum с осями.
Есть проблема, иногда не выходит из цикла при достижение точки. Однако трансформ отдает нужную точку.