Пятница, 26 Апреля 2024, 14:54

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » скелет
скелет
defGMDefeloperДата: Понедельник, 05 Февраля 2018, 14:12 | Сообщение # 1
частый гость
Сейчас нет на сайте
Нужно сделать редактируемый скелет как в spore.Проблема в том что я сделал простой скрипт
Код
if (Input.GetMouseButton(0) && spineisDrag)
        {
            x = Input.GetAxis("Mouse X");
            y = Input.GetAxis("Mouse Y");
            spine_[dragSpine].t_.position += new Vector3(x, y, 0);
        }
        for (int i = dragSpine - 1; i >= 0; i--)
        {
            if (Vector3.Distance(spine_[i].L.position, spine_[i + 1].L.position) > 0)
            {
                Vector3 v = main.PointOnVector(spine_[i].L.position, spine_[i + 1].L.position, Vector3.Distance(spine_[i].L.position, spine_[i].R.position));
                spine_[i].t_.position = main.PointOnVector(spine_[i].L.position, v, Vector3.Distance(spine_[i].L.position, spine_[i + 1].L.position) / 2);
                Quaternion rot = spine_[i].t_.rotation;
               spine_[i].t_.LookAt(spine_[i + 1].L.position);

                float scl = spine_[i].t_.localScale.x;
                scl = Mathf.Clamp(scl, spine_[i + 1].t_.localScale.x - .1f, spine_[i + 1].t_.localScale.x + .1f);
                spine_[i].t_.localScale = new Vector3(scl, scl, scl);
            }
        }
        for (int i = dragSpine + 1; i < spineCount; i++)
        {
            if (Vector3.Distance(spine_[i].R.position, spine_[i - 1].R.position) > 0)
            {
                Vector3 v = main.PointOnVector(spine_[i].R.position, spine_[i - 1].R.position, Vector3.Distance(spine_[i].R.position, spine_[i].L.position));
                spine_[i].t_.position = main.PointOnVector(spine_[i].R.position, v, Vector3.Distance(spine_[i].R.position, spine_[i - 1].R.position) / 2);
                if (i >= spineCount - 1)
                    continue;
                spine_[i].t_.LookAt(spine_[i + 1].L.position);

                float scl = spine_[i].t_.localScale.x;
                scl = Mathf.Clamp(scl, spine_[i + 1].t_.localScale.x - .1f, spine_[i + 1].t_.localScale.x + .1f);
                spine_[i].t_.localScale = new Vector3(scl, scl, scl);
            }
        }


там ещё есть рейкаст которым выделяется позвонок ,Но то не важно.Скрипт работает.КОгда тянешь один позвонок - остальные тянутся за ним.Но как можно сделать более плавный переход?.Ну типа чтобы позвоночник при перетаскивании принимал форму дуги,а не тупого угла.Пробовал ограничить угол поворота до 30 град. относительно предыдущего позвонка,но тогда он принимает форму зигзага =(.Как можно сделть плавный переход?Искажение должно выглядить как волна которая передается от перетаскиваемого позвонка к соседним.
Что можно подпилять?Потому что что не пробовал - все криво.Уже замучался
P.S ну если кто поможет L R - равноудаленные обьекты от центра позвонка.Точки прикрепления слева и справа.Можно было их задать как просто Vector3 ,но из-за масштабирования появляется ненужный гемор

и второе.Как создать нормальный меш?Ну что-то тип червяка) и привязать к этому скелет.

вообще не могу понять что такое boneWeight.boneindex и weight и ещё цифры от 0-3 .Не могу понять как оно работает(На русском ничиго не нашел.На анг прочитал,вроде понятно,но как юзать не знаю(


Сообщение отредактировал defGMDefeloper - Вторник, 06 Февраля 2018, 00:03
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » скелет
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг