forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Уроки (http://forum.boolean.name/forumdisplay.php?f=145)
-   -   Осваиваем Unity3d. Урок #1 (http://forum.boolean.name/showthread.php?t=12657)

pax 12.06.2010 02:25

Осваиваем Unity3d. Урок #1
 
Итак, Unity3d.

Можно было бы много рассказывать в вводной части статьи о том как Unity3D хорош )), но я это го делать не буду, потому что знаю, что многим это не нравится. Мое повествование относительно данного инструмента будет по существу с комментариями, которые должны помочь Вам начать работать в нем.

1. Устанавливаем.

Здесь можно было бы подробно описать ход установки, но я думаю Вы сами с этим справитесь, а я дам полезные рекомендации.
Если у Вас нет еще дистрибутива Unity3d, то скачать его можно по адресу http://unity3d.com/unity/download/ .
Во время установки следует обратить внимание на то, что Unity3d не дружит с русскими именами папок, и устанавливать ее стоит в папку, в которую есть полный доступ. Следовательно для владельцев Windows Vista и Windows 7 следует помнить, что если Вы будете устанавливать Unity3d в Program Files, т.е. в папку по умолчанию, то для нормальной работы придется либо дать полный доступ на папку с Unity3d, либо запускать ее с правами администратора. Для пользователей Windows XP об это не стоит волноваться.
Когда дойдете до этапа регистрации, то делайте онлайн регистрацию и выбирайте либо бесплатную, либо триальную профессиональную версию (по моему опыту лучше взять бесплатную, а если понадобится функционал про-версии, то просто в папку с Unity3d положить лекарство под другим именем, и ничего сверх естественного выполнять для этого не надо… этого я вам не говорил )); замечу, что вылеченная версия всегда выдает ошибку при выходе из среды, и вылетает немного чаще, но это уже издержки производства, и свои сцены надо будет сохранять почаще).
После установки, можно приступать к созданию своего первого проекта.

2. Создаем свой первый проект.

Первый запуск Unity3d скорее всего откроет демо проект острова, который демонстрирует возможности Unity3d по работе с ландшафтом и другими плюшками. Те кто установил про-версию увидят нормальную водичку, с размытием попадая под нее и отражениями окружающего мира, но и на бесплатной версии сцена смотрится прилично. Можете побегать по острову, послушать «карканье» птиц )), ну еще чем-нибудь позаниматься )). Не советую сразу изучать состав сцены и проекта, пока не стоит.

Первое что предстоит сделать, это войти в настройки программы, выбрать редактор исходных кодов (я надеюсь, что у Вас найдется время скачать и установить Visual Studio для работы с исходным кодом на C#, иначе можете пользоваться встроенным редактором, который есть в комплекте со средой; все, что он может – подсвечивать синтаксис) и поставить галочку напротив поля “Show Project Wizard At Startup”. Эта опция необходима для выбора проекта, с которым вы будете работать, открывая систему. Если оставить как есть, то при запуске среды, будет открываться последний проект.





Далее можно например перезапустить Unity3d, чтобы проверить, отображается ли визард проектов, либо создать новый проект через меню.
Итак при создании нового проекта мы снимем все галочки со стандартных пакаджей, чтобы не забивать ими голову. Должно получиться примерно так, как показано на следующем скриншоте.
Хочу напомнить о том, что Unity3d не «любит» русские имена папок и создавать проект в папке «Мои документы» не стоит, иначе вы будете получать ошибки доступа. Создайте папку «Projects» например, на диске D и в ней создайте свой первый проект.




3. Знакомимся со средой.
По умолчанию Вы внешний вид (на сколько мне не изменяет память) выглядит как на следующем скриншоте (у меня все настроено под себя, сейчас выбран Layout типа Tall, если вам захочется посмотреть другие типа расположения основных окон, либо открыть те, которые не отображены по умолчанию, то вы сможете найти их в меню Window).



Итак, по умолчанию есть пять важных вкладок:
1) Scene – 3d-вид разрабатываемой сцены. Аналогичные окна вы можете наблюдать в любом 3D редакторе. Позволяет манипулировать объектами сцены (положение, вращение, масштаб, редактировании ландшафта например и т.д.).
2) Game – в данном случае не активно, находится «за» вкладкой Scene – вид из камеры по умолчанию.
3) Hierarchy – иерархия сцены. Здесь находятся все объекты текущей сцены. По умолчанию содержит только одну камеру. Это окно можно так же назвать термином – граф сцены, т.к. любой объект сцены может иметь несколько потомков или быть потомком других объектов.
4) Project – окно, управляющее ресурсами. Здесь будет находиться все, начиная от моделей, заканчивая материалами, шрифтами, скриптами и т.д. С подробным списком возможных ресурсов я знакомить Вас не буду, рассмотрим ниже несколько.
5) Inspector – самое на мой взгляд важное окно. Отображает все свойства выбранного объекта в окнах Hierarchy, Project и др. Здесь для каждого объекта сцены будут настройки трансформаций, тэги и слои, а так же настройки различных компонентов, назначенных объекту.
6) Console – это окно не отображено по умолчанию, но очень важно при отладке ошибок. С ним вы очень быстро научитесь обращаться. Найти его можно в меню Window.

Так же главное окно содержит несколько полезных кнопок: слева вверху – кнопки управления видом окна Scene и манипуляций с объектами, вверху посередине – кнопки запуска отладки проекта и ее остановки (при запуске становится активным окно Game которое отображает все, что происходит в проекте с видом из главной камеры).


4. Начинаем осваиваться.

Начнем мы осваивать среду с окна Project, т.к. ресурсы – это главная составляющая любого проекта. Давайте создадим папочки для текстур, материалов и скриптов. Для этого щелкаем по кнопке «Create» данного окна и выбираем пункт Folder. Должно получиться примерно так:



