Регистрация
Регистрация
Меню
[ Обновленные темы · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Unity » Вопросы » Создать анимацию вручную (Создать анимация с помощью данных с сенсоров)
Создать анимацию вручную
TabahusДата: Понедельник, 12.11.2018, 09:10 | Сообщение # 1
Новый писатель
Группа: Пользователь
Сообщений: 3
Статус: Offline
Добрый всем день. Это мой первый вопрос здесь, поэтому если что-то я спрашиваю не правильно, укажите как надо.
Проблема следующая: есть набор данных с сенсоров (например данные в таблице csv). Даные такие : position, acceleration, and rotation. Данные имеются на все части тела. Но например, для простоты, скажем сначала, что только на руку.
Как правильно их применить на гуманоиде?
Я только начал изучать юнити и пока скачал гуманоида со скелетом и набором анимаций. Но через несколько дней мне показалось, что это не подойдет, потому что анимации уже заточены на определенные движения(например поднять руку вверх) и все что ты можешь, это лишь менять скорость. А мне нужно иметь ввиду, что рука может двигаться куда угодно  (естественно сохраняя законы руки))).
Как правильно начать? Подскажите куда смотреть и что читать.
Вот ссылка с примером таблицы, которая содержит данные
https://www.dropbox.com/s/hxnjpivu1qg053n/SensorData.png?dl=0
Спасибо всем за помощь
 
OkAyДата: Среда, 21.11.2018, 09:28 | Сообщение # 2
Новый писатель
Группа: Пользователь
Сообщений: 35
Статус: Offline
Тебе нужно будет управлять костями в unity через скрипт.

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

Пример:

Код
using Unity;
using Unity.Engine;
using System.Collections.Generic;

public class CharacterAnimator : Monobehaviour {
     public List<Bone> bones = new List<Bone>();

     public List<ServerSideBone> getBonesPositions() {
            // Тут нужно принимать последние измененные записи из таблицы
            // Я увидел в таблице есть поля [b]Tag[/b], [b]ExperimentDate[/b], [b]Expertime[/b] и прочие необходимые данных
            // В результате на выход должны выйти кости, которые были задействованы в ходе этого запроса.
            List<ServerSideBone> tempBones = new List<ServerSideBone>();
            ServerSideBone bone = new ServerSideBone("leftHand", new Vector3(-0.0323f, 0.000431f, -0.000234f));
            
            tempBones.add(bone);
            return tempBones;
     }

     // Этот метод вызывается каждый кадр
     public void Update() {
            List<ServerSideBone> resultBones = getBonesPositions();
            float smooth = 3.2f;
            foreach (Bone bone in bones) {
                 foreach (ServerSideBone s_bone in resultBones) {
                     if (s_bone.tag == bone.tag) {
                            bone.boneObject.position = Vector3.Slerp(bone.boneObject.position, s_bone.position, smooth);
                     }
                 }
            }
     }
}

[System.Serializable]
class Bone {
    public string tag = "";
    public Transform boneObject;
}

[System.Serializable]
class ServerSideBone {
    public string tag = "";
    public Vector3 position;
    public Quaternion rotation;
    public Vector3 acceleration;

    // Можно вот так создать конструктор класса, для примера я сделал лишь для имени и положения
    public ServerSideBone(string name, Vector3 position) {
        this.tag = name;
        this.position = position;
    }
}
 
Форум » Unity » Вопросы » Создать анимацию вручную (Создать анимация с помощью данных с сенсоров)
  • Страница 1 из 1
  • 1
Поиск:

Все для Unity3d ©2013-2019

Администрация Сайта не несет никакой ответственности за доступность этих ресурсов и их содержимое. Хостинг от uCoz

↑ Наверх

Все для Unity3d ©2013-2019

Администрация Сайта не несет никакой ответственности за доступность этих ресурсов и их содержимое. Хостинг от uCoz

↑ Наверх