Итак следующий билд.
RTS камера относительно готова.
Скачать
ТЫК.
У камеры появился родительский пивот, который я двигаю "CamPapa".
Что умеет камера:
1. Двигаться в восьми направлениях, когда курсор доходит до края экрана.
2. Отдаляться и возвращаться обратно по пяти шагам колесом мышки.
3. Ориентироваться на местности по длине и ширине игрового уровня,
останавливая своё движение доходя до края.
(Размер игрового уровня сейчас равен размеру плейна).
Что камера не умеет:
Не умеет поворачиваться по осям. Во первых это функция
сомнительной нужности для геймдизайна моего проекта.
Во вторых, в данный момент если повернуть камеру,
то её ориентация в координатах игрового уровня
слетит к херам, превратившись из квадрата в неведомую
геометрическую фигуру. Чтобы поворачивать камеру,
придётся расчитывать ориентацию с учётом угла поворота
камеры, а это вам уже не 10 на 10 умножить так сказать,
придётся голову напрячь, возможно и реализую если потребуется.
Ограничение движения камеры коллизией с кубом, который натянут на уровень - не предлагать! слишком просто.
Говнокод управления камерой:
public class CamController : MonoBehaviour
{
public GameObject CamPapa; // Пивот к которому привязана камера
public int CamTranslateSpeed = 10; // Скорость движения камеры
public float CamRemoveStep = 1.5f; // Шаг отдаления камеры
public int CamDegreeRemove = 5; // Переменная со стартовым шагом, отсчёт идёт от 5 до 10, т.е. мы можем сделать максимум 5 шагов отдаляющих камеру, и после до 5 приближающих.
public float CamMooveRangeX = 10f; // Область перемещения камеры по оси "x" соответствующая ширине игровой карты .
public float CamMooveRangeZ = 10f; // Область перемещения камеры по оси "z" соответствующая длине игровой карты .
public float CamPositionX; // Текущие координаты CamPapa по оси "x".
public float CamPositionZ; // Текущие координаты CamPapa по оси "z".
public Vector3 CamPapaCoordinate; //Резервная переменная для запроса вектора из трёх координат положения CamPapa.
void Update()
{
//Проверка положения мыши в районе правого края экрана
if (Input.mousePosition.x >= Screen.width - 5.3f)
{
CamPositionX = CamPapa.transform.position.x;
//Если "x" координаты CamPapa меньше ширины игровой карты мы двигаем камеру вправо
if (CamPositionX < CamMooveRangeX)
{
CamPapa.transform.Translate(Vector3.right * CamTranslateSpeed * Time.deltaTime);
}
}
//Проверка положения мыши в районе левого края экрана
if (Input.mousePosition.x <= 0.1f)
{
CamPositionX = CamPapa.transform.position.x;
//Если "x" координаты CamPapa дальше начальной координаты игровой карты мы двигаем камеру влево
if (CamPositionX > 0.01f)
{
CamPapa.transform.Translate(Vector3.left * CamTranslateSpeed * Time.deltaTime);
}
}
//Проверка положения мыши в районе верхнего края экрана
if (Input.mousePosition.y >= Screen.height - 2.3f)
{
CamPositionZ = CamPapa.transform.position.z;
//Если "z" координаты CamPapa меньше длины игровой карты мы двигаем камеру вперёд
if (CamPositionZ < CamMooveRangeZ)
{
CamPapa.transform.Translate(Vector3.forward * CamTranslateSpeed * Time.deltaTime);
}
}
//Проверка положения мыши в районе нижнего края экрана
if (Input.mousePosition.y <= 0.1f)
{
CamPositionZ = CamPapa.transform.position.z;
//Если "z" координаты CamPapa дальше начальной координаты длины игровой карты мы двигаем камеру назад
if (CamPositionZ > 0.01f)
{
CamPapa.transform.Translate(Vector3.back * CamTranslateSpeed * Time.deltaTime);
}
}
//Отдаление и приближение колесом мыши
if (Input.mouseScrollDelta.y > 0 && CamDegreeRemove < 10)
{
CamPapa.transform.position = new Vector3(CamPapa.transform.position.x, CamPapa.transform.position.y + CamRemoveStep, CamPapa.transform.position.z);
CamPapa.transform.Translate(Vector3.back * CamRemoveStep);
CamDegreeRemove = CamDegreeRemove + 1;
}
if (Input.mouseScrollDelta.y < 0 && CamDegreeRemove > 5)
{
CamPapa.transform.position = new Vector3(CamPapa.transform.position.x, CamPapa.transform.position.y - CamRemoveStep, CamPapa.transform.position.z);
CamPapa.transform.Translate(Vector3.forward * CamRemoveStep);
CamDegreeRemove = CamDegreeRemove - 1;
}
if (CamDegreeRemove > 10) CamDegreeRemove = 10;
if (CamDegreeRemove < 5) CamDegreeRemove = 5;
}
}