Вы можете добавить значение смещения
// ajdust this in the inspector
public float offset = 0.1f;
и затем добавить его к позиции в направлении от игрока к цели.Как упоминал Фогзи, это может быть еще не код, способный к копированию, поскольку могут произойти некоторые взлеты.Чтобы по крайней мере предотвратить вращение игрока после превышения цели и перемещения вперед и назад, вы можете использовать метод установки, чтобы получить направление только один раз:
public float offset;
public float threshold = 0.0001f;
public float speed;
private GameObject target;
private Vector3 direction;
private Vector3 targetPosition;
public void SetTarget(GameObject newTarget)
{
target = newTarget;
// adding the offset in that direction
targetPosition = target.transform.position + direction * offset;
// direction from the player to the target
direction = (target.transform.position - transform.position).normalized;
}
private void Update()
{
if (!target) return;
// make Player overshoot the target by offset
transform.position = Vector2.MoveTowards(transform.position, targetPosition, (speed * Time.deltaTime));
// stop if target is reached
if (Vector3.Distance(transform.position, targetPosition) <= threshold)
{
target = null;
}
}
Я не знаю, когда и как вы меняетецель, поэтому в настоящее время она не ограничивает движение игрока только X и Y, как на ваших фотографиях ... но вы бы это сделали, например,
SetTarget(GameObject.FindGameObjectWithTag("Player").GetComponent<Transform>());