Это то, что я пробовал до сих пор: я создаю raycast, и если он попадает в объект на уровне 8 (слой, на котором объекты должны быть запущены для игрока), я вызываю функцию SlerpToHand (). *
private void Update()
{
if(Physics.Raycast(transform.position, transform.forward * raycastLength, out hit))
{
if(hit.collider.gameObject.layer == 8)
{
// Launch object to player
SlerpToHand(hit.collider.transform);
}
}
}
Внутри SlerpToHand () я установил позицию объекта в Vector3.Slerp (), этот вектор создается из значений в выбранном объекте.
private void SlerpToHand(Transform hitObj)
{
Vector3 hitObjVector = new Vector3(hitObj.transform.position.x, hitObj.transform.position.y, hitObj.transform.position.z);
hitObj.position = Vector3.Slerp(hitObjVector, transform.position, speed);
}
Но результат этого все не так, объект просто телепортируется в руки игрока. Разве Vector3.Slerp () - не лучший способ подвести объект к игроку? Для контекста я пытаюсь воссоздать захватывающие перчатки Half-Life: Alyx. Еще предстоит поработать с жестами рук, но я просто пытаюсь уменьшить кривую объекта. Помощь очень приветствуется, дайте мне знать, если потребуется дополнительная информация.