16 января 2017

Unity: первые шаги одноного-однорукого инвалида


Я новичок. Совсем недавно установил этот движок. Поэтому здесь как и с донорским органом - только под таблетками свой собственный организм не будет отторгать новинку. Ломка началась и у меня - всё кажется неудобным, странным...
По мере продвижения буду стараться делать небольшие отчёты... зачем? Чтоб потом самому не забыть как нашаманить то или иное действо.
Посмотрим, что из этого выйдет :)

Свет

Я пока не умею особо моделить, поэтому начну делать вакханалию вместе с lowpoly. Итак, хочу, чтобы было простенькое lowpoly с цветами, независящими от положения камеры и источников света (почти так в Monument Valley)... Ну вот типа такого:


Недавно мне подсказали юзать шейдер Unlit. Задаешь цвет и вперед! Очень удобно, спасибо e-cone за подсказку!


А до этого я сам себе написал шпаргалку, и делал вот это для каждого материала:
  • Albedo - выставляем нужный цвет
  • Metallic - выкручиваем в 1
  • Smoothness - убираем в 0
  • Emission - самый важный параметр здесь. Пипеткой тыкаем нужный цвет. Само численное значение выставляется автоматически.
  • Убираем галки с Specular highlights и Reflections.

Камера

Мне нужно 2д. Выставляю Projection - Orthographic, и вуаля! У нас в наличие орто-проекционная камера. Конечно, юнити выигрывает именно своим 3д, поэтому чуточку пришлось посидеть, чтобы настроить 2.5D проекцию. Можно и в редакторе выставить угол Эйлера, например, в -60.


Но я решил сделать это руками:

        float y = -10.0f;
        Camera.main.transform.position = new Vector3(0, y, y * Mathf.Tan(Mathf.PI / 6));
        Camera.main.transform.localEulerAngles = new Vector3(-60, 0, 0);
 

Таким образом наша картинка проецируется под 30 градусов на экран. Вертикальные размеры уменьшаются вдвое. Мне очень нравится такой вид, если честно. И рисовать легко, и глубина чувствуется.

Cinema 4D

Импортировать объекты из Cinema 4D вроде нетрудно. Единственное, пришлось руками скопировать плагин из папки юнити в папку синема. Неудобно, но один раз сделать не проблема. После этого просто сохраняем файл из Cinema 4D в папку ассетов, и объекты автоматически распознаются и подхватываются в юнити.

Обработка соударений

А вот с этим пришлось попотеть. Реально, в Box2D и Nape очень легко сказать движку "столкновение обработано, не делай ничего сам". А вот как это сделать в Unity "по-нормальному" я так и не понял. В моем случае скорость может меняться только при соударениях, поэтому я сохраняю скорость локально и каждый раз оперирую с этим вектором внутри OnCollisionEnter.

DOTween

Буквально через пару дней знакомства мне понадобился твин-движок. Выбрал DOTween...
Ну вот вроде все сделал по инструкции: скачал, заимпортил, засетапил. А юнити все равно ругается! Что за ерунда?!


fDoor.transform.DOMoveZ ( 0.3, 0.3 );

Кидается вот такой ошибкой:
error CS1928: Type `UnityEngine.Transform' does not contain a member `DOMove' and the best extension method overload `DG.Tweening.ShortcutExtensions.DOMove(this UnityEngine.Transform, UnityEngine.Vector3, float, bool)' has some invalid arguments

За ногу этот юнити! После нескольких часов изысканий, переустановки DOTween, и чего-то там еще, оказалось, что я просто не указал f у каждого числа. Да, надо так:

fDoor.transform.DOMoveZ ( 0.3f, 0.3f );


Итого

Начало положено... Конечно, вопросов и косяков н-а-а-а-а-а-много больше! Начиная от таких базовых как:
  • почему не работает transform.position.x += 1?
  • как сделать, чтобы 1 пиксель картинки == 1 пиксель на экране (perfect pixel)
  • где здесь билборды?
и заканчивая глобальными вопросами вроде "как построить архитектуру всего проекта?"...
Но я решил собирать более наглядные что ли вещи... вроде света, камеры и другого. А сухому коду посвящать как можно меньше объема постов.
Вот как-то так! До скорого!

Сообщения, схожие по тематике:

0 коммент.:

Отправить комментарий