Дневник разработки "Пока просто игра". Анимации

18.09.2017 - запись 02


Попробовал много всего нового с прошлой записи и остался доволен. А именно: научился делать в Blendere mesh-модель на скорую руку, скелет для нее и анимировать все это. Года три назад я пробовал 3D max, поэтому разобрался с Blenderom за 2 дня. Очень удобная штука Blender, рекомендую.


Слепил лоу поли модельку гуманоидного существа без головы, т.к. было лень делать голову и была цель по-быстрому вникнуть в суть процесса. Сделал анимации ходьбы, смерти и атаки. Экспортировал все это в Unity и накидал связей в animatore. Вот что получилось.

Дневник разработки "Пока просто игра". Анимации Gamedev, Игры, Разработка игр, Гифка, Длиннопост
Дневник разработки "Пока просто игра". Анимации Gamedev, Игры, Разработка игр, Гифка, Длиннопост

При смерти бот впадает в позу пьющего оленя и повисает в воздухе. Это связанно с тем, что при создании скелета я создавал кости для управления группами костей. И набор связей для загибания персонажа оказался не очень удачным. Нужно было потом отдельно корректировать высоту всего скелета и вообще красиво нагнуть было геморно, т.к. анимация состоит из нескольких поз. Поэтому оставил как есть.


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


Привязка камеры к мыши

float xRotation;

float yRotation;

float currentX;

public static float currentY;

float xRotateVelosity;

float yRotateVelosity;

public float smoothDampTimer; // задержка

public float cameraSensitivity; // чувствительность


void Update () {


xRotation += Input.GetAxis("Mouse Y") * cameraSensitivity; // изменение координаты в зависимости от положения мыши

yRotation += Input.GetAxis("Mouse X") * cameraSensitivity;

xRotation = Mathf.Clamp(xRotation, -80, 80); // ограничение поворота


currentX = Mathf.SmoothDamp(currentX, xRotation, ref xRotateVelosity, smoothDampTimer); // плавное изменение координаты

currentY = Mathf.SmoothDamp(currentY, yRotation, ref yRotateVelosity, smoothDampTimer);


transform.rotation = Quaternion.Euler(currentX, currentY, 0); // вращение

}


Это нужно прописать в контроллере, чтобы камера смотрела туда же куда персонаж

transform.rotation = Quaternion.Euler(0, RotationCamera.currentY, 0); // привязываем вращение героя по X к камере


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


Это скрипт на стрельбу и до кучи на стрельбу фиксированными очередями

public float bulletSpeed; // "скорость" пули

public Transform bulletTransform;

float intervalShot = 0f; // фактический интервал между выстрелами

public float shootSpeed; // интервал между выстрелами


if (Input.GetMouseButton(0) && ammo > 0 && intervalShot <= 0)

{

Transform bullet = (Transform)Instantiate(bulletTransform, transform.position, Quaternion.identity);

bullet.GetComponent<Rigidbody>().AddForce(transform.forward * bulletSpeed, ForceMode.Impulse);

intervalShot = shootSpeed;

}


if (intervalShot > 0)

intervalShot -= Time.deltaTime;


Чтобы перс прыжками не мог взлететь до небес

Ray ray = new Ray(gameObject.transform.position, Vector3.down); // опускаем луч в пол

RaycastHit hit;


if (Physics.Raycast(ray, out hit, 1.5f)) // проверяем касание с физ. телами (float не должна быть неограниченно большой)

hitGround = true;

else

hitGround = false;


if (Input.GetKeyDown(KeyCode.Space) && hitGround)

gameObject.GetComponent<Rigidbody>().AddForce(transform.up * forceJump, ForceMode.Impulse);


Все эти скрипты изи найти на youTube, если точно знаешь что ты хочешь воплотить в коде. Единственный момент - скрипты эти в сыром виде, автор может рассказать как прыгать, но упустить важные моменты, связанные с этой механикой. Какое-нибудь парение при падении или убийство врагов как в марио, ты будешь придумывать и писать сам. Поэтому дорогие любители standart assetov, нужно работать головой.

Лига Разработчиков Видеоигр

6.7K постов22.2K подписчика

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"