В этом уроке я расскажу, как работает GUI в Unity, и по ходу дела буду создавать простое меню. Этот урок для новичков, но желательно с начальным знанием Unity Java Script, да или вообще какого либо скрипта. Ну что, начнём.
А начать я думаю с того, что мы создадим новую сцену. Назовём сцену с игрой "Level_1", а сцену для меню "Menu". Далее между этими сценами можно будет перемещаться при помощи комманды:
Code
Application.LoadLevel (Номер сцены);
К команде мы вернёмся чуть позже. Сейчас нас больше интересует "Номер сцены". Как его поставить? Где его посмотреть? Поставить и посмотреть номер можно в окошке Build settings (File/Build settings...): Номер обведён красным. Для того, чтобы добавить сцену, необходимо нажать на Add Current (обведено зелёным). В какой сцене вы находитесь, такая сцена и добавится. При запуске игры, запускается сцена "0", то есть "Menu".
Сцена создана. Теперь создадим скрипт, например "menu.js" и повесим его на камеру. Далее будем работать практически только с этим скриптом. Подготовка завершена.
Практически самый простой GUI объект - Окно. Давайте рассмотрим комманду в скрипте по подробнее.
Code
GUI.Box (Rect (A, B, C, D), "Текст");
A - количество пикселей от левого края экрана к левому краю окна. B - количество пикселей от верхнего края экрана к верхнему краю окна. C - ширина окна. D - высота окна. А далее следует название окна. Эта надпись будет висеть сверху окна. Давайте создадим наше первое окно:
Code
function OnGUI () { GUI.Box (Rect (5,5,200,200), "Текст"); }
В сцене оно выглядит так:
А как примагнитить его к другим углам экрана, или поместить в центр? Для этого есть следующие комманды:
Code
Screen.width Screen.height
Первая возвращает число пикселей по ширине экрана, вторая - по высоте. Используя эти 2 комманды можно помещать окна в разные части экрана, и они будут там оставаться при разных разрешеиях экрана.
Code
function OnGUI () { GUI.Box (Rect (5,5,50,50), "1"); //верхний левый угол GUI.Box (Rect (Screen.width - 55,5,50,50), "2"); // верхний правй угол GUI.Box (Rect (5,Screen.height - 55,50,50), "3"); // нижний левый угол GUI.Box (Rect (Screen.width - 55,Screen.height - 55,50,50), "4"); // нижний правый угол GUI.Box (Rect (Screen.width/2 - 25,Screen.height/2 - 25,50,50), "5"); // центр }
Так же никто не запрещает раздувать и сдувать окна в зависимости от разрешения экрана, всё в ваших руках.
Самый важный (по моему) и чаще всего используемый GUI объект - Кнопка. Без кнопки и не туда, и не сюда. Скрипт практически ничем не отличается от окна, но пишется он тут:
Code
if (тут) { }
Давайте теперь создадим кнопку, отправляющую нас в сцену с самой игрой:
Текст - очень важен в создании меню, и не только. Скрипт текста ничем не отличается от окна. Давайте что нибудь напишем в помощи:
Code
if (window == 2) { GUI.Box (Rect (Screen.width/2 - 100,Screen.height/2 - 100,200,180), "Помощь"); GUI.Label (Rect (Screen.width/2 - 100,Screen.height/2 - 80,200,140), "Здесь должна быть помощь "); // текст if (GUI.Button (Rect (Screen.width/2 - 90,Screen.height/2 + 40,180,30), "Назад") || Input.GetKey ("escape")) { window = 0; } }
И в помощи появляется текст. И всё. Очень просто.
Но просто Текст - очень скучно и неинтересно. Что же можно с ним сделать? К тексту можно, даже нужно применить стиль. Создадим стиль:
Code
var style : GUIStyle;
Теперь в инспесторе камеры можно обнаружить следующее: Красным я подчеркнул самые часто используемые опции: 1 - Цвет текста. 2 - Шрифт. 3 - Якорь. 4 - Размер. 5 - Жирный, Курсив, Жирный курсив.
Выбрав необходимые опции, привязываем стиль к тексту:
Code
GUI.Label (Rect (Screen.width/2 - 100,Screen.height/2 - 80,200,140), "Здесь должна быть помощь ", style);
Tумблер очень похож на кнопку, но в отличае от неё тумблер может быть либо включён, либо выключен. Пишется он тоже немного по другому:
Tеперь при включении тумблера рядом с основным окном появляются 2 маленьких.
Ползунок - тоже очень полезная функция. С помощью него можно менять громкость, чувствительность и другие аспекты. Написанием он практически ничем не отличается от тумблера, только используется на другой переменной: float, int.
Code
var sider : int = 0; sider = GUI.HorizontalSlider (Rect (25, 25, 100, 30), sider, A, B);
A - число обозначающее значение переменной, когда ползунок находится слева. B - число обозначающее значение переменной, когда ползунок находится справа.
Давайте с использованием ползунка модернезируем предыдущий скрипт:
Не могли бы вы тот же самый урок перевести в C#. Мне не надо весь урок, ток 2ой пункт про размещение GUI на экране (Знаю как на середину как в верхние углы, а в нижние не как не получается = ( ) Чем шире угол зрения - тем он тупее.
gind, прошу прощения, но си шарп не изучаю. Хотя... Порывшись тут, а точнее тут, то можно найти примерно это:
Code
using UnityEngine; using System.Collections;
public class GUITest : MonoBehaviour {
void OnGUI(){ GUI.Box (new Rect (5,5,50,50), "1"); GUI.Box (new Rect (Screen.width - 55,5,50,50), "2"); GUI.Box (new Rect (5,Screen.height - 55,50,50), "3"); GUI.Box (new Rect (Screen.width - 55,Screen.height - 55,50,50), "4"); GUI.Box (new Rect (Screen.width/2 - 25,Screen.height/2 - 25,50,50), "5"); }
Колямба, эти комманды возвращают любое разрешение экрана, но только не игровое, а действительное (не более, чем разрешение собственного монитора). Блог.
Из практики: Разрешение экрана раб. стола винды можно получить только через - Screen.currentResolution Рабочий код из действующего проекта:
Code
function ScrinResolutionChange () { if (fulSt) Screen.SetResolution(Screen.currentResolution.width, Screen.currentResolution.height, true); if (!fulSt) Screen.SetResolution(892, 594, false); }
seaman, либо я тебя не понял, либо ты меня. Я имел в виду, что если указать ширину 1600, а разрешение монитора 1366х768, то комманда Screen.width вернёт 1366. Ну, во всяком случае, у меня так. Блог.
Сообщение отредактировал commandoby - Вт, 24 Июл 2012, 15:46
Это не так. Они не возвращают разрешение монитора. Они возвращают размеры окна. Так что я понял как написано. Пожалуйста точнее выражайся - в программировании неточности чреваты неработоспособностью программы.
Пара вопросов по теме. Каким образом я могу получить доступ к настройкам графики движка? То есть как в своем интерфейсе можно регулировать качество графики, меняя ее параметры (не уровень как в стандартном лаунчере - Fastest, Simple,Good,Fantastic, а более глубокие настройки). Или так нельзя? И как отключить стандартный лаунчер?