РЕДАКТИРОВАТЬ: После выполнения еще немного отладки. Кажется, что вектор скорости по какой-то причине читает ноль (для обоих методов). Есть предложения?
Я пытаюсь сделать простую демонстрацию отслеживания рук в Unity для квеста Oculus. Мне удалось успешно реализовать механизм Grab and Release c, похожий на этот урок здесь . Это немного устарело для состояния плагина Oculus, но общая логика c остается прежней.
Единственной проблемой, с которой я столкнулся, была реализация функции Drop. Когда я бросаю объект, я хочу добавить к нему линейную и angular скорость моей руки. Я пытался сделать это следующими способами:
Сценарий Grabber:
protected override void GrabEnd()
{
if (m_grabbedObj)
{
Debug.Log("Grabbed object found");
Rigidbody rigid = GetComponent<Rigidbody>();
if (rigid)
{
GrabbableRelease(rigid.velocity, rigid.angularVelocity);
}
else
{
Vector3 linearVelocity = (transform.position - lastPointerPos) / Time.fixedDeltaTime;
Vector3 angularVelocity = (transform.eulerAngles - lastPointerRot.eulerAngles) / Time.fixedDeltaTime;
GrabbableRelease(linearVelocity, angularVelocity);
}
}
GrabVolumeEnable(true);
}
Внутри Grabbable:
virtual public void GrabEnd(Vector3 linearVelocity, Vector3 angularVelocity)
{
Rigidbody rb = gameObject.GetComponent<Rigidbody>();
rb.velocity = linearVelocity;
rb.angularVelocity = angularVelocity;
}
Есть еще одна функция в между этими двумя, но по сути он просто вызывает GrabEnd для объекта, передающего с ним скорости.
Я также обеспечил наличие твердых тел как на захватчике (руках), так и на захватываемых объектах.
lastPointerPos
& lastPointerRot
- это Vector3, которые сохраняются в конце FixedUpdate. Я также проверяю, нужно ли мне вызывать GrabEnd внутри FixedUpdate в зависимости от PinchStrength и Confidence указательного пальца.
Причина, по которой у меня есть два метода, заключается в двух разных способах, которые я пытался решить, это вопрос. Ни один, кажется, не работает. Объект просто падает прямо на пол, независимо от того, как я машу руками, как дурак в моей гостиной. Lol
Любая помощь будет принята с благодарностью!