Работа с окном Project напоминает работу с папкой файловой системы, так что Вы быстро освоитесь.
Теперь добавим несколько текстур в проект. Что бы это сделать есть два основных способа: перетащить файлы изображений из проводника Windows в нужную папку окна Project либо щелкнуть правой кнопкой мыши по нужной папке в окне Project и выбрать пункт контекстного меню «Import New Asset…». Я предпочитаю первый вариант.
О том, где взять текстуры я рассказывать не буду, с их поиском Вы должны справиться сами. У меня есть установленный 3ds Max, в папке Maps которого можно найти достаточно. Мне хватит двух – диффузной карты кирпичей и их бамп карты.
Должно получиться как на следующем скриншоте.


Выбрав одну из текстур, Вы увидите ее параметры импорта в окне Inspector.



Здесь можно настроить импорт текстур так, как Вы этого хотите. По умолчанию Unity3d импортирует текстуры с сжатием DXT1 – для не прозрачных текстур, DXT5 – для прозрачных. Но Вы можете выбрать любой другой формат хранения текстуры в памяти из предлагаемых. Так же можно задать параметры создания Mip-уровней детализации текстур.
Стандартная бамп-карта из 3ds Max является картой высот. Но т.к. материалы Unity3d конечно же рассчитаны на карты нормалей, нам нужно установить флажок «Generate Bumpmap», настроить параметры генерации и нажать на кнопку «Apply».

Две текстуры у нас есть, теперь перейдем к созданию материала на их основе.
Щелкаем правой кнопкой по папке Materials и выбираем «Create - > Material». Я переименую созданный материал в «Brick» и давайте рассмотрим его параметры в Инспекторе.



По умолчанию создается материал Diffuse, которому можно назначить цвет и одну текстуру. Назначить текстуру можно перетащив ее из окна Project на специальную область либо щелкнуть в данной области на маленькую кнопочку Select и выбрать текстуру из списка. Я предпочитаю первый вариант, так же как и с импортом ресурсов.



Но данный материал меня не устраивает, т.к. он не содержит поде для карты нормалей, с помощью которой я могу придать материалу более реалистичный вид. К счастью Unity3d имеет порядка сорока готовых материалов, которыми можно пользоваться. Выбрать тип материала можно из выпадающего списка, в котором сейчас выбран материал Diffuse. Для примера я выберу материал Paralax Specular для придания большей реалистичности нашему материалу.



Ну вот, наш первый материал готов.

Теперь давайте добавим в сцену первые объекты.
Создаются стандартные объекты с помощью меню GameObject.



Давайте добавим в сцену плоскость, куб и источник света. Разместим их примерно как показано на следующем скриншоте.



Сейчас в сцене выбран источник сета. Давайте взглянем, какие параметры есть в инспекторе для этого объекта.
Как и любой другой объект сцены, источник света имеет настройки трансформации. Ниже настроек трансформаций находится область настроек компонента источника света. Я не зря употребляю термин – компонент, т.к. поведение объектов в сцене Unity3d описывается назначенными им компонентами. Как создавать свои компоненты мы познакомимся позже. Я расскажу как их можно назначить объекту и как удалить.
Чтобы назначить компонент выбранному объекту сцены или проекта есть два пути:
1) Назначение стандартных компонентов Unity3d осуществляется через меню «Component».



В этом меню так же будут появляться пользовательские компоненты, когда они будут разработаны.
2) Второй способ - назначение пользовательских компонентов, путем перетаскивания скриптов из окна Project на окно Inspector активному объекту. Этот способ демонстрирует возможность назначения поведения объектам простым перетаскиванием, что является достаточно высокоуровневой задачей. Как это происходит, будет описано чуть ниже.

Выбрав в инспекторе куб можно увидеть сразу три назначенных компонента: Mesh Filter – компонент, позволяющий назначить объекту геометрическую сетку любой из импортированных моделей; Box Collider – физический коллайдер-примитив в виде бокса, говорящий другим физическим объектам сцены, что с этим объектом можно столкнуться; Mesh Renderer – компонент, вызывающий визуализацию назначенной данному объекту геометрической сетки в компоненте Mesh Filter с использованием назначенных материалов.

Итак, наша задача минимум – назначить нашему кубику созданный нами материал и заставить кубик упасть на плоскость, т.е. сделать куб динамическим твердым телом.
Чтобы назначить материал кубу – достаточно просто перетащить его на куб, либо открыть список материалов компонента Mesh Renderer нашего куба и перетащить материал на первый слот в массиве, либо (уже третье либо, о блин ну вот четвертое) щелкнув по слоту выбрать материал из выпадающего списка, заменив тем самым материал по умолчанию.
В инспекторе, после этой операции под компонентом Mesh Renderer появятся настройки присвоенного материала кубу.



Теперь, чтобы сделать куб динамическим, необходимо добавить ему компонент Rigid Body. Найти его можно в меню Component->Physics. Данный компонент так же появится в инспекторе выделенного куба.



Чтобы посмотреть, как кубик упадет на плоскость, нажмите кнопку «Play» в верхней части окна Unity3d. Можно так же поставить камеру в более удобный для просмотра ракурс.
Вот и все, Вы уже освоились. Если все еще что-то не понятно, то попробуйте перечитать статью и повторить все операции, прежде чем двигаться дальше.


5. Начинаем создавать мозги!

Данная часть завершающая, она даст Вам базовые навыки создания скриптов Unity3d на языке C#. Я, конечно, прокомментирую создание скриптов на Java Script, но не буду уделять им много внимания, т.к. мой текущий язык программирования – C#.
Создать свой первый скрипт можно таким же образом, что и материал. Правой кнопкой по папке, в которую мы хотим поместить свой новый скрипт – Create->C Charp Script.
По умолчанию Unity3d дает название скрипту – NewBehaviourScript.cs

