Подвижный бэкграунд в 2D платформере

Небольшая, но полезная мелочь. Как известно, при создании карты в двухмерном пространстве, все объекты, то есть спрайты, лежат в одной плоскости. В этом режиме мы можем сортировать слои и накладывать их, как угодно. Но как быть с глубиной? Чтобы добавить эффект глубины в общую картинку, нам надо разбить фон на слои. Назначить родителя для каждого слоя, например, облака отдельно, какие-нибудь конструкции или горы тоже отдельно и так далее. Затем, каждому трансформу добавляем движение, относительно камеры. Иначе говоря, бэкграунд должен двигаться, только если движется камера.


На самом деле всё достаточно просто, тем не менее, будет полезно для тех, кто только начинает делать свою первую 2D игру.



На камеру вешаем C# скрипт Background2D:

using UnityEngine;
using System.Collections;

public class Background2D : MonoBehaviour {

	public Transform BG1;
	public float speedBG1 = 0.005f;

	public Transform BG2;
	public float speedBG2 = 0.010f;

	public Transform BG3;
	public float speedBG3 = 0.015f;

	private Camera cam;

	void Awake () 
	{
		cam = GetComponent<Camera>();
	}

	void Start () 
	{
	}

	Vector3 GetVector(Vector3 position, float speed)
	{
		float posX = position.x;
		posX += cam.velocity.x * speed;
		return new Vector3(posX, position.y, position.z);
	}

	void Update () 
	{
		if(BG1) BG1.position = GetVector(BG1.position, speedBG1);
		if(BG2) BG2.position = GetVector(BG2.position, speedBG2);
		if(BG3) BG3.position = GetVector(BG3.position, speedBG3);
	}
}

Функция GetVector возвращает позицию для трансформа, относительно скорости движения камеры. По умолчанию, тут доступно управление для трёх слоев бэкграунда, это должно быть достаточно для большинства проектов. Всё что остается, это настроить скорости слоев, к тому-же можно добавлять скорость в отрицательном значении, и слой будет двигаться в противоположную сторону. В общем, экспериментируем.

Комментариев 5

Офлайн
Vityaer 15 мая 2016
Для облаков не подходит, они движутся вместе с игроком.
Офлайн
Light 15 мая 2016
Цитата: Vityaer
Для облаков не подходит, они движутся вместе с игроком.

Ну да, в любом случаи, это просто пример.
Офлайн
По моему, тут лучше использовать эффект Paralax Scrolling.
Без скриптов и очень просто.
Для этого к основной камере создаем камеру дочку, Size у дочки делаем побольше, чем у основной, а в Culling Mask у основной камеры убираем слой заднего фона, а у дочки выбираем только задний слой. И все :)
Офлайн
Light 8 июня 2016
oleksandr.klimenko,
если камера в режиме Perspective, то надо разложить слои на дистанции по оси Z. Если режим Orthographic то надо регулировать скорость каждого слоя.
Офлайн
Molot999 21 апреля 2018
Не пойдет, перемещения какие-то дёрганые :\
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика