using UnityEngine;
using System.Collections;
public class Menushka: MonoBehaviour {
public Texture2D VolumeMax;
public Texture2D VolumeMedium;
public Texture2D VolumeEasy;
public Texture2D VolumeOff;
public Texture2D Background;
public GUISkin[] s1;
private float SliderVolume = 0.5F;
private float hSliderValue = 1.0F;
private bool TogllePosition = Screen.fullScreen;
private int cont = 0;
private int _window =0;
void Update() {
if (Input.GetKeyDown(KeyCode.Space))
cont++;
}
void OnGUI() {
GUI.skin = s1[cont % s1.Length];
if (s1.Length == 0) {
Debug.LogError(«Assign at least 1 skin on the array»);
return;
}
GUI.DrawTexture(new Rect(0, 0, Screen.width, Screen.height), Background);
if (_window == 0){
if (GUI.Button(new Rect(Screen.width/4,100,Screen.width/2,50), «First Version»)) _window =1;
if (GUI.Button(new Rect(Screen.width/4,200,Screen.width/2,50), «Quit»)) Application.Quit();
}
if (_window == 1){
if (GUI.Button(new Rect(Screen.width/3,Screen.height/4,Screen.width/3,50), «Start Game»)) Application.LoadLevel(1);
if (GUI.Button(new Rect(Screen.width/3,Screen.height/4 + 60,Screen.width/3,50), «Options»)) _window = 3;
if (GUI.Button(new Rect(Screen.width/3,Screen.height/4 + 120,Screen.width/3,50), «Exit»)) _window = 0;
}
if (_window == 3){
if (GUI.Button(new Rect(Screen.width/3,Screen.height/4,Screen.width/3,50), «Graphics»)) _window = 5;
if (GUI.Button(new Rect(Screen.width/3,Screen.height/4 + 60,Screen.width/3,50), «Sound»)) _window = 4;
if (GUI.Button(new Rect(Screen.width/3,Screen.height/4 + 120,Screen.width/3,50), «Back»)) _window = 1;
}
if (_window == 4){
GUI.Label(new Rect(Screen.width/3, Screen.height/2, 150, 30), «Sound»);
SliderVolume = GUI.HorizontalSlider(new Rect(Screen.width/3 + 50, Screen.height/2, 150, 30), SliderVolume, 0.0F, 1.0F);
if(SliderVolume == 0.0F) GUI.DrawTexture(new Rect(Screen.width/3 + 200, Screen.height/2-10, 32, 32), VolumeOff);
if(SliderVolume <= 0.35F & SliderVolume > 0.0F) GUI.DrawTexture(new Rect(Screen.width/3 + 200, Screen.height/2-10, 32, 32), VolumeEasy);
if(SliderVolume <= 0.75F & SliderVolume > 0.35F) GUI.DrawTexture(new Rect(Screen.width/3 + 200, Screen.height/2-10, 32, 32), VolumeMedium);
if(SliderVolume <= 1.0F & SliderVolume > 0.75F) GUI.DrawTexture(new Rect(Screen.width/3 + 200, Screen.height/2-10, 32, 32), VolumeMax);
audio.volume = SliderVolume;
if (GUI.Button(new Rect(Screen.width/3,3*Screen.height/4,Screen.width/3,50), «Back»)) _window = 3;
}
if (_window == 5){
GUI.Label(new Rect(Screen.width/3, Screen.height/2, 150, 30), «Grafon»);
hSliderValue = GUI.HorizontalSlider(new Rect(Screen.width/3 + 50, Screen.height/2, 150, 30), hSliderValue, 0.0F, 1.0F);
if(hSliderValue <= 0.5F)GUI.Label(new Rect(Screen.width/3 + 50, Screen.height/2+50, 150, 30),«640x480»);
if(hSliderValue < 1.0F & hSliderValue > 0.5F)GUI.Label(new Rect(Screen.width/3 + 50, Screen.height/2+50, 150, 30),«1024x768»);
if(hSliderValue == 1.0F)GUI.Label(new Rect(Screen.width/3 + 50, Screen.height/2+50, 150, 30),«1366x768»);
TogllePosition = GUI.Toggle(new Rect(Screen.width/3, Screen.height/2-50, 150, 16), TogllePosition, «FullScrean»);
if (GUI.Button(new Rect(Screen.width/4,3*Screen.height/4,Screen.width/4,50), «Aplly»)) {
Screen.fullScreen = TogllePosition;
if(hSliderValue <= 0.5F)Screen.SetResolution(640,480, TogllePosition);
if(hSliderValue < 1.0F & hSliderValue > 0.5F)Screen.SetResolution(1024,768, TogllePosition);
if(hSliderValue == 1.0F)Screen.SetResolution(1366,768, TogllePosition);
}
if (GUI.Button(new Rect(Screen.width/2+10,3*Screen.height/4,Screen.width/4,50), «Back»)) _window = 3;
}
}
}
Доброго времени суток, господа. Лень овладела мной полностью и не давала ничего делать. В долгой битве с перевесом войск в сторону противника, мне удалось остановить не на долго вражеское наступление. За это время я успел наклепать скрипт для меню в Unity. Он сыроват для использования (так как надо получше настроить позицию и текструки заменить кнопок), но отлично подойдет для обучения.
Итак, урок рассчитан на то, что вы знакомы с C# или C-подобными языка (C, C++, Java и тп.). (По C# все советуют читать Троелсена)
new Rect(float left, float top, float widht, float height) — Функция, отвечающая за позицию и размер объекта. Где:left — расстояние от левой границы экрана, top — расстояние от вершины экрана, widht — длина объекта, height — высота объекта.
GUI.DrawTexture( Rect position, Texture image) — Функция рисует на экране текстуру. Вообще все функции класса GUI нацелены на вывод чего-либо на экран. Где: Rect position — это наша функция new Rect(или это заданный заранее объект этой функции), Texture image — соответственно наша текстура. (Текстура создается публичным объектом класса Texture/Textire2D/Texture3D. См начало скрипта.)
GUI.Button(Rect position, string text) — Функция создает кнопку. Где string text — название кнопки.
GUI.Label(Rect position, string text) — Функция выводит текст на экран. Где string text — выводимый текст.
Application.Quit() — выключает нашу программу (работает из любой точки выполнения).
Application.LoadLevel(1) — загружает сцену из иерархии.
private int _window =0 — эта переменная отвечает за окно, которое мы видим.
if (GUI.Button()) _window =1; — если нажимают на данную кнопку, значение переменной окна меняется.
Такс, с простым разобрались. Как можно заметить, ничего сложного нету, все функции и их возможные варианты приведены в документации Unity. Продолжаем…
private float SliderVolume = 0.5F;
SliderVolume = GUI.HorizontalSlider(Rect position, float value, float leftValue, float rightValue)
audio.volume = SliderVolume;
Итак, тут мы создаем переменную SliderVolume, которая будет отвечать в данном случае за позицией ползунка и громкость. audio.volume — отвечает за громкость звука в игре (принимает значения от 0.0F до 1.0F). float value — отвечает за положение ползунка. float leftValue и float rightValue — определяют границы значений, принимаемых ползунком с крайнего левого до крайнего правого соответственно (min и max проще говоря).
private bool TogllePosition = Screen.fullScreen;
TogllePosition = GUI.Toggle(Rect position, bool value, string text);
Screen.fullScreen = TogllePosition;
Здесь мы создаем переменную типа bool и сразу присваиваем ей значение (включен ли полно экранный режим). GUI.Toggle(Rect position, bool value, string text) — создаем переключатель, где:, bool value — значение вкл/выкл, string text — название переключателя. Screen.fullScreen = TogllePosition — присваиваем значение позиции переключателя переменной fullScreen.
public GUISkin[] s1;
private int cont = 0;
void Update() {
if (Input.GetKeyDown(KeyCode.Space))
cont++;
}
void OnGUI() {
GUI.skin = s1[cont % s1.Length];
if (s1.Length == 0) {
Debug.LogError(«Assign at least 1 skin on the array»);
return;
}
Это взято из мануала Unity. Позволяет добавлять в скрипт ваши Skin GUI.
Вроде по функциям всё. Самое главное в этом скрипте это void OnGUI(). Наша функция должна называться так и никак иначе. Движок ее вызывает столько раз, сколько у вас FPS. Поэтому, можно сказать, что в большинстве случаев, наш скрипт выполняется по 60 раз в секунду, что конечно же упрощает нам задачу моделирования меню.
Всем спасибо за внимание, жду критику.
P.S.
Ну как вам?
В прошлом посте некоторые написали, что они всеми руками за помочь. Собственно, если вам есть, что сказать, или вы умеете моделировать/рисовать пишите мне в личку, Вконтакт, Skype, поговорим насчет создания мини-игры.
Лучшие комментарии
У профессиональных разработчиков таких названий не встретишь.
И ни в коем случае не MojaMenu, EtoNovoeMenu, VipadaiMenu.