18 февраля 2013 18.02.13 8 2113

{Игромирование}Выпуск №2. Меню

+6
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, поговорим насчет создания мини-игры.


Sound Slide

Платформа
PC
Жанр
Дата выхода
24 января 2019
1
0
0 оценок
Моя оценка

Лучшие комментарии

Твое дело) Но опять же крайне рекомендую — english only.
У профессиональных разработчиков таких названий не встретишь.
Плюс тебе в карму, заслужил. А насчёт помощи… я сам ещё осваиваюсь, так что если что помогу, чем смогу.
Проблема в том, что, когда видишь название в коде на транслите, читать дальнейшее желание отпадает. Просто совет — в следующий раз подбирай все-таки англ. названия, хотя бы MainMenu, ExampleMenu, YetAnotherMenu, MenuManager, ContextMenu и проч.
И ни в коем случае не MojaMenu, EtoNovoeMenu, VipadaiMenu.
Мужик, ты уверен, что тебе стоит называть класс именем «Menushka»?
Читай также