Создание легкого меню или азы Unity скриптинга

Научился сам? Помоги начинающему.

Создание легкого меню или азы Unity скриптинга

Сообщение FunnyAlien 14 фев 2011, 13:00

Доброго времени суток, уважаемые участники unity3d.ru!
Сегодня я расскажу как реализовать простое меню для вашего проекта в Unity3D и помогу вам чуток разобрать Unity скриптинг.


Что понадобится сегодня?

  • Unity3D - версия не имеет значения.
  • Интерфейс - знание движка в лицо, ну или хотя бы со стороны.
  • Прямые руки - с рождения.

Часть первая. Подготовка к работе.

1. Для начала, конечно же, откройте сам Unity3D и создайте новый, чистый проект. А как? File --> New Project...
2. Создайте его в пути, не имеющий кириллицы. И не отмечайте галочки, нам вполне сойдет стандартный набор инструментов.
3. Перед нами голый проект, на котором мы создадим ваше первое меню.

Изображение

4. Создайте новый скрипт нажатием ПКМ (правой кнопкой мыши), во вкладке Project.
Create --> JavaScript.
5. Назовем его TextControl. Щелкните два раза ЛКМ (левой кнопкой мыши) по названию скрипта.

Часть вторая. Сборка сцены.

6. В свежей сцене создайте Plane и четыре куба через вкладку GameObject --> Create Other --> Plane, Cube.
7. Так же добавьте Point Light для эффекта.

8. У вас должно получится что-то в этом духе.

Изображение

9. Теперь создайте три 3D текста. GameObject --> Create Other --> 3D Text. Не забудьте развернуть их по оси Y на 180 градусов.

10. Расположите текст так, чтобы они были в середке кубиков. Текст можно вписать в Inspector --> Text Mesh --> Text.
Получилось вот что.

Изображение

11. Выделите все объекты в Hierarchy и нажмите сочетание клавиш Ctrl+D.
12. Отодвиньте все объекты вправо и переименуйте текст в Fastest, Fantastic и Cancel.

Изображение

13. Камеру находящаяся над главный меню назовите Camera1, а вторую, находящуюся над настройками графики, Camera2.
14. Создайте папочку Scenes нажатием ПКМ во вкладке Project. Create --> Folder.
15. Сохраните сцену под названием MainMenu и поместите ее в папку Scenes. File --> Save Scene.
Если все идеально, должно получится прямо как у меня.

Изображение

Часть третья. Контроль текста.

16. Откройте скрипт TextControl и приготовьтесь писать.

17. Для начала давайте создадим переменную isNewGameButton, при которой объект будет загружать сцену.

Синтаксис:
Используется javascript
var isNewGameButton = false;

Примечание: Почему false? Потому-что при true переменная будет срабатывать сразу.

18. Лучше не раскатывать тесто, и сразу выставить нужные переменные.

Синтаксис:
Используется javascript
var isOptionsButton = false;
var isQualityButtonFastest = false;  
var isQualityButtonFantastic = false;  
var isMainMenuButton = false;
var isQuitButton = false;


19. Теперь давайте разберем самое интересное. При входе на объект курсора мыши, его материал моментально изменяется.

Вход:

