Расскажите пожалуйста сделать на подобии этого?
|
|
|
SkySupra | Дата: Понедельник, 04 Декабря 2017, 14:11 | Сообщение # 2 |
частый гость
Сейчас нет на сайте
| Я бы реализовал следующим образом. Создаем класс контейнер с полями: угол взгляда, анимации (стоять, бег...) и др. Формируем набор контейнеров для каждого угла (0 градусов - смотрим в спину, 90 в бок и тд. На сцене имеем два юнита. Каждый имеет вектор взгляда. Для отрисовки юнита находим угол между взглядом этого юнита и самого игрока. Полученный угол округляем до ближайшего угла кратного 45. После выбираем нужный контейнер с анимациями. Последний этап, нужно определить в какой области находится найденный угол для зеркалирования спрайтов, чтобы не задавать 2 разных набора для поворота в сторону.
|
|
| |
dzrone3488 | Дата: Понедельник, 04 Декабря 2017, 17:17 | Сообщение # 3 |
участник
Сейчас нет на сайте
| Цитата SkySupra ( ) Я бы реализовал следующим образом. Создаем класс контейнер с полями: угол взгляда, анимации (стоять, бег...) и др. Формируем набор контейнеров для каждого угла (0 градусов - смотрим в спину, 90 в бок и тд. На сцене имеем два юнита. Каждый имеет вектор взгляда. Для отрисовки юнита находим угол между взглядом этого юнита и самого игрока. Полученный угол округляем до ближайшего угла кратного 45. После выбираем нужный контейнер с анимациями. Последний этап, нужно определить в какой области находится найденный угол для зеркалирования спрайтов, чтобы не задавать 2 разных набора для поворота в сторону.
Спасибо за ответ! Хоть кто-то. Но для меня это чёрный лес и я в принципе работаю с такими вещами в первый раз. Я бы был бы очень благодарен, если бы ты рассказал бы это поподробнее (если с иллюстрациями то вообще эталон)! Я бы с радостью потом поделился своим скриптом, потому что не я первый, не я последний. Или если существуют хоть какие-нибудь статьи на эту тему?
Я делаю игры, а вы в них играете! :) Моя группа по созданию игр - www.vk.com/dzrone
|
|
| |
SkySupra | Дата: Вторник, 05 Декабря 2017, 17:45 | Сообщение # 4 |
частый гость
Сейчас нет на сайте
| Подробнее могу сегодня вечером написать, когда буду за компом. По статьям не знаю, возможно есть, надо смотреть. Также как вариант можно в ассет сторе проверить аналогичные задачи.
Добавлено (05 декабря 2017, 17:45) --------------------------------------------- Набросал систему поворота, ссылка на GitHub. Основные моменты. Находим угол между взглядом юнита и камерой. После отдаём этот угол в GetAvatarByAngle. Чтобы определить нужно ли поворачивать спрайт (т.е. смотрим на бок юнита с левой стороны или с правой), производим векторное произведение.
Код private void Update() { float angleCamUnit = Vector3.Angle(trCamera.forward, trUnit.forward); AvatarDirection avatar = avatarConfig.GetAvatarByAngle(angleCamUnit);
bool isFlip = false; if(avatar.IsCanFlip) { Vector3 cross = Vector3.Cross(trCamera.forward, trUnit.forward); isFlip = cross.y < 0; }
rendererModel.sprite = avatar.Idle; rendererModel.flipX = isFlip; }
Здесь производим поиск ближайшего угла из заданных avatarDirections. После возвращаем AvatarDirection.
Код public AvatarDirection GetAvatarByAngle(float directionAngleDeg) { float smallestLengVel = float.MaxValue; AvatarDirection best = avatarDirections[0]; foreach(var item in avatarDirections) { float angleDiff = Mathf.Abs(Mathf.DeltaAngle(directionAngleDeg, item.AngleDeg));
if(angleDiff < smallestLengVel) { best = item; smallestLengVel = angleDiff; } }
return best; }
AvatarDirection это контейнер набор графики (например анимация: стоять, бежать, атаковать) и др. настройки. Так же в нём задаём угол (про котором нужно выбирать этот набор). Далее делаем из UnitController машину состояний и скармливаем ему выбранный AvatarDirection. Например, если юнит находится в состоянии бега, то в зависимости от угла мы видим тот или иной набор анимации бега. Также можно поправить билдборд, но это уже зависит от конкретных задач, как мы хотим поворачивать спрайт на камеру.
Сообщение отредактировал SkySupra - Вторник, 05 Декабря 2017, 17:47 |
|
| |
dzrone3488 | Дата: Воскресенье, 10 Декабря 2017, 16:33 | Сообщение # 5 |
участник
Сейчас нет на сайте
| Цитата SkySupra ( ) Подробнее могу сегодня вечером написать, когда буду за компом. По статьям не знаю, возможно есть, надо смотреть. Также как вариант можно в ассет сторе проверить аналогичные задачи.
Добавлено (05 декабря 2017, 17:45) --------------------------------------------- Набросал систему поворота, ссылка на GitHub. Основные моменты. Находим угол между взглядом юнита и камерой. После отдаём этот угол в GetAvatarByAngle. Чтобы определить нужно ли поворачивать спрайт (т.е. смотрим на бок юнита с левой стороны или с правой), производим векторное произведение. Код
private void Update() { float angleCamUnit = Vector3.Angle(trCamera.forward, trUnit.forward); AvatarDirection avatar = avatarConfig.GetAvatarByAngle(angleCamUnit);
bool isFlip = false; if(avatar.IsCanFlip) { Vector3 cross = Vector3.Cross(trCamera.forward, trUnit.forward); isFlip = cross.y < 0; }
rendererModel.sprite = avatar.Idle; rendererModel.flipX = isFlip; }
Здесь производим поиск ближайшего угла из заданных avatarDirections. После возвращаем AvatarDirection. Код
public AvatarDirection GetAvatarByAngle(float directionAngleDeg) { float smallestLengVel = float.MaxValue; AvatarDirection best = avatarDirections[0]; foreach(var item in avatarDirections) { float angleDiff = Mathf.Abs(Mathf.DeltaAngle(directionAngleDeg, item.AngleDeg));
if(angleDiff < smallestLengVel) { best = item; smallestLengVel = angleDiff; } }
return best; }
AvatarDirection это контейнер набор графики (например анимация: стоять, бежать, атаковать) и др. настройки. Так же в нём задаём угол (про котором нужно выбирать этот набор). Далее делаем из UnitController машину состояний и скармливаем ему выбранный AvatarDirection. Например, если юнит находится в состоянии бега, то в зависимости от угла мы видим тот или иной набор анимации бега. Также можно поправить билдборд, но это уже зависит от конкретных задач, как мы хотим поворачивать спрайт на камеру.
Спасибо большое! Будем разбираться... Отпишусь когда будут результаты
Я делаю игры, а вы в них играете! :) Моя группа по созданию игр - www.vk.com/dzrone
|
|
| |