Физические материалы в Unity 3d

Всем доброго времени суток. Сегодня я снова буду рассматривать Unity 3d и рассматривать я буду такую вещь как физические материалы.

 

На все объекты которые находятся на нашей сцене можно сделать не только влияние гравитации, но и обозначить из какого материала будут состоять данные объекты. Можно сделать материалы из дерева либо металла. Или применить к ним другие физические материалы.

 

Давайте рассмотрим как же это сделать. Открываем наш Unity 3d и создаем простенькую сцену, я сделал просто платформу, над ней развесил несколько кубов, к которым буду применять материалы и навел на них камеру.

 

Теперь выбираем один из этих кубов и в окне Inspector находим Box Collider и видим там надпись Material. Нажимаем на кружок рядом и выбираем материал из которого должен состоять объект. Так же к каждому объекту, то бишь нашему созданному кубу добавляем Rigidbody и ставим галочку чтобы на них влияла гравитация. О этом я писал в прошлой статье.

Добавление физического материала
Dante

По умолчанию есть семь физических материалов Bouncy, Ice, MaxFriction, Metal, Rubber, Wood, ZeroFriction. Bouncy это упругий материал, он будет падать отпрыгивать обратно и снова падать под влиянием гравитации. Следующий материал Ice, то есть лед, по идее он должен быть скользким, но отпрыгивать он особо не будет просто упадет. MaxFriction так же просто упадет, этот материал влияет на трение и при добавлении этого материала трение нашего объекта будет максимальным. Metal, это металлический материал, то есть объект будет вести себя как металлический. Rubber резина, не настолько упругая как Bouncy, но и не совсем твердая, при падении произведет несколько отскоков. Затем идет Wood, дерево вести себя данный куб будет как деревянный. Ну и ZeroFriction даст материалу для которого он задан минимальное трение.

 

При простом падении мы можем видеть только влияние материалов которые влияют на отскок, объекта, Если же мы повернем платформу на которую будут падать объекты под углом то увидим такие свойства как трение, одни объекты будут скользить другие же остановятся, а наш самый упругий объект Bouncy весело упрыгает под воздействием гравитации. Так же на эти объекты смогут влиять и наши персонажи, в зависимости от того какой материал будет на объекте.

 

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

Физический скрипт Rigidbody в Unity

Всем доброго времени суток. Сегодня я буду рассматривать физическую часть движка Unity 3d а именно Rigidbody.

 

Чтобы не путаться с тем что уже сделано, а что нет, я создал новую платформу, и повесил над ней сферу, которая и является нашим испытуемым объектом. Rigidbody можно добавить на наш объект, для этого надо выделить объект на который добавляем физическую часть, затем переходим в меню Component > Phisics > Rigidbody. Теперь в инспекторе появилась надпись Rigidbody.

Rigidbody в Unity 3d
Dante

Что в нем мы имеем? Сначала идет Mass это масса, измеряется в килограммах, здесь все просто. Дальше идет Drag, если верить Google, это тянуть, тащить, перетаскивать, а в реальности это вязкость среды. То есть, если мы повысим заданное число, то наш объект будет продвигаться в данной среде медленнее, как например в воде, или в болоте. Затем идет Angular Drag, это тоже что и Drag, только угловая вязкость, то есть вязкость для вращения. Чтобы контролировать скорость вращения. Следующей идет Use Gravity, это гравитация, если данную галочку убрать то гравитации не будет, и объекты не будут двигаться под воздействием силы тяжести. Далее у нас идет Is Kinematic, включение отключение кинематики, при включенной кинематике, внешние физические воздействия не будут производить на объект никакого влияния. Короче кто не понял посмотрите что такое кинематика. Теперь у нас идет Interpolate это сглаживание движения, здесь у нас есть выбор того что можно настроить, по умолчанию стоит None, то бишь интерполяция а именно поиск промежуточных значений в физическом движении отключена. Данное значение можно изменить на Interpolate это по прошлому кадру, либо Extrapolate по следующему кадру. При большой скорости движения данные значения могут сгладить движения нашего объекта. Следующим пунктом у нас идет Collision Detection, данный пункт отвечает за столкновения, к примеру выстрелы и столкновения пули, пули летят с большой скоростью и данный пункт может помочь в случае каких-либо проблем, с пролетанием сквозь объект и тд. Discrete который стоит у нас по умолчанию, это самое обычное столкновение. Continuous это частое столкновение, когда наш объект много сталкивается, ну к примеру много разных объектов, и чтобы они не проходили сквозь друг друга используется Continuous. И крайнее наше значение здесь это Continuous Dynamic, данный скрипт используется для пуль и иных объектов обладающих очень большими скоростями, используется для того чтобы на больших скоростях объекты не проходили сквозь друг друга. То есть, пуля, к примеру может застрять, отскочить, срикошетить но не пройти сквозь объект. Если я правильно понял. Ну и крайний пункт который у нас есть в Rigidbody, это Constraints. Данный пункт отвечает за замораживание движения. То бишь вы можете ограничить движение по определенному вектору., здесь все достаточно просто, выбираем вектор по которому вращение нам ненужно, и ставим там галочку. Ну здесь надо пробовать чтобы получилось что необходимо, если к примеру нам надо чтобы платформа провернулась просто на месте, то выделяем галочкой при этом первая строка Freeze Position, отвечает за вектора вращение по которым необходимо запретить то бишь если мы её выделим всю, то наш объект будет просто вращаться на месте. А вторую строку сам до конца не понял. Ладно потом может докумекаю.

 