Здесь я немного отвлекусь и зочу рассказать о термине «скрипт» со стороны программиста Unity3d.
Прежде всего не следует пугаться, что писать в Unity3d можно только скрипты. Т.к. это отпугивает интересующихся я хочу Вас обрадовать – под термином «скрипт» Unity3d подразумевает файл с исходным кодом, а не то что вы подумали )). Любой скрипт является полноценным файлом кода, в котором может быть практически все, что поддерживается средой выполнения .Net 2.0 (точнее Mono 1.2.5 на текущий момент, с выходом третьей версии среды Unity3d обещают интегрировать Mono 2.6, т.е. .Net 3.5), т.е. классы, структуры, интерфейсы и т.д. Но (всегда есть но) мы будет подразумевать под термином скрипт – класс, унаследованный, в основном, от класса MonoBehaviour (такое вот название) который будет представлять собой пользовательский компонент.
Теперь самое главное переварить. Т.е. проще: Вы можете писать любой по сложности объетноориентированный код средствами языка C#, но так же Вы моете создавать компоненты - скрипты, которые можно будет использовать так же как и стандартные компоненты, т.е. они будут добавлять «поведение» объекту сцены.
Основные правила создания компонентов: 1) объявление класса компонента должно быть вне пространств имен; 2) имя файла скрипта должно совпадать с именем класса; 3) класс должен быть унаследован от класса MonoBehaviour (это чаще всего).

Теперь можно посмотреть на внутренности наших мозгов, т.е. на содержимое созданного скрипта NewBehaviourScript.cs. Сделать этом можно дважды щелкнув по нему в окне Project (если вы выбрали в настройках Visual Studio, то Unity3d сгенерирует и откроет новое решение с данным скриптом, а так же откроет в браузере Visual Studio локальную справку по API функциям движка).
using UnityEngine;
using System.Collections;

Код:

public class NewBehaviourScript : MonoBehaviour
{
    // Функция, вызываемая после инициализации полей объекта
    void Awake(){

    }

    //Функция, вызываемая перед первым обновлением объекта
    void Start(){

    }

    //Функция, вызываемая перед каждым рендерингом кадра 3d мира
    void Update(){

    }
}

Как видим первой строкой у нас подключено пространство имен API движка Unity3d. Наш класс унаследован от MonoBehaviour и имеет по умолчанию три заранее созданных функции. Для программистов на C# возможно встанет вопрос, почему функции просто декларированы, а не переопределяют виртуальные или абстрактные функции класса MonoBehaviour. Здесь кроется интересный факт – Unity3d подхватывает эти функции во время компиляции средствами рефлексии, что дает возможность не выполнять несколько десятков пустых вызовов для нереализованных функций. Список всех таких функций приведен в документации к классу MonoBehaviour.
Для простого понимания как это работает, давайте дадим нашему объекту вращаться, вокруг оси Y с определенной скоростью, задаваемую параметром компонента типа float, а так же выведем на экран величину поворота вокруг этой оси и стандартный «Hello World!» (ну как же без него ;) ), саму строку введем так же параметром компонента типа string. Реализация представлена ниже с комментариями.

Код:

using UnityEngine;
using System.Collections;

public class NewBehaviourScript : MonoBehaviour
{
    public float RotationSpeed;
    public string HelloWorldString;

    //Функция, вызываемая перед каждым рендерингом кадра 3d мира
    void Update()
    {
        // расчет поворота вокруг оси Y с учетом пройденноговремени с прошедшего кадра
        Quaternion rotation = Quaternion.AngleAxis(RotationSpeed*Time.deltaTime, Vector3.up);

        // применение вращения
        transform.rotation *= rotation;
    }

    //Функция, вызываемая при визуализации графического интерфейса
    void OnGUI()
    {
        // выводим на экран строку HelloWorld
        GUI.Label( new Rect(10,10,150,20), HelloWorldString);
    }
}

Как видим все ясно и просто. Сохраняем и возвращаемся в Unity3d. Unity3d по умолчанию переимпортирует все измененные ресурсы при получении фокуса, а следовательно, и скомпилирует наш компонент. Нам остается только назначить компонент кубу и задать его параметры, как показано на следующем скриншоте. Инспектор преобразовал для нас публичные поля класса в редактируемые, так что работать с параметрами для каждого объекта становиться очень просто.



Запускаем сцену и наслаждаемся полученным результатом. А данная статья на этом закончена. Всем удачи в освноении Unity3d!

pax 12.06.2010 02:49

Ответ: Осваиваем Unity3d
 
Забыл сказать на последок: не забываем сохранять сцены, если они Вам еще понадобятся ;)

Теперь по поводу JS скриптов.

Работа данных скриптов не медленнее, не смотря на то что язык - JS. Эти скрипты так же компилируются и выполняются.

Основное отличие JS скриптов от C# - нет необходимости в базовом классе. Все публичные переменные пишутся вне функций, код вне функций выполняется во время инициализации компонентов, так же можно использовать все функции, подхватываемые рефлектором в наследниках класса MonoBehaviour.

В одном проекте могут быть скрипты всех трех поддерживаемых языков. Третий язык - это Boo - аналог питона (Python). Данный язык прост на синтаксис, но с особенностями (например отсутствие операторных скобок), менее распространен.

Nuprahtor 12.06.2010 11:25

Ответ: Осваиваем Unity3d
 
Цитата:

Когда дойдете до этапа регистрации, то делайте онлайн регистрацию и выбирайте либо бесплатную, либо триальную профессиональную версию (по моему опыту лучше взять бесплатную, а если понадобится функционал про-версии, то просто в папку с Unity3d положить лекарство под другим именем, и ничего сверх естественного выполнять для этого не надо… этого я вам не говорил )); замечу, что вылеченная версия всегда выдает ошибку при выходе из среды, и вылетает немного чаще, но это уже издержки производства, и свои сцены надо будет сохранять почаще).
После установки, можно приступать к созданию своего первого проекта.
http://blogs.unity3d.ru/2010/03/350-%D0%BC%D0%B8%D0%BB%D0%BB%D0%B8%D0%BE%D0%BD%D0%BE%D 0%B2-%D0%BB%D0%B5%D1%82/
Способ несколько чреват, но действует, так можно пользоваться триалкой, без всяких ошибок вылеченной версии.
Лекарство тоже понадобится, но уже для компиляции.

pax 12.06.2010 13:31

Ответ: Осваиваем Unity3d
 
Забыл о самом главном (вчера наверное уже выдохся... хм, а это было же сегодня).

Посмотреть результат

Hurrit 12.06.2010 15:08

Ответ: Осваиваем Unity3d
 
Другой темы не нашёл, поэтому задам вопрос тут: я никак не смог включить тени, хотя делал всё по тутору. Версия Unity самая последняя 2.6.1

Morganolla 12.06.2010 15:22

Ответ: Осваиваем Unity3d
 
pax
У меня предложение - сделать простой симулятор типа модель Солнечной системы с несколькими объектами (Солнце, Земля, Луна, ну и скажем Марс) и звездным скайбоксом. Как в Селестии... Текстуры можно взять из Селестии. Мне кажется эта задачка на пару дней работы... И чтобы с помощью мышки можно было летать (камерой)... Как такое предложение?

Dream 12.06.2010 16:25

Ответ: Осваиваем Unity3d
 
Вложений: 1
Насколько я понял, у обьекта есть Свойства ти Render Filter, там есть галочки про тени, и настройка их качества

Morganolla 12.06.2010 16:50

Ответ: Осваиваем Unity3d
 
Поставил себе бесплатный Юнити. Что-то теней он не дает гад, хотя галочки поставил?
И вообще есть вопросы:
- нужен ли для юнити Framework и какая версия?
- нужен ли для юнити Framework и какая версия, если делать скрипты на C#?
- как получить ехе-шник самой игры? Большие ли ехе-шники получаются?

pax 12.06.2010 17:21

Ответ: Осваиваем Unity3d
 
Цитата:

Сообщение от Hurrit (Сообщение 150080)
Другой темы не нашёл, поэтому задам вопрос тут: я никак не смог включить тени, хотя делал всё по тутору. Версия Unity самая последняя 2.6.1

Посмотрите по внимательнее на настройки источника света, я нарочно не стал на этом заострять внимание, это выходило за рамки статьи.

Цитата:

Сообщение от Morganolla (Сообщение 15092)
Поставил себе бесплатный Юнити. Что-то теней он не дает гад, хотя галочки поставил?
И вообще есть вопросы:
- нужен ли для юнити Framework и какая версия?
- нужен ли для юнити Framework и какая версия, если делать скрипты на C#?
- как получить ехе-шник самой игры? Большие ли ехе-шники получаются?

В бесплатной версии теней нет. Фреймворки не нужны, в юнити встроен Mono.

Создать игру для одной из платформ можно через меню File->BuildSettings. Там необходимо добавить те сцены, которые используются в игре, нулевая бедет стартовой (это обычно сплешскрины, меню). Там же можно выбрать платформу (PC/Mac/Web). Exe - всегда одинакового размера, так как он является плеером для собранной вами игры. Вот размер папки GameName_Data меняется с используемыми ресурсами в сценах.

Веб проект - пример с двумя текстурами 512х512 я потом сделал имеет размер немногим более 400кб

Morganolla 12.06.2010 17:28

Ответ: Осваиваем Unity3d
 
Спасибо! Вот те и бесплатный движок:(((
А платная версия стоит - охренеть 1500 баков.... Да уж....

pax 12.06.2010 17:31

Ответ: Осваиваем Unity3d
 
Для издателя такая цена очень маленькая, поверьте. Сначала купите 3ds max для создания моделей ;)
Меня пока устраивает вылеченная версия, а когда дело дойдет до публикации, я найду денег на нее.

Hurrit 12.06.2010 19:13

Ответ: Осваиваем Unity3d
 
Цитата:

Сообщение от pax (Сообщение 150098)
В бесплатной версии теней нет

А, вот в чем проблема.

Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 150 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

pax 12.06.2010 19:22

Ответ: Осваиваем Unity3d
 
Вот
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 100 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

Morganolla 12.06.2010 20:39

Ответ: Осваиваем Unity3d
 
Переставил себе версию PRO Все равно нет нормальных теней. Или надо еще какой-нибудь мапинг включить? Скажите все что нужно для теней сделать? А?

Fatalix3d 12.06.2010 21:05

Ответ: Осваиваем Unity3d
 
Для начала подними качество отображения в вьюпорте: Смени с good на фантастик там же можно регулировать все аспекты качества.



Потом в свойствах светильника:


вот пример работы теней:
http://i038.radikal.ru/1006/03/0dcc78ad5bb7.jpg

Вот и все.

Morganolla 12.06.2010 22:24

Ответ: Осваиваем Unity3d
 
Тень появилась!

Neodrop 16.06.2010 21:03

Ответ: Осваиваем Unity3d
 
Цитата:

Сообщение от Morganolla (Сообщение 150100)
Спасибо! Вот те и бесплатный движок:(((
А платная версия стоит - охренеть 1500 баков.... Да уж....

Моя PRO лицензия окупилась за один месяц. :cool:

ARA 17.06.2010 02:21

Ответ: Осваиваем Unity3d
 
В пользу Юнити скажу, что радует наличие полного комплекта шредеров и наверное можно делать игру не парясь за вывод графики особо и не нанимая шейдерастов. Программист логики есть и ладно. Цена продухта не высокая.

Минусы - ну и купишь ты лицензию, на 2 компа её всё равно нельзя поставить. Одному чтоли игры делать?)) Вторую лицензию покупать что то не в кайф, а таблетка нынче ущербная для Pro.

Dream 17.06.2010 02:24

Ответ: Осваиваем Unity3d
 
азачем две лицензии?:) компилить всё на одном компе:)) а разрабатывать хоть на тыщи)

