Можно для начала попробовать пару готовых скриптов типа Smooth Camera Follow.
Например:
answers.unity3d.com/questions/29183/2d-camera-smoo...
Пользоваться просто. Скрипт вешается на то, что должно следовать за другой штукой, а ссылка на то, за чем надо следовать помещается в поле target в Инспекторе.
Лучше не двигать таким образом объект, на котором уже есть Rigidbody. Тогда будет вибрация.
Чтобы сохранить дистанцию, можно в код из примера вставить простой if оператор
Vector3 delta = target.position - camera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, point.z));
if (delta. magnitude > someValue)
{
Vector3 destination = transform.position + delta;
transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, dampTime);
}
UPDATE: Прочитал еще раз - на счет отставания хотел написать. Можно поиграться с dampTime -
в зависимости от этого значения, объект будет двигаться за целью плавно или быстро. Можно установить так, чтобы было плавное движение, то есть догонит если долго подождать, но включить код -
Vector3 delta = target.position - camera.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, point.z));
if (delta. magnitude < someValue)
{
Vector3 destination = transform.position + delta;
transform.position = Vector3.SmoothDamp(transform.position, destination, ref velocity, dampTime);
}
Разница с тем, что я раньше писал - только в знаке, не > somevalue, a < somevalue, то есть следовать только если объект находится близко. Тогда можно будет от него убежать и он следить перестанет.
Первый вариант когда > someValue подходит для спутников, которые будут следовать, но не надо чтобы они "залезли" на персонажа. А второй - для врагов - будут преследовать, пока мы от них не убежим на безопасное расстояние. Надо только в начале класса будет объявить:
public float someValue; // дистанция слежения.
Вообще лучше диапазон сделать - между двух значений.