Вот как то все так. Мне так полезно было, а вы смотрите сами.

Красим куб в случайный цвет в Unity

Рандомные материалы

 

Всем доброго времени суток, сегодня я хочу рассмотреть возможность подставлять случайные материалы на наши объекты в Unity. Это иногда может быть достаточно полезно.

 

Открываем наш Unity берем объект на котором будем экспериментировать, я решил ставить эксперименты над своим «Танком». Да просто лень создавать новые объекты для того чтобы сделать простой урок. И создаем скрипт вот такого вида

Скрипт создания случайных материалов
Dante

 

Теперь давайте рассмотрим что мы здесь наваяли. Для начала объявляем массив материалов public Material[] и называем его randMaterial приравнивая new Material[4]; новому материалу и здесь в квадратных скобках указано количество элементов, у меня 4. Далее в функции Старт пишем переменную int с названием random и приравниваем её функции Random что это такое думаю должно быть известно, и теперь указываем диапазон изменения переменной Range (0,4). То есть от какого значения и до какого она изменяется, при этом максимальное значение в диапазон не входит, то есть значение может быть 0, 1, 2, 3, четыре уже не входит в указанный диапазон. Дальше мы получаем компонент Renderer, вот эта надпись за это отвечает GetComponent<Renderer>(), что такое рендерер тоже хочется верить что известно, это отрисовка, дальше по коду пишем material и приравниваем randMaterial нашему массиву материалов, и в квадратных скобках пишем random что значит что из этого массива материалы будут выбираться случайным образом. Сохраняем скрипт, и его необходимо повесить на объект в котором мы будем менять материалы, так как у меня это танк то на него и вешаю, да предупрежу пока не забыл, вешать скрипт необходимо на меш объекта, а то я тут в начале протупил и просто бросил его на объект, а потом соображал, что он хочет, благо Unity написал что данный объект не имеет Renderer, и не может к нему обратится. Покажу пожалуй на фотке.

Цепляем скрипт на меш
Dante

 

Теперь нам осталось только заполнить массив материалов, он находится в Unity в окне Inspector. На скриншоте ниже выделен.

Заполняем массив материалов
Dante

 

Все, теперь запускаем игру и видим что наш танк меняет цвет на случайный материал.

Случайный материал на меше
Dante

 

Всем спасибо, надеюсь это было полезно не только мне. До новых статей.

CheckPoint в Unity3d

Всем доброго времени суток, сегодня я буду разбираться как делать CheckPoint в Unity3d с помощью C#. Тема для игр очень важная, и нужная. Играть без CheckPoints конечно можно, однако обычно это бывает достаточно сложно, так как их часто ставят для прохождения труднопроходимых мест. Ведь никому особо не охота, после того как погиб где-то в середине игры начинать играть сначала, я скажу даже один уровень проходить по нескольку раз из-за своей какой-либо глупости обычно обидно.

 

