Prorok Posted April 26, 2023 Posted April 26, 2023 Здравствуйте. Недавно начал изучать движок для использования в будущих проектах, хочу создать простое VR приложение. Скачивал VR Sample на C# и С++, однако в С# версии не нашел примера работы с GUI, с которым у меня возникли проблемы. Могу ли я используя Intersections взаимодействовать с GUI? Например нажать на WidgetButton.
mifril Posted April 27, 2023 Posted April 27, 2023 Здравствуйте. Да Вы можете взаимодествовать с GUI с помощью Intersections, для этого нужно при создании ObjectGui или ObjectGuiMesh установить значение MouseMode в MOUSE_VIRTUAL например можно создать компоненту с таким методом Init и довать ее на ObjectGui в редакторе private void Init() { objectGui = node as ObjectGui; // устанавливаем mouse mode objectGui.MouseMode = ObjectGui.MOUSE_VIRTUAL; // получаем экземпляр Gui gui = objectGui.GetGui(); // добавляем виджеты на этот Gui // ... } Для того, что бы взаимодествовать с GUI, нужно сделать следующее: Vec3 p0 = controller.WorldPosition + offset; // луч пускаем из контроллера при этом луч не должен пересекать контроллер, иначе Intersection будет находить именно контроллер как объект пересечения Vec3 direction = new Vec3(...) // направление луча Vec3 p1 = p0 + direction * maxDistance; // конечная точка отрезка на котором будем проверять Intersection Object hitObj = World.GetIntersection(p0, p1, 1, intersection); ObjectGui objGui = hitObj as ObjectGui; // пытаемся привести объект пересечения к ObjectGui // если получилось, то устанавливаем значения в ObjectGui if(objGui != null) { objGui.SetMouse(p0, p1, mouseDown ? 1 : 0, false); } В метод ObjectGui.SetMouse нужно передать отрезок который пересекает его, точку пересечения он определит сам, значения нажата ли кнопка, в примере кода для этого используется булевая переменная mouseDown инициализировать ее можно как-нибудь так: bool mouseDown = VRInput.IsGeneralButtonDown(VRInput.GeneralButtons.FIRE_1); и последний аргумент в методе это флаг, отвечающий за отображения курсора на ObjectGui. 1
Prorok Posted April 27, 2023 Author Posted April 27, 2023 Спасибо за быстрый и подробный ответ! Это именно то, что я хотел узнать
Recommended Posts