Реализовываю полет камеры над уровнем по свайпу игрока (для обзора локации). Для этого отслеживаю направление движения пальца после нажатия на экран и перемещаю камеру в этом направлении по глобальным координатам. Так же использую ограничение, чтобы камера не выходила за рамки сцены.
Вот такой код у меня получился на C#:
Синтаксис:
Используется csharp
using UnityEngine;
public class CamScroller : MonoBehaviour
{
public float scrollSpeed;
public float xMin, xMax, zMin, zMax;
void Update()
{
if (Input.touchCount > 0)
Scroller();
}
void Scroller()
{
Vector2 delta = Input.GetTouch(0).deltaPosition;
transform.Translate(-delta.x * Time.deltaTime * scrollSpeed, 0, -delta.y * Time.deltaTime * scrollSpeed, Space.World);
transform.position = new Vector3(Mathf.Clamp(transform.position.x, xMin, xMax), transform.position.y, Mathf.Clamp(transform.position.z, zMin, zMax));
}
}
public class CamScroller : MonoBehaviour
{
public float scrollSpeed;
public float xMin, xMax, zMin, zMax;
void Update()
{
if (Input.touchCount > 0)
Scroller();
}
void Scroller()
{
Vector2 delta = Input.GetTouch(0).deltaPosition;
transform.Translate(-delta.x * Time.deltaTime * scrollSpeed, 0, -delta.y * Time.deltaTime * scrollSpeed, Space.World);
transform.position = new Vector3(Mathf.Clamp(transform.position.x, xMin, xMax), transform.position.y, Mathf.Clamp(transform.position.z, zMin, zMax));
}
}
Далее я хочу добавить:
1. Инерцию движения камере после того, как игрок отпустит палец (продолжить движение камеры в заданном свайпом направлении с плавным замедлением скорости)
2. "Отпружинивание" камеры немного назад при достижении заданных лимитов (границ локации).
Подскажите, уважаемые форумчане, как это можно реализовать или в каком направлении искать?
P.S. Пробовал использовать Vector3.Lerp в методе "Scroller", но видимых результатов не получил, и (что логично) он прерывается после того, как игрок отрывает палец от экрана.
Экспериментировал с Rigidbody2D, но так же безрезультатно (иначе бы сейчас этой темы здесь не было
По поводу "отпружинивания" камеры от границ локации - пробовал реализовать по такой логике:
Если позиция камеры >= заданному лимиту, то переместить камеру на позицию "лимит - отступ"
В результате получил "дрожание" камеры на границах сцены (позиция камеры одновременно пытается переместиться на отступ от лимита и, как только становиться < лимита, снова пытается идти в сторону свайпа каждый кадр)