Синтаксис:
Используется javascript
function onMouseEnter()  
{


Выход:

Синтаксис:
Используется javascript
function OnMouseExit()  
{


Смена материала на серый цвет при входе курсора будет осуществляться таким образом:

Синтаксис:
Используется javascript
function onMouseEnter()  
{  

renderer.material.color = Color.gray;  

}


А возвращение материала в прежний вид при выходе курсора выглядит так:

Синтаксис:
Используется javascript
function OnMouseExit()  
{  

renderer.material.color = Color.white;  

}

Примечание: Белый цвет, точнее Color.white, возвращает обычный цвет текстуре.

20. Сейчас мы начнем делать нажатие на объекты.

Нажатие осуществляется через:

Синтаксис:
Используется javascript
function onMouseUp()  
{


А чтобы занять чем-то нажатие, мы составим свойства для каждой переменной.

Для начала возьмем переменную IsQuitButton:

Синтаксис:
Используется javascript
function onMouseUp()  
{  

if ( isQuitButton )  
{  

Application.Quit();  

}

Примечание: Application.Quit() осуществляет выход из игры полностью.

Теперь возьмем переменную ужасной графики.

Синтаксис:
Используется javascript
else if ( isQualityButtonFastest )  
{  

QualitySettings.currentLevel = QualityLevel.Fastest;  

}

Примечание: else дает возможность работать в onMouseUp() много раз. А QualitySettings.currentLevel = QualityLevel.Fastest изменяет графику на уровне.

Синтаксис:
Используется javascript
else if ( isQualityButtonFantastic )  
{  

QualitySettings.currentLevel = QualityLevel.Fantastic;  

}

Примечание: Тоже самое что и выше, но теперь с максимальной графикой.

Теперь возьмем переменную загрузки уровня.

Синтаксис:
Используется javascript
else if ( isNewGameButton )
{  

Application.LoadLevel (1);   

}

Примечание: Application.LoadLevel () дает возможность загружать уровень. А число в скобках пишут для точной загрузки нужного левела.

21. Теперь поработаем с камерами. Создайте новые две переменные:

Синтаксис:
Используется javascript
var camera1:Camera;  
var camera2:Camera;


А теперь продолжите таким образом:

Синтаксис:
Используется javascript
else if ( isOptionsButton )  
{    

camera1.enabled = false;  
camera2.enabled = true;  
}

Примечание: Мы работаем с нажатием, и таким образом, когда вы щелкаете на кнопке Options, первая камера отключается, а вторая начинает функционировать.

22. Ну и последнее что нам нужно, это возвращение из игры в меню.

Синтаксис:
Используется javascript
else if ( isMainMenuButton )
{  

Application.LoadLevel (0);   
}


Добавьте в конце закрывающуюся скобку }.

23. Проверяем.

Синтаксис:
Используется javascript
var isNewGameButton = false;
var isOptionsButton = false;
var isQualityButtonFastest = false;  
var isQualityButtonFantastic = false;  
var isMainMenuButton = false;
var isQuitButton = false;  
var camera1:Camera;  
var camera2:Camera;  

function onMouseEnter()  
{  

//color.X - any color that you like
renderer.material.color = Color.gray;  

}  

function OnMouseExit()  
{  

//color.X - any color that you like
renderer.material.color = Color.white;  

}  

function onMouseUp()  
{  

if ( isQuitButton )  
{  

Application.Quit();  

}  
else if ( isQualityButtonFastest )  
{  

QualitySettings.currentLevel = QualityLevel.Fastest;  

}  
else if ( isQualityButtonFantastic )  
{  

QualitySettings.currentLevel = QualityLevel.Fantastic;  

}  
else if ( isNewGameButton )
{  

//it can be any level
Application.LoadLevel (1);   

}
else if ( isOptionsButton )  
{    

camera1.enabled = false;  
camera2.enabled = true;  
}
else if ( isMainMenuButton )
{  

//main menu level
Application.LoadLevel (0);   
}
}


Часть четвертая. Сборка меню.

24. Назначьте готовый скрипт ко всем кнопкам в сцене.
25. Теперь смотрим в Inspector --> Text Control (Script) и разбираем.

Для начала выберите кубик с New Game и поставьте галочку Is New Game Button.
Затем щелкните кубик с Options и поставьте галку Is Options Button. А еще в поле Camera 1 вставьте первую камеру, а в поле Camera 2, вторую.
На кубике Quit галку Is Quit Button.

Сейчас мы переходим на место с настройками. Выделите куб Fastest и поставьте галочку Is Quality Button Fastest. Так же Fantastic, но уже Is Quality Button Fantastic.
Выделите кнопку Cancel, поставье галочку Is Options Button, и вставьте в поле Camera 1 вторую камеру, а в поле Camera 2, первую.
Примечание: Почему? Потому-что нам нужен обратный процесс.

Для загрузки сцены (1), то есть, Is New Game Button, при компиляции, выставьте уровень под нужным вам числом. И не забудьте изменить значение в скрипте!

Так же, если потребуется выйти из уровня обратно в меню, используйте переменную Is Main Menu Button.

26. Теперь посмотрим что получилось.

Если все в порядке, значит я не зря писал данный урок :)
А если возникли какие-то проблемы, пишите, помогу всем, чем смогу.
Спасибо за внимание, с вами был Валентин. Желаю успехов в игрострое!
И не ругайте сильно, я сам еще далек от совершенства, и урок рассчитан на новичок, и никак не поможет мастерам.

Ну а в следующем уроке я расскажу, как улучшить меню в плане возможностей ;;)
Изображение
Аватара пользователя
FunnyAlien
UNIт
 
Сообщения: 94
Зарегистрирован: 03 дек 2009, 19:10
Откуда: Тюмень
  • Сайт
  • ICQ

Re: Создание легкого меню или азы Unity скриптинга

Сообщение Golandez 14 фев 2011, 14:39

FunnyAlien писал(а):*Прямые руки - с рождения.

Прямые с рождения руки подразумевают использование примитивов созданных не в Unity.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Создание легкого меню или азы Unity скриптинга

Сообщение FunnyAlien 16 фев 2011, 16:29

Golandez писал(а):
FunnyAlien писал(а):*Прямые руки - с рождения.

Прямые с рождения руки подразумевают использование примитивов созданных не в Unity.


Это вопрос? :((
Изображение
Аватара пользователя
FunnyAlien
UNIт
 
Сообщения: 94
Зарегистрирован: 03 дек 2009, 19:10
Откуда: Тюмень
  • Сайт
  • ICQ

Re: Создание легкого меню или азы Unity скриптинга

Сообщение Golandez 16 фев 2011, 17:41

Это утверждение.Следующая попытка съязвить окончится фатально.
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Создание легкого меню или азы Unity скриптинга

Сообщение Graveier 16 фев 2011, 17:54

Человек выставил на суд свой урок,и наша задача высказать своё мнение.
Мне понравилась обучалка-всё объяснено и обосновано.Где,как,что...
(3A4OT)
И когда автор писал про прямые руки,я думаю он просто пошутил.Намекая,на то,что всё-таки и самому надо мыслить,несмотря на то,что всё разложено по полочкам.
Аватара пользователя
Graveier
UNIт
 
Сообщения: 149
Зарегистрирован: 08 ноя 2009, 20:25

Re: Создание легкого меню или азы Unity скриптинга

Сообщение seaman 16 фев 2011, 20:31

Прямые с рождения руки подразумевают использование примитивов созданных не в Unity.

Прямые с рождения руки подразумевают использование инструментов, предоставляемых программой (в данном случае - примитивов в Юнити), а не изобретение велосипеда (в данном случае создание примитивов не в Юнити)...

Или Вы имели в виду нечто другое (не кубы), а я Вас просто не понял?
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Создание легкого меню или азы Unity скриптинга

Сообщение Nevers 22 фев 2011, 10:24

2FunnyAlien - Спасибо вам за урок. Но к сожалению мои познания в Unity пока слабы. Поэтому у меня есть пара вопросов к вам и знатокам данного движка.
Выполнил все пункты. Но у меня при компиляции только одна сцена под цифрой 0. Как мне создать сцену 1. Всмысле я скопировал объекты все сделал. Но наверное их надо как-то сохранить отдельно?
И еще. Выложите пожалуйста исходники данного урока. Это очень поможет в поиске своих ошибок на примере рабочей версии.
Спасибо.
Nevers
UNIт
 
Сообщения: 56
Зарегистрирован: 22 фев 2011, 10:16

Re: Создание легкого меню или азы Unity скриптинга

Сообщение FunnyAlien 22 фев 2011, 11:21

Nevers писал(а):2FunnyAlien - Спасибо вам за урок. Но к сожалению мои познания в Unity пока слабы. Поэтому у меня есть пара вопросов к вам и знатокам данного движка.
Выполнил все пункты. Но у меня при компиляции только одна сцена под цифрой 0. Как мне создать сцену 1. Всмысле я скопировал объекты все сделал. Но наверное их надо как-то сохранить отдельно?
И еще. Выложите пожалуйста исходники данного урока. Это очень поможет в поиске своих ошибок на примере рабочей версии.
Спасибо.


Сохраняйте сцену прямо в Assets проекта, она появится в Project'e.
Затем чтобы добавить сцену один, просто перетащите ее из Project в окошечко компилирования.

Скачать пакет можно здесь :ymhug:
Изображение
Аватара пользователя
FunnyAlien
UNIт
 
Сообщения: 94
Зарегистрирован: 03 дек 2009, 19:10
Откуда: Тюмень
  • Сайт
  • ICQ

Re: Создание легкого меню или азы Unity скриптинга

Сообщение BlackDizel 03 май 2011, 10:13

***
Последний раз редактировалось BlackDizel 03 май 2011, 11:31, всего редактировалось 1 раз.
BlackDizel
UNец
 
Сообщения: 1
Зарегистрирован: 03 май 2011, 10:06

Re: Создание легкого меню или азы Unity скриптинга

Сообщение odimmoo 03 май 2011, 10:50

Спасибо огромное, благодаря Вам я хоть и медленно, но продвигаюсь в скриптинге.
Главное, что благодаря таким урокам я понимаю основные принципы построения кода.
Спасибо, ещё раз.
odimmoo
UNец
 
Сообщения: 8
Зарегистрирован: 03 сен 2009, 13:06
  • Сайт
  • ICQ

Re: Создание легкого меню или азы Unity скриптинга

Сообщение Levitanus 26 май 2011, 18:06

все сделал по тутору, но менюшка не работает:(
Пробовал запускать готовый проект с темы, но тоже ни в какую, курсор неизменен, кнопки не реагируют....

Может, конфликт версий, хотя, какой там может быть конфликт....
Levitanus
UNец
 
Сообщения: 2
Зарегистрирован: 26 май 2011, 17:46

Re: Создание легкого меню или азы Unity скриптинга

Сообщение Levitanus 26 май 2011, 18:10

все сделал по тутору, но менюшка не работает:(
Пробовал запускать готовый проект с темы, но тоже ни в какую, курсор неизменен, кнопки не реагируют....

Может, конфликт версий, хотя, какой там может быть конфликт....

P.S. добавил в скрипт function update () {
}

выдал ошибку в скрипте: во
У вас нет доступа для просмотра вложений в этом сообщении.
Levitanus
UNец
 
Сообщения: 2
Зарегистрирован: 26 май 2011, 17:46

Re: Создание легкого меню или азы Unity скриптинга

Сообщение Zaicheg 26 май 2011, 22:06

В ошибке всё чётко написано. Забыли закрывающую скобку у Update
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Создание легкого меню или азы Unity скриптинга

Сообщение kremenizator 08 июн 2011, 20:58

Сделал все, как описано, проэкт открывается, но кнопки не реагируют на нажатия :(
kremenizator
UNец
 
Сообщения: 23
Зарегистрирован: 06 июн 2011, 14:10

Re: Создание легкого меню или азы Unity скриптинга

Сообщение Alcatraz 09 июн 2011, 09:58

Box Collider на кнопки ставить надо, что бы сработало нажатие. :ymparty:
Unity3D Game Developer
Аватара пользователя
Alcatraz
UNITрон
 
Сообщения: 236
Зарегистрирован: 07 июн 2011, 09:12
Откуда: Москва
  • Сайт
  • ICQ

След.

Вернуться в Уроки

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3