Дневник разработки "Пока просто игра". Анимации
18.09.2017 - запись 02
Попробовал много всего нового с прошлой записи и остался доволен. А именно: научился делать в Blendere mesh-модель на скорую руку, скелет для нее и анимировать все это. Года три назад я пробовал 3D max, поэтому разобрался с Blenderom за 2 дня. Очень удобная штука Blender, рекомендую.
Слепил лоу поли модельку гуманоидного существа без головы, т.к. было лень делать голову и была цель по-быстрому вникнуть в суть процесса. Сделал анимации ходьбы, смерти и атаки. Экспортировал все это в Unity и накидал связей в animatore. Вот что получилось.
При смерти бот впадает в позу пьющего оленя и повисает в воздухе. Это связанно с тем, что при создании скелета я создавал кости для управления группами костей. И набор связей для загибания персонажа оказался не очень удачным. Нужно было потом отдельно корректировать высоту всего скелета и вообще красиво нагнуть было геморно, т.к. анимация состоит из нескольких поз. Поэтому оставил как есть.
По многочисленным просьбам трудящихся приоткрою завесу тайны над скриптами из прошлой части.
Привязка камеры к мыши
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"