Вообще возможности сделать точки возрождения есть разные, да в принципе такие точки вроде как особо и от самих сохранений мало чем отличаются, конечно в играх активироваться могут по разному, ну для каких-то необходимо пробежать сквозь них, или какую-либо территорию. Для других на что-либо нажать, а есть такие что просто вы можете сохранится нажав в меню. Вариант я буду рассматривать, тот что вы попав в какую-то определенную зону, можете провести сохранение в этой точке нажав кнопку клавиатуры. Естественно все это очень условно, в конце-концов то что я пока делаю на Unity3d толком и компьютерной игрой назвать сложно.

 

Для своего эксперимента я взял свой урок не с самодельным танчиком, а там где наш персонаж бегает по пустой платформе, пока с нее не падает, только несколько изменил саму игру, добавил в нее места сохранения, или точки возрождения, для того чтобы было видно добавил их как три круглых диска, разного цвета на нашу сцену. Сделал это достаточно просто, просто сделав префаб цилиндра, назвал его CheckPointPref и увеличил его в четыре раза по осям X и Z и уменьшил его по высоте Y до 0.02. Так же удалил из префаба Capsule Collider в окне Inspector, на даном этапе оно мне не надо, дальше перекидал их на сцену в места которые мне понравились и в том же окне Inspector > Mesh Renderer, в Unity3d добавил материалы к каждому префабу который добавил на сцену. Так чтобы они стали разных цветов, конечно можно просто поменять цвета материалов, ну да это сами разберетесь, мне просто надо различать что я воскрешаюсь в игре в месте в котором сохранился. Вид вышел приблизительно вот такой.

Точки чекпоинтов в Unity
Dante

Читать далее CheckPoint в Unity3d

Учим наш куб стрелять

Всем доброго времени суток, сегодня я продолжаю изучать разработку компьютерных игр, и буду делать игру где будет ездить нечто вроде танка, точнее это будет просто куб с дулом. Его я сделал в 3D редакторе Blender и импортировал в Unity3d. Как импортировать из Blender в Unity так чтобы не было проблем с направлениями из-за разницы в системах координат, я писал ранее. Можно было бы конечно как и описано в видеоуроке по которому я учусь обойтись без посторонних моделей, а сделать просто соединив два куба, но мне так больше понравилось.

 

Итак берем наш импортированный из Blender3d наш «Танк» и стараемся заставить его стрелять. Что нам для этого необходимо? Практически тоже что я делал в уроках которые выполнял ранее, разве что несколько к этому придется добавить.

 

Для начала перетягиваем наш танк на сцену и в него перетягиваем камеру.

 

Теперь нам необходимо добавить на сцену GameObject, то бишь просто пустой игровой объект. GameObject так же как и камеру перетаскиваем на наш «танк».

Добавление танка на сцену
Dante

Читать далее Учим наш куб стрелять

Продолжаем программировать движение куба

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

 

Запускаем наш прошлый урок, и смотрим на движение куба которое вышло и мы видим что получилось у нас так себе. Двигается он дергаясь, быстрое движение, остановка, быстрое движение. Можно сделать и получше, а так же чтобы при нажатии в право и лево наш куб не просто двигался в право, лево, а поворачивался. Давайте займемся этим.

 

Открываем прошлый урок и в файл Moving пишем следующий код:

Улучшенный скрипт движения
Dante

  Читать далее Продолжаем программировать движение куба

Программируем ездящий куб

Всем доброго времени суток, сегодня я продолжу разработку компьютерной игры и сегодня я буду делать простенькую игру с передвижением кубика по сцене. Делаться все будет в новой игрушке. Просто делаем сцену с платформой, по которой будет ездить наш кубик, и будем задавать ему движение. Так же добавляем простой куб на сцену.

 

Чтобы камера двигалась за нашим объектом цепляем её на куб. Теперь, делаем скрипт с названием Moving, а камеру выставим чтобы она видела куб который мы добавили, в скрипт пишем вот такой код:

Простой код управления движения c#
Dante

 

Цепляем скрипт на наш куб, и запускаем сцену игры. Вот наш куб стал двигаться. Читать далее Программируем ездящий куб