SBJoker 17.06.2010 02:31

Ответ: Осваиваем Unity3d
 
Всё это хорошо конешно, но проблема в инструменте разработки это последняя из проблемм. Есть более насущные, такие как:
креатив - сделать что то новое
куча художников/моделеров
опытное руководство

А инструмент - дело наживное.

pax 17.06.2010 12:16

Ответ: Осваиваем Unity3d
 
Цитата:

Сообщение от .Squid (Сообщение 150451)
На стандартных шейдерах далеко не уедешь.

Сколько движков встречал, практически нигде и этого нет в комплекте. А в Unity порядка 40 предустановленных.

К тому же все они открыты, учитесь и пишите свои http://unity3d.com/support/resources...ilt-in-shaders

Neodrop 17.06.2010 23:01

Ответ: Осваиваем Unity3d
 
В версии 3.0 добавлен пакет новых модных постэффектов. Видео на www.unity3d.ru на первой странице. Но там далеко не все показано.
Не показан DOF
Не показан Radial Blur
и ещё какие-то, не припомню сразу.

Фыркать можно сколько угодно, особенно, если нет никаких шансов догнать экспресс.
Я уже говорил осьминогу, что лучше свою энергию направить на то, чтобы создать себе имя там, где уже 130 000 пользователей и по 15-20к каждый месяц прирастает, чем продолжать труп реанимировать. Тем более, знания прекрасные, только приложение тупиковое. ;)

Ксорс потрясающая и достойная уважения вещь. Только она устарела на 5-7 лет.

Morganolla 18.06.2010 00:02

Ответ: Осваиваем Unity3d
 
А можно скрипты писать на С++ или только на С#?

SBJoker 18.06.2010 02:11

Ответ: Осваиваем Unity3d
 
А ты видишь существенную разницу между C# и C++ ?

Dream 18.06.2010 02:45

Ответ: Осваиваем Unity3d
 
нет никакой разницы, зачем платить больше?

jfkkk 18.06.2010 11:45

Re: Осваиваем Unity3d
 
Как на Unity реализовать следующее:
1. Создать сцену с масштабом одна единица - один метр
2. Создать плэйн со сторонами в 1000 метров и с именем land
3. Создать кубик с именем player, размером 1 метр и зеленого цвета
4 Создать 3 кубика оранжевого цвета с именами bot+порядковый номер от 1 до 3
Расположение кубиков произвольное. Боты коллизится с игроком,землей и друг с другом. И штоб боты двигались по направлению к игроку с определенной скоростью, а игрок ,при приближении любого бота на расстояние в 3 метра, типа убегал на 10 метров в произвольном направлении.
Как всё это сделать используя редактор и без него.

pax 18.06.2010 11:57

Ответ: Осваиваем Unity3d
 
Считай что единица игрового мира - это один метр.
Как создавать кубики я описал в статье, план создается таким же образом, масштаб можно менять в компоненте Transform.
1-4 пункт делается визуально в редакторе.
Остальное - программированием, плюс я не понял - игрок тоже бот?

jfkkk 18.06.2010 12:20

Re: Осваиваем Unity3d
 
Я сижу на Блитце, других движков и языков кроме Вasic не юзал, образование гуманитарное ( это чтобы было понятен уровень моих навыков программирования).
Если остановиться на варианте без использования редактора, интересует все максимально подробно. Пусть игрок будет отдельным типом.

pax 18.06.2010 12:33

Ответ: Re: Осваиваем Unity3d
 
Цитата:

Сообщение от jfkkk (Сообщение 150531)
Если остановиться на варианте без использования редактора, интересует все максимально подробно. Пусть игрок будет отдельным типом.

Как будет время, опишу как сделать это программно, сейчас его нет. А пока у Вас есть время скачать и поставить Visual Studio (2008 или 2010) для нормального программирования на C#, т.к. программировать в блокноте на таком языке с существующими возможностями этой среды - просто тормозить!

Но лучше постарайтесь освоить работу со средой для выполнения пунктов 1-4, т.к. Вам все равно придется с ней работать в любом случае.

Nuprahtor 18.06.2010 12:43

Ответ: Осваиваем Unity3d
 
Цитата:

Как будет время, опишу как сделать это программно, сейчас его нет. А пока у Вас есть время скачать и поставить Visual Studio (2008 или 2010) для нормального программирования на C#, т.к. программировать в блокноте на таком языке с существующими возможностями этой среды - просто тормозить!
Для новичков больше подходит JavaScript, к нему и справка отличная есть, и туториалы все с использованием JS.

SBJoker 18.06.2010 13:15

Ответ: Осваиваем Unity3d
 
Чистка темы завершена, аппеляции подавать в установленом порядке.

pax 18.06.2010 13:21

Ответ: Осваиваем Unity3d
 
Цитата:

Сообщение от Nuprahtor (Сообщение 150534)
Для новичков больше подходит JavaScript, к нему и справка отличная есть, и туториалы все с использованием JS.

А зачем потом переучиваться на C#, если сразу можно ему учится?

