Так что я работаю с камерой глубины, которая работает как Kinect.(это не Kinect).и с Nuitrack позади этого для отслеживания скелета.Однако позиция, которую он возвращает для игрока, шаткая.Когда он стоит совершенно неподвижно, он возвращает числа, которые могут увеличиваться или уменьшаться до примерно 10.
Пример: пользователь стоит так неподвижно, как может, и данные возвращают позицию 100 в первом и следующем кадрах.102, потом 97, потом снова 100, потом 106 и т. Д. Он возвращает эти позиции в обновлении, и мы используем его для перемещения изображения вместе с ним.(таким образом, пользователь управляет изображением) Но, как вы могли ожидать, это изображение движется очень шатко из-за противоречивых данных.Согласно Nuitrack, это правильно, и сам пользователь должен найти решение для этого.
Я пытался прыгать с одной позиции на другую, но это заставляет его чувствовать себя менее интерактивным, потому что, как только я нахожусь в точке, где дрессировка действительно гладкая, она имеетогромная задержкаЯ также пытался использовать только новые данные позиции, если они отличаются, скажем, 4 пикселя от предыдущей позиции, которую дал мне Nuitrack, это работает немного лучше, но приводит к скачкам изображения, даже если я его перелистываю.Использование этой функции:
foreach (User user in frame.Users)
{
if (Vector3.Distance(_lastPos, user.Proj.ToVector3()) >4f)
{
Vector3 final = ((_lastPos + user.Proj.ToVector3()) /2);
userData.Add(new UserData(user.ID, user.Real.ToVector3(), final));
_lastPos = user.Proj.ToVector3();
}
else
{
userData.Add(new UserData(user.ID, user.Real.ToVector3(), _lastPos));
}
И функция lerp:
float _userX = user.ProjPosition.x * (_cameraPos.x *2)- _cameraPos.x;
Vector3 _newPos = new Vector3(_userX, _basketPos.y, _basketPos.z);
_basketPrefab.transform.position = Vector3.Lerp(_basketPrefab.transform.position, _newPos, Time.deltaTime * 30f);
РЕДАКТИРОВАТЬ: Кто-нибудь еще?