Главная » Статьи » Программирование » Unity

Следование камеры за персонажем
В большинстве игр есть два важных моменты, которые касаются камеры:
  • Чтобы камера следовала за игровым персонажем
  • Чтобы камера не выходила за границы карты, а то игрок увидит мир тьмы за пределами игры :) .
Обычно скрипт, который отвечает за выполнение данного действия, лучше поместить на объект за которым следует основная камера потому, что ее удобно получить через “Camera.main”. Первое что нужно сделать - получить размеры нашего экрана в мировых координатах (если в вашей игре изменяется масштаб, то эти данные нужно будет пересчитывать каждый раз при изменении масштаба).
Vector3 zero = Camera.main.ViewportToWorldPoint(Vector3.zero);
Vector3 one = Camera.main.ViewportToWorldPoint(Vector3.one);
Тут мы получаем расстояние в мировых координатах от центра до левого нижнего и правого верхнего углов. Далее нужно будет определиться, всегда ли будет игрок находится в центре экрана или камера будет к нему "привязана" и на 1-5 см. может отставать от игрока. Я рассматриваю ситуацию, когда камера будет на веревочке, поэтому рассчитываю по 20% от центра экрана к его краям в мировых координатах.
float distX = one.x * 0.2f;
float distY = one.y * 0.2f;
Этот и выше приведенный код нужно будет положить в метод “Start” нашего скрипта. В методе “Update” будем производить расчеты координат нашей камеры.
float x = Mathf.Clamp(Camera.main.transform.position.x, transform.position.x - distX, transform.position.x + distX);
float y = Mathf.Clamp(Camera.main.transform.position.y, transform.position.y - distY, transform.position.y + distY);
На всякий случай напоминаю, что данный скрипт висит на объекте за которым следует камера. С помощью функции Mathf.Clamp(float,float,float) вычисляем x и y так, чтобы они учитывали возможное отклонение камеры на 20% от центра. Далее необходимо учесть координаты границ нашего мира (как вы их считаете это уже ваше дело потому, что я понятия не имею как вы генерируете мир). Мой мир создается из Tiled поэтому, я просто получаю минимальные и максимальные координаты с границ Mesh Render.
x = Mathf.Clamp(x, borderMap.borderPos.left - borderCamera.left, borderMap.borderPos.right - borderCamera.right);
y = Mathf.Clamp(y, borderMap.borderPos.bottom - borderCamera.bottom, borderMap.borderPos.top - borderCamera.top);
Вот собственно и все координаты камеры получены с учетом границ нашей карты. Осталось только установить полученные координаты нашей камере и получим желаемый результат.
Camera.main.transform.position = new Vector3(x, y, Camera.main.transform.position.z);
 
Категория: Unity | Добавил: Алексей (22.05.2017) | Автор: Фролов Алексей Алексеевич E
Просмотров: 877 | Теги: Unity, Разработка игр, C#, Camera | Рейтинг: 0.0/0
Всего комментариев: 0
avatar