Но если будет желание, то можешь конвертировать мой код потом на JS, я не против ;)

Neodrop 18.06.2010 23:09

Ответ: Осваиваем Unity3d
 
Sergion на нашем форуме сегодня выложил свой IDE со всеми плюшками как для C# так и для JavaScript
Для начинающих, это хороший инструмент. Особенно потому, что позволяет удобно работать с обоими языками.
http://unity3d.ru/distribution/viewt...hp?f=84&t=2084

jfkkk 23.06.2010 01:34

Re: Осваиваем Unity3d
 
В качестве эксперимента скачал Xors, реализовал обозначенную мной выше задачу без особых трудностей. Охота сравнить с методом решения оной задачки в Unity.

Zer0n 24.06.2010 09:34

Ответ: Осваиваем Unity3d. Урок #1
 
pax, а у тебя какая версия Unity?

pax 24.06.2010 10:31

Ответ: Осваиваем Unity3d. Урок #1
 
Цитата:

Сообщение от jfkkk (Сообщение 150946)
В качестве эксперимента скачал Xors, реализовал обозначенную мной выше задачу без особых трудностей. Охота сравнить с методом решения оной задачки в Unity.

Хочется узнать мнение о сравнении решений...

Цитата:

Сообщение от SlavyanOOs (Сообщение 151162)
pax, а у тебя какая версия Unity?

2.6.1f3

Nex 24.06.2010 11:02

Ответ: Осваиваем Unity3d. Урок #1
 
Вопросы не по теме, но хз где спросить.
1) У меня при добавлении теней в Unity появляются черные линии кругов на объектах под источником света с тенями, версия такая же как в посте выше и эти круги в версиях с кряком и без (бесплатная). Как убрать эти круги? :)
2) Что делает "Vector3" (JScripts)? :)
з.ы. справка на английском поэтому не особо понятно и в справке много всяких ссылок по "Vector3".

pax 24.06.2010 15:37

Ответ: Осваиваем Unity3d. Урок #1
 
1) возможно используется точечный источник света с большим радиусом, тени от него получаются так себе. Попробуй уменьшить размер источника света или изменить качество теней установив его в настройках (Edit->Project Settings->Quality). Можно попробоавть поменять тип источника света на направленный.

2) Vector3 - это структура (вектор) определяющая положение или направление чего-либо в 3D пространстве. Описывается тремя составляющими координатами - X, Y и Z. Для работы с векторами надо изучить векторную алгебру (сложение, вычтание, умножение на число, произведения - скалярное и векторное).

jfkkk 29.06.2010 01:38

Re: Ответ: Осваиваем Unity3d. Урок #1
 
Цитата:

Сообщение от pax (Сообщение 151167)
Хочется узнать мнение о сравнении решений...

На первый взгляд не сложно. Но очевидно, что слезши с Блитца на Юнити сразу не пересядешь. Обладая навыками юзера Basic, на Юнити ничего не сделаешь, нужно изучать С, причем ab ovo ( " с самых яиц", как говорили латиняне). Пока повременю с изучением С#, все же уменя хобби - геймдев, а не программирование. Мне нужен более высокоуровневый двиг.
Ну вообщем, я изначально преполагал такой результат.
Мой код решения этой задачи на Xorse (с аццкими переборами)
Код:

; Include header file
Include "xors3d.bb"

; setup maximum supported AntiAlias Type
xSetAntiAliasType xGetMaxAntiAlias()

; set application window caption
xAppTitle "Simple_AI sample"

; initialize graphics mode
xGraphics3D 800, 600, 32, 0,0;False, True
xCreateDSS 1024, 1024
; set texture filtring
xSetTextureFiltering TF_ANISOTROPICX16

; hide mouse pointer
;xHidePointer()

; enable antialiasing
xAntiAlias True

; create camera
Global camera = xCreateCamera()
xCameraRange camera, 0.1, 1000
; position camera
xPositionEntity camera, 0, 5, -10
xCameraEnableShadows camera
xCameraProjMode(camera, 1)

;land
land= xCreateCube()
xScaleEntity land,1000,0.1,1000
xEntityColor land,50,100,20



; for mouse look
xMoveMouse xGraphicsWidth() / 2, xGraphicsHeight() / 2
mousespeed#      = 0.5
camerasmoothness# = 4.5

; create light
 light = xCreateLight(2)
xLightRange light,150
;xRotateEntity light, 45, 0, 0
xPositionEntity light, 0, 55, -2
;xLightColor light, 125, 255, 0

; shadows
xInitShadows(1024, 0, 1024)
; set shadows params
xLightEnableShadows light,True
xSetShadowParams 4, 0.85, True, 300
xLightShadowEpsilons light, 0.01, 0.0

Type player
Field ent,model
Field id$
Field old_Z#,old_X#,dist#,x#,z#
Field run_flag
End Type

