Для подачи сюжета в играх используются разные способы. Один из таких способов — диалоги. Сделать в игре диалог в стиле 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. Для правого текста условия аналогичны. На экране это будет примерно так:
fit flop
Вообщем забавно.