Всплывающие диалоги в 2D играх

Для подачи сюжета в играх используются разные способы. Один из таких способов — диалоги. Сделать в игре диалог в стиле jPRG довольно просто. Разберём диалог на примере 2D игры.

В Unity3D для получения 2D-картинки достаточно отключить перспективу камеры: параметр Projection перевести в Orthographic. Размер захватываемого изображения определяется параметрами Size (высота камеры), Near (с какого расстояния объекты попадают в камеру) и Far (до какого расстояния объекты попадают в камеру).
Считаем, что сама игра у нас уже есть, камера настроена на объекты от 0 до 10 перед собой и расположена в координатах (0, 0, -10), т.е. отображает объекты с Z от 0 до -10. Создадим два GameObject Plane и поместим их так, чтобы они закрывали правый и левый нижние углы.



Теперь научим их появляться и исчезать. Для этого достаточно передвигать их по оси Z на передний план и за пределы камеры.

public GameObject LeftDialog;
public GameObject RightDialog;
private float _showZ = -3;
private float _hideZ = 1;

void ShowLeft(){
	Vector3 temp = LeftDialog.transform.position;
	LeftDialog.transform.position = new Vector3(temp.x, temp.y, _showZ);
}
	
void ShowRight(){
	Vector3 temp = RightDialog.transform.position;
	RightDialog.transform.position = new Vector3(temp.x, temp.y, _showZ);
}
	
void HideLeft(){
	Vector3 temp = LeftDialog.transform.position;
	LeftDialog.transform.position = new Vector3(temp.x, temp.y, _hideZ);
}
	
void HideRight(){
	Vector3 temp = RightDialog.transform.position;
	RightDialog.transform.position = new Vector3(temp.x, temp.y, _hideZ);
}

В переменные скрипта LeftDialog и RightDialog подключаем соответственно левый и правый Plane. Теперь в любой момент игры мы можем вызвать или убрать «диалог». Но пока ему ещё не хватает изображения, например такого:

Что бы она нормально отображалась правильно в настройках текстуры указываем Texture Type = GUI и Format = Truecolor, а в настройках материала Shader = Unlit/Transparent .

Осталось только добавить текст к диалогам. Можно писать текст прямо на текстурах и менять используемые текстуры, а можно — используя GUI. Второй способ можно сделать следующим образом:

private Rect _leftRect;
private Rect _rightRect;
	
private bool _leftF = false;
private bool _rightF = false;
	
private string _leftText = "";
private string _rightText = "";
	
void Start () {
	_leftRect = new Rect (Screen.width * 0.12f  , Screen.height * 0.7f, 200, 60);
	_rightRect = new Rect (Screen.width * 0.62f , Screen.height * 0.8f, 200, 60);
}

void OnGUI () {
	GUI.contentColor = Color.black;
	if (_leftF) {GUI.Label(_leftRect, _leftText);}
	if (_rightF) {GUI.Label(_rightRect, _rightText);}
}

Теперь при _leftF = true слева будет отображаться текст _leftText. Для правого текста условия аналогичны. На экране это будет примерно так:

Скачать пример Дилога для 2D (922)

About

2 thoughts on “Всплывающие диалоги в 2D играх

Добавить комментарий

Ваш e-mail не будет опубликован.