Function create_player(x#,y#,z#,id)
p.player= New player
p\ent=xCreatePivot()
p\model=xCreateCube()
xEntityColor p\model, 255,25,25
xPositionEntity p\model, x#,y#,z#
xEntityType p\model,1
p\id$="player"+id

End Function

Function AI_player()
For p.player=Each player

    For b.bot=Each bot
      If xEntityDistance (p\model,b\model)<=5  Or xEntityCollided(p\model,bot)
        p\old_Z#=xEntityZ_#(p\model,1)
        p\old_X#=xEntityX_#(p\model,1)
        xTurnEntity( p\model, 0,(( -xDeltaYaw# ( b\model,p\model )*.5))+Rnd(90), 0 )
      EndIf
  Next

  ;run and checck distance between old position and new position
    p\x# = p\old_X# - xEntityX_#(p\model,1)
    p\z# = p\old_Z# - xEntityZ_#(p\model,1)
    p\dist# = Sqr(p\x#*p\x# + p\z#*p\z#)
    If p\dist#<10 xMoveEntity  p\model,0,0,.7
 

Next


End Function

For i=1 To 5
 create_player(Rnd(50),1,Rnd(50),i)
Next


Type bot
Field ent,model
Field id$,current_enemy$,nm
End Type


Function create_bot(x#,y#,z#,id,current_enemy$)
 b.bot= New bot
 b\ent=xCreatePivot()
 b\model=xCreateCube()
 xEntityColor b\model, 200,150,0
 xPositionEntity b\model, x#,y#,z#
 xEntityPickMode b\ent,1
 xEntityType b\model,1
 ;xNameEntity(b\model, Handle(b))
 ;b\nm=xEntityName
 b\id$="bot"+id
 b\current_enemy$=current_enemy$

End Function

For i=1 To 15
  create_bot(Rnd(250),1,Rnd(250),i,"player"+Rand(1,5))
Next


Function AI_bots()
For b.bot=Each bot
  For p.player=Each player
      If p\id$=b\current_enemy$
        xTurnEntity( b\model, 0,( xDeltaYaw# ( b\model,p\model )*.1), 0 )
        xMoveEntity  b\model,0,0,.1 
      EndIf
      ;check new enemy
      If p\id$<>b\current_enemy$
        If xEntityDistance (b\model,p\model)<5
            b\current_enemy$=p\id$
        EndIf
      EndIf
  Next
 
Next

End Function


Function info_bots()
For b.bot=Each bot
  xCameraProject camera,xEntityX_#(b\model,1),xEntityY_#(b\model,1),xEntityZ_#(b\model,1)
  xText xProjectedX#(), xProjectedY#(), "bot_id  "+b\id$
  xText xProjectedX#(), xProjectedY#()+15, "current_enemy  "+b\current_enemy$
Next
End Function


;set collisions
Const bot=1
xCollisions bot,bot,1,2

; main program loop
While Not xKeyDown(KEY_ESCAPE)

    ; camera control
    If xKeyDown(KEY_W) Then xMoveEntity camera,  0,  0,  1
    If xKeyDown(KEY_S) Then xMoveEntity camera,  0,  0, -1
    If xKeyDown(KEY_A) Then xMoveEntity camera, -1,  0,  0
    If xKeyDown(KEY_D) Then xMoveEntity camera,  1,  0,  0
    mxs# = CurveValue(xMouseXSpeed() * mousespeed, mxs, camerasmoothness)
    mys# = CurveValue(xMouseYSpeed() * mousespeed, mys, camerasmoothness)
    camxa# = camxa - mxs Mod 360
    camya# = camya + mys
    If camya < -89 Then camya = -89
    If camya >  89 Then camya =  89
    xMoveMouse xGraphicsWidth() / 2, xGraphicsHeight() / 2
    xRotateEntity camera, camya, camxa, 0.0

    AI_bots()
    AI_player()
   
    ; update animations
    xUpdateWorld()
   
    ; render scene
    xRenderWorld(1,True)
   
    If xKeyHit(23) info_enable=1-info_enable
    If info_enable info_bots()

    ; switch back buffer
    xFlip()
   
Wend

; for camera mouse look
Function CurveValue#(newvalue#, oldvalue#, increments)
    If increments >  1 Then oldvalue# = oldvalue# - (oldvalue# - newvalue#) / increments
    If increments <= 1 Then oldvalue# = newvalue#
    Return oldvalue#
End Function


Zer0n 07.07.2010 10:41

Ответ: Осваиваем Unity3d. Урок #1
 
Насчет Visual Studio: Express версии Unity не тянет, а Pro - да. 2010 Pro тянет также, проверял!

Maksim 20.07.2011 17:17

Ответ: Осваиваем Unity3d. Урок #1
 
Ребята, а как поставить сеточку плоскости 0XZ? только не смейтесь!

Lestar 20.07.2011 19:40

Ответ: Осваиваем Unity3d. Урок #1
 
Вложений: 1
Примерно так :

RegIon 12.11.2011 15:59

Ответ: Осваиваем Unity3d. Урок #1
 
решил перелезть на юнити...насчет редактора,почему нелбзя обойтись обычным??2.6 версия пойдёт

pax 12.11.2011 16:12

Ответ: Осваиваем Unity3d. Урок #1
 
Вот эта подойдет:
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 1 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

RegIon 12.11.2011 16:31

Ответ: Осваиваем Unity3d. Урок #1
 
Цитата:

Сообщение от pax (Сообщение 209376)
Вот эта подойдет:
*** скрытый текст ***

спасибо,но я уже там-же нашёл чуууть постарей

RegIon 12.11.2011 19:50

Ответ: Осваиваем Unity3d. Урок #1
 
----

pax 12.11.2011 20:15

Ответ: Осваиваем Unity3d. Урок #1
 
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 5 сообщение(ий)):
У вас нет прав, чтобы видеть скрытый текст, содержащийся здесь.

RegIon 13.11.2011 07:49

Ответ: Осваиваем Unity3d. Урок #1
 
Цитата:

Сообщение от pax (Сообщение 209414)
*** скрытый текст ***

ок,да я ступил,когда патч ставил,он положил в папку exe-шник с другим названием(unity-2.exe),а я с ярлыка запускал...
А есть Локальная справка по Unity??
Почему у меня куб провалился под плейн,даже уже плейну прикрутил ТВЕРДОЕТЕЛО без гравитации??unity 3.2

pax 13.11.2011 11:15

Ответ: Осваиваем Unity3d. Урок #1
 
Колайдер есть у плейна? Локальная справка есть, доступна через меню.

RegIon 13.11.2011 11:43

Ответ: Осваиваем Unity3d. Урок #1
 
Да,был,трианг.Сам уже нашёл(через меню переходит на он-лине справку).

Код:

using UnityEngine;
using System.Collections;

public class main : MonoBehaviour {
      public int countBlock;
    public GameObject box;
    // Use this for initialization
    void Start () {
      int i;
      for(i=0;i<countBlock;i++){
              box = new GameObject("box"+i.ToString());
            box.AddComponent("BoxCollider");
            box.AddComponent("MeshFilter");
            //box.transform.position=new Vector3(Random.value*40-20,1,Random.value*40-20);
            box.transform.position=new Vector3(3,1,3);
        }
    }
   
    // Update is called once per frame
    void Update () {
   
    }
}

Как кодом материал прикрепить и тип меша??а то в справке нету.:mad:

pax 13.11.2011 13:02

Ответ: Осваиваем Unity3d. Урок #1
 
Примерно так?
PHP код:

using UnityEngine;
using System.Collections;

public class 
main MonoBehaviour
{
    public 
int countBlock;
    
// Use this for initialization
    
void Start()
    {
        
int i;
        for (
0countBlocki++)
        {
            var 
go GameObject.CreatePrimitive(PrimitiveType.Cube);
            
go.name "box" i.ToString();
            
go.transform.position = new Vector3(Random.value 40 201Random.value 40 20);
            
go.renderer.material.color = new Color(Random.valueRandom.valueRandom.value);
        }
    }

    
// Update is called once per frame
    
void Update()
    {

    }



RegIon 14.11.2011 08:30

Ответ: Осваиваем Unity3d. Урок #1
 
Код:

GUI.Label( new Rect(Screen.width/2-40,10,80,20),"Score:"+ score.ToString());
есть скин GUI "GUI",как его приципить к LABEL??
Можно ли в Unity сделать столкновение не физического тела(как в блитц),мне не надо чтоб кубик физическим был...?
Можно ли в Unity развернуть примитив(1) модели (RotateMesh в блитзе),а то когда в редакторе разворачиваешь,он меняет и оси движения(я крутил на 90 по x-в пол двигается тогда)

pax 14.11.2011 10:56

Ответ: Осваиваем Unity3d. Урок #1
 
1. Если скин, то
PHP код:

void OnGUI()
{
   
UnityEngine.GUI.skin this.GUI;


2. Используй CharacterController
3. Не понял, надо повернуть меш не вращая объект? Сделай пустой объект (GameObject->CreateEmpty) помести в него свою модель и вращай модель в локальных координатах (transform.localRotation)

HolyDel 14.11.2011 14:24

Ответ: Осваиваем Unity3d. Урок #1
 
можно избавиться от стартового окошка с выбором разрешения и качества графики?

pax 14.11.2011 15:11

Ответ: Осваиваем Unity3d. Урок #1
 
Можно в настройках.
Edit -> Project Settings -> Player -> Windows/Mac-> Display Resolution Dialog

RegIon 14.11.2011 16:26

Ответ: Осваиваем Unity3d. Урок #1
 
Цитата:

Можно ли в Unity развернуть примитив(1) модели (RotateMesh в блитзе),а то когда в редакторе разворачиваешь,он меняет и оси движения(я крутил на 90 по x-в пол двигается тогда)
ну есть мешь,капсуль,мне его нужно положить на плейн боком,но при его развороте меняются вектора направления,можно ли Развернуть сам примитив не меняя векторов??
Цитата:

void OnGUI()
{
UnityEngine.GUI.skin = this.GUI;
}

PHP код:

Assets/scripts/main.cs(34,31): error CS1061Type `main' does not contain a definition for `GUI' and no extension method `GUI' of type `main' could be found (are you missing a using directive or an assembly reference?) 

не хотит

pax 14.11.2011 16:35

Ответ: Осваиваем Unity3d. Урок #1
 
1. Я написал вариант решения, читай внимательнее. Если надо повернуть сам меш, то надо вычислить поворот для всех вершин и заменить в исходном меше.
2. Ты написал у меня есть скин GUI с названием GUI. Поэтому я написал this.GUI, если у тебя переменная со скином называется по другому, то исправляй сам.

RegIon 14.11.2011 16:57

Ответ: Осваиваем Unity3d. Урок #1
 
Характер не раблтает а с RIGIDBOGY все нормально,почему??

pax 14.11.2011 17:04

Ответ: Осваиваем Unity3d. Урок #1
 
Поясни что именно не работает, и что нормально с RigidBody

RegIon 14.11.2011 17:11

Ответ: Осваиваем Unity3d. Урок #1
 
Ну при Rightbody есть столкновение с окружающими объектами,а при характере-нет,а оба чтоб были нельзя

pax 14.11.2011 17:24

Ответ: Осваиваем Unity3d. Урок #1
 
В смысле не двигает остальные объекты? Или CharacterController проходит сквозь объекты? Объясняйся понятнее.

UPD: CharacterController надо двигать функцией Move, не трансформом.

UPD2: Вот еще варианты решения похожей проблемы: http://answers.unity3d.com/questions...ontroller.html

RegIon 14.11.2011 18:11

Ответ: Осваиваем Unity3d. Урок #1
 
Проходит сквозь всё....а как её вызывать ,move эту?
Всё.Нашел как с помощью Rightbody делать,нужно поставить галочки на :зафиксировать y,rot x,z, и отключить гравитацию

pax 14.11.2011 18:16

Ответ: Осваиваем Unity3d. Урок #1
 
GetComponent<CharacterConteroller>().Move(movement );

RegIon 14.11.2011 18:50

Ответ: Осваиваем Unity3d. Урок #1
 
Как узнать название объекта с которым произошло столкновение??


Часовой пояс GMT +4, время: 12:26.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot