Скроллинг бэкграунда [2D]
При создании двухмерной игрушки, все спрайты располагаются в одной плоскости, мы лишь настраиваем слои для каждого спрайта, чтобы, например, выдвинуть его на передний план. Однако, в этом случаи, при движении камеры, все объекты будут двигаться одинаково, даже если по задумке на заднем плане у нас какие-нибудь горы или облака. И даже если мы сдвинем вглубь, по оси «зет», такие объекты всё равно будут двигаться словно они приклеены к одной плоскости. То есть для 2D камеры в режиме ортогональной проекции, нам нужно создать эффект глубины.
Как это работает. Мы создаем фон из различных спрайтов, затем группируем их. И этот объект/группу помещаем в массив скрипта. Тоже самое делаем и с другими группами объектов. Иначе говоря мы создаем слои. Далее, отодвигаем от камеры, по оси Z каждый слой, конечный эффект будет зависеть от того, как далеко мы отодвинем слой. Всё просто.
Здесь так же мы можем выбрать режимы скролла, для обычного платформера, подойдет "горизонтальный" режим. В некоторых играх, камера может двигаться только по оси Y, для таких игр есть режим "вертикальный", а можно использовать и оба сразу, получив уже другой эффект.
Скачать скрипт:
Как это работает. Мы создаем фон из различных спрайтов, затем группируем их. И этот объект/группу помещаем в массив скрипта. Тоже самое делаем и с другими группами объектов. Иначе говоря мы создаем слои. Далее, отодвигаем от камеры, по оси Z каждый слой, конечный эффект будет зависеть от того, как далеко мы отодвинем слой. Всё просто.
using UnityEngine;
using System.Collections;
public class Parallax2DBackground : MonoBehaviour {
private enum Mode
{
Horizontal,
Vertical,
HorizontalAndVertical
}
[SerializeField] private Transform[] backgrounds;
[SerializeField] private float smoothing = 0.5f;
[SerializeField] private Mode parallaxMode;
private float[] scales;
private Transform cam;
private Vector3 previousCamPos;
private Vector3 position;
void Awake()
{
cam = Camera.main.transform;
}
void Start()
{
previousCamPos = cam.position;
scales = new float[backgrounds.Length];
for(int i = 0; i < backgrounds.Length; i++)
{
if(backgrounds[i] != null) scales[i] = backgrounds[i].position.z * -1;
}
}
void LateUpdate()
{
for(int i = 0; i < backgrounds.Length; i++)
{
if(backgrounds[i] != null)
{
Vector3 parallax = (previousCamPos - cam.position) * scales[i];
switch(parallaxMode)
{
case Mode.Horizontal:
position = new Vector3(backgrounds[i].position.x + parallax.x, backgrounds[i].position.y, backgrounds[i].position.z);
break;
case Mode.Vertical:
position = new Vector3(backgrounds[i].position.x, backgrounds[i].position.y + parallax.y, backgrounds[i].position.z);
break;
case Mode.HorizontalAndVertical:
position = new Vector3(backgrounds[i].position.x + parallax.x, backgrounds[i].position.y + parallax.y, backgrounds[i].position.z);
break;
}
backgrounds[i].position = Vector3.Lerp(backgrounds[i].position, position, smoothing * Time.deltaTime);
}
}
previousCamPos = cam.position;
}
}
Здесь так же мы можем выбрать режимы скролла, для обычного платформера, подойдет "горизонтальный" режим. В некоторых играх, камера может двигаться только по оси Y, для таких игр есть режим "вертикальный", а можно использовать и оба сразу, получив уже другой эффект.
Скачать скрипт:
Комментариев 13
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.