Можно лерпить кватернион для нахождения промежуточных точек. Насчёт оптимальности пути ничего не скажу, но выглядит корректно. Сначала находите локальные координаты объектов, потом нормализуете их и получаете направление. Создаёте вращение от одного направления к другому и ступеньками его применяете для расчёта точек. Рисовать проще всего с помощью LineRenderer.
using UnityEngine;
public class LineExample : MonoBehaviour
{
public LineRenderer lineRenderer;
public Transform a;
public Transform b;
public float sphereRadius = 0.5f;
public int positionCount = 10;
private void Awake()
{
Vector3 aDirection = transform.InverseTransformPoint(a.position).normalized;
Vector3 bDirection = transform.InverseTransformPoint(b.position).normalized;
var fromRotation = Quaternion.identity;
var toRotation = Quaternion.FromToRotation(aDirection, bDirection);
lineRenderer.positionCount = positionCount;
for (int i = 0; i < positionCount; i++)
{
float t = i/(positionCount - 1f);
Quaternion rotation = Quaternion.Lerp(fromRotation, toRotation, t);
Vector3 point = rotation*aDirection*sphereRadius;
lineRenderer.SetPosition(i, point);
}
}
}