На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS

Дорогие друзья! Поздравляем вас с Новым 2018 годом!

Всем удачи, успеха и благополучия!
В новом году ожидаем новых рекордов при подсчёте количества ёлочек на экране ;)


msm.ru
! Предназначение данного раздела
Данный раздел предназначен для публикации уроков и примеров по разработке компьютерных игр любого сорта, в том числе авторских проектов участников нашего форума. Главное условие публикации: необходимо не только выложить свое творение, но и подробно описать процесс его создания, подводные камни и прочие, интересные для собрата-разработчика, вкусности.

Если вы желаете выложить свой проект - пишите в Общеорганизационную тему. Есть какие-то другие вопросы по делу - туда же.

Модераторы: Da$aD
  
> [MMORPG своими руками] Часть X, How is Unity3D?
    How is Unity3D?

    http://unity3d.com/ - буржуйский сайт.
    http://www.unity3d.ru/ - православный сайт.

    Итак, Unity. Что это такое. Это даже не движок - это IDE для создания игр.
    Т.е. скачав юнити, мы получаем не длл + хедеры, а редактор. Скриншот в аттаче.
    Работая в редакторе мы сразу же можем отлаживать свой продукт, не отходя от кассы.
    Практически Visual Studio для разработки игр.
    Большая часть работы по созданию сцен производиться мышкой, правда редактора GUI нет.
    Но думаю, разработчики исправятся.

    Редактор работает под Windows и MacOS.
    Игры работают под Windows, MacOS, iPhone, Wii, а также через платформонезависимый веб-плеер Unity (подключается к браузеру как плагин).
    Поддержка DirectX и OpenGL.

    Импорт ресурсов - перетаскиванием мыши. Правда для многих 3д форматов необходимо наличие установленного пакета 3д моделирования с конвертером в .fbx формат. (Unity сама вызовет конвертер).

    Внутри, помимо 3д графики, есть:
    1 - GUI - скромная, но для большинства игр вполне нормальна: кнопки, флажки, текстовые поля, бегунки, внутренние окна и прочее.
    2 - Физика - PhysX, правда в версии 2,6, которую я использую нет симуляции жидкостей, мягких тел и тканей. Но не особо и нужно.
    3 - Уровень 3D графики - на современном уровне. При этом обещана поддержка работы даже старого железа. Т.е. определенные гарантии кроссплатформенности в стиле Java.
    4 - Звук - 3д/2д
    5 - Сеть - поддерживается как HTTP, так и есть возможность создания сетевой части для реалтаймовых сетевых шутеров.
    6 - Модифицированный JavaScript, C# Script, Boo Script. Скрипты компилирутся JIT компилятором. Все это обеспечивает Mono. Event Driven архитектура.
    Что еще для счастья надо? :)

    Цена:
    1 - Есть Indi лицензия, естественно бесплатная, Часть функционала в ней урезана. Например, динамические тени. Но, в принципе, кастрация, мало заметна.
    2 - Pro лицензия: 1500$. Все включено.
    3 - Отдельные лицензии для iPhone

    Основы скриптинга

    На скриншоте, между инспектором и сценой отображены еще две вкладки:
    1 - Иерархия - отображает объекты сцены.
    2 - Проект - отображает файлы проекта.

    Для создания игры, необходимо создавать и размещать объекты на сцене. Путем GameObject->Create или перетаскиванием 3д моделей на сцену. Каждый объект может содержать дочерние компоненты. Это могут быть другие объекты, скрипты, модели источники света и прочее.

    Сейчас мы поговорим о скриптах. Чтобы заставить их работать, надо перетащить скрипт на игровой объект. У объекта появится компонент с названием соответствующего скрипта. В самом скрипте можно описывать (переопределять) методы, которые обрабатывают различные события.
    Подробное описание здесь: http://unity3d.com/support/documentation/ScriptReference/MonoBehaviour.html
    Наиболее часто встречающийся скрипт выглядит примерно вот так:
    ExpandedWrap disabled
      function Update(){
          var delta : float = Time.time - mLastUpdate;
       
          if(delta > UPDATE_TIMEOUT){
              var form2  : WWWForm = new  WWWForm();
              form2.AddField("abort", "false");
              mSceneManager.Request("WaitBattle",form2);
              mLastUpdate = Time.time;
          }
      }
       
      function OnGUI(){
          GUI.DrawTexture(Rect (0,0,600,450),mPrepareBack);
          
          var txt : String = mSceneManager.mTextTable.GetAbortBattleFinding();
          var count : int = Time.time;
          count = count % 5;
          txt += " ";
          for(var i : int = 0; i < count; i++) {
              txt += ".";
          }
          
          if(GUI.Button(Rect (150,200,300,50),txt)){
              var form2  : WWWForm = new  WWWForm();
              form2.AddField("abort", "true");
              mSceneManager.Request("WaitBattle",form2);
          }
      }
       
      var UPDATE_TIMEOUT : float = 5.0;
      var mLastUpdate : float = 0.0;
      var mSceneManager:SceneManager;
      var mPrepareBack:Texture;


    Как вы уже наверное заметили, в этом модифицированном варианте JavaScript можно явно указывать тип переменной. Это увеличивает производительность.

    Как видно в листинге. Есть методы, есть переменные. Но методы Update и OnGUI особые. Это переопределенные методы, которые обрабатывают события. Эти два метода вызываются каждый кадр.
    Но метод OnGUI позволяет использовать методы класса GUI, посредством которых это самое GUI и отрисовывается. Также полезным может быть метод Start, который вызывается при инициализации компонента.

    Переменные класса, а ведь переменные объявленные вне методов скрипта и есть члены класса, тип которого определяется названием. (Вообще, каждый скрипт неявно переопределяет базовый класс MonoBehaviour), могут быть проинициализированы как в коде, так и в Инспекторе. Причем для указания ссылок на другие компоненты (в нашем случае это SceneManager и Texture). Удобней всего использовать именно инспектор.

    Интеграция в браузер

    При сборке игры в бинарник выбираем опцию Web Player. Для нас создается некий бинарник вида <name>.unity3d и страничка <name>.html. Данная страничка уже содержит код встраивания нашего объекта в браузер. Содержит также скрипты проверки наличия нужной версии Unity Player. Вообщем достаточно разместить данную страничку (и бинарник) ввиде фрейма или просто как отдельную страничку на сайте и все будет работать. Правда стоит отметить, что в браузере размер объекта зафиксирован 600х450. Правда есть возможность через меню по правой мышке перейти в FullScreen.

    API плеера также позволяет обращаться к JavaScript, расположенном на этой же странице: вызывать методы, просматривать значение переменных. При отправке HTTP запросов браузер сам прикрепляет к ним куки. Т.е. вопрос ручной передачи ID сессии, как мы это делали с Java приложением уже не актуален.

    Русский шрифт

    Изначально Unity с русскими буквами не дружит. Но это легко исправить. Для начала стоит импортировать (например, из Windows) шрифт, поддерживающий русский язык. Далее это надо установить строчкой кода:
    ExpandedWrap disabled
      GUI.skin.font = mGUIFont;

    После этого,все файлы скриптов, в которых используется русский текст надо переконветировать в UTF-8, любым текстовым редактором, который это умеет, т.к. изначально файлы создаются в другой кодировке.
    Теперь можно спокойно использовать русский текст:
    ExpandedWrap disabled
      GUI.Box (Rect (0,0,300 ,200), "Заголовок");
    Сообщение отредактировано: impik777 -

    Прикреплённая картинка
    Прикреплённая картинка
      Ура! Ура! Склад! (с) :)

      Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
        Цитата Астарот @
        Ура! Ура! Склад! (с)

        эм? что-то не припоминаю...
          Ну ты что! Это ж дядя Федор, Матроскин и Шарик ходили склад искать :)

          Право — это возведенная в закон справедливость. Закон есть этика, высеченная в логике.
            Цитата Астарот @
            Ну ты что! Это ж дядя Федор, Матроскин и Шарик ходили склад искать :)

            ааа

            Такс, данный урок написан полностью.
              impik777, спасибо, очень интересно! :good:
                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script Execution time: 0,0957 ]   [ 18 queries used ]   [ Generated: 20.01.18, 23:03 GMT ]