VRTK Использование кругового привода SteamVR для винтовочной винтовки
Прямо сейчас я пытался сделать винтовку с системой действия болта, но было очень трудно сделать вращение болта, поэтому вопрос заключается в том, как реализовать вращательное действие, подобное тому, которое используется в круговом приводе SteamVR.
С начала моего исследования VR для Unity я использую VRTK, который облегчает многие основные механики, но, похоже, у него нет одноосного вращателя без Rigidbody, который может иметь проблемы с небольшими объектами (например, болт).
Я нашел решение для вращения болта с помощью компонента Круговой привод из SteamVR, как показано в этом видео (6:00): https://youtu.be/r-edgGinqZ0?t=6m
Но он не будет работать для VRTK, так как его контроллеры не используют (ручной) компонент SteamVR, который необходим для работы циркулярного привода.
PD: у меня есть сценарий, который пытается работать, но не так, как задумано:
if (isUising) //If the bolt is been used...
{
difference = Controller.transform.position - transform.position; //Make the vector diferentiate of the position of the controller and the bolt position
angle = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg; //Have the angle in radians of the Tan of the x and y of the vector diferentiate
angle = Mathf.Clamp(angle, 0, 65); //Clamp the angle to the max and minimum angles
rotFrame = angle * 6 / 65; //Transform the angle to frames for the animator
if (!boltOpen) //If bolt isint open/slided then: send rotFrame to the animator and check if the bolt is rotated to the open rotaiton or if its fully locked
{
BoltRotating(rotFrame);
if (angle >= 65) //If the angle is at the opened position, make the bolt ready for sliding
{
readyToOpen = true;
}
else
{
readyToOpen = false;
}
if (allOut) //If the bolt is closed reset the allOut bool to false
{
gun.Bolted();
allOut = false;
}
}
private void BoltRotating(float frame) //Activate rotation animation from the animator and play the animation with 0 speed and on the frame value from the angle
{
BoltAnimation.SetBool("Slide", false);
BoltAnimation.Play("BoltRotation", 0, frame);
}
1 ответ
Вы смотрели на сцену 021_Controller_GrabbingObjectsWithJoints в примерах для VRTK? Есть колесо, которое должно дублировать функциональность скрипта CircularDrive от Valve, скрипт называется VRTK_RotatorTrackGrabAttach. В той сцене есть Колесо и Дверь.
НТН.
J.