moriVotum Posted February 11 Posted February 11 (edited) Здравствуйте, есть группа окон, которая создается заранее. Использовал код из документации для создания Manipulator. В качестве камеры используется PlayerSpectator. При попытке переместить деталь происходит перемещение камеры в пространстве. Однако, после того как открепить окно и переместить его обратно, то все начинает работать как нужно. В чем может быть проблема? На первых двух изображениях показано как работает перемещение если окно не откреплять (т.е. не работает, т.к. перемещается камера). На третьем открепляю окно, после этого закрепляю его обратно на то же место, затем на 4 и 5 изображениях видно, что манипулятор работает так как нужно. Edited February 11 by moriVotum
silent Posted February 12 Posted February 12 Здравствуйте! К сожалению, по скриншотам невозможно понять что является причиной такого поведения. Возможно, нужно вручную захватывать мышь у конкретного окна (например, через setMouseGrab). Если вы сможете подготовить небольшой тестовый пример на основе нового проекта или любого существующего С++ / C# сэмпла, чтобы мы могли у себя его скомпилировать и запустить для локальных тестов - это бы сильно упростило нахождение решения (также сгодится и текущий проект, который на скриншотах). Можете залить его к нам на FTP (данные для доступа у меня в подписи), или же на любой файлообменник. Спасибо! How to submit a good bug report --- FTP server for test scenes and user uploads: ftp://files.unigine.com user: upload password: 6xYkd6vLYWjpW6SN
moriVotum Posted February 12 Author Posted February 12 (edited) 6 hours ago, silent said: Здравствуйте! К сожалению, по скриншотам невозможно понять что является причиной такого поведения. Возможно, нужно вручную захватывать мышь у конкретного окна (например, через setMouseGrab). Если вы сможете подготовить небольшой тестовый пример на основе нового проекта или любого существующего С++ / C# сэмпла, чтобы мы могли у себя его скомпилировать и запустить для локальных тестов - это бы сильно упростило нахождение решения (также сгодится и текущий проект, который на скриншотах). Можете залить его к нам на FTP (данные для доступа у меня в подписи), или же на любой файлообменник. Спасибо! Сделал мини пример, с двумя скриптами (для создания группы окон, и сам манипулятор), и наблюдается такое же поведение в работе как и ранее (т.е. приходится также перетаскивать окно из группы и обратно). При этом, если запускать из Editor, то манипулятора даже не видно, пока не переместить окно от туда и обратно, если же запускать из среды разработки, то манипулятор хотя бы виден, но также не работает пока не сделать с окном тоже самое. Также, в коде манипулятора изменил функцию получения ноды по нажатии мыши на экран, но это не влияет на его работу, т.к. проверял приложение без группы окон и там все нормально. Ссылка на проект: https://drive.google.com/file/d/11MTK1c0-9MBZaP38nQwpWRe12H4ykCBd/view?usp=drive_link Код WindowController: using System.Collections; using System.Collections.Generic; using Unigine; [Component(PropertyGuid = "b671d02a82f79075856c66a360e6725132188a16")] public class WindowController : Component { void Init() { int width = 1280; int height = 720; EngineWindowViewport mainMenu = WindowManager.MainWindow; EngineWindowViewport modelTree = new("Model Tree", 200, 100); EngineWindowViewport functions = new("Functions", 100, 100); EngineWindowViewport slides = new("Slides", 200, 100); EngineWindowGroup mainGroup = new(EngineWindowGroup.GROUP_TYPE.HORIZONTAL, "Main Group", 100, 100); mainGroup.Add(modelTree); mainGroup.Add(mainMenu); mainGroup.Add(slides); EngineWindowGroup parentGroup = new(EngineWindowGroup.GROUP_TYPE.VERTICAL, "Parent Group", width, height); parentGroup.Add(functions); parentGroup.Add(mainGroup); parentGroup.Position = new ivec2(0, 0); parentGroup.Size = new ivec2(width, height); parentGroup.Title = "Example"; parentGroup.UpdateGuiHierarchy(); parentGroup.SetVerticalTabHeight(0, height / 3); mainGroup.UpdateGuiHierarchy(); mainGroup.SetHorizontalTabWidth(1, (int)(width / 1.6)); parentGroup.Show(); ControlsApp.MouseHandle = Input.MOUSE_HANDLE.SOFT; } void Update() { } } Edited February 12 by moriVotum 1
mifril Posted February 14 Posted February 14 Здравствуйте! Из-за того что скрипт для создания лейаута окон выполняется раньше, на момент создания окон SelftGui у MainWindow не активно, из-за этого инпут не проходит до виджета манипулятора. При создании виджетов лучше использовать WindowManager.MainWindow.Gui либо вы можете вообще не указывать Gui и при добавлении виджетов в окно, им автоматически выставиться нужный Gui. Для того чтобы все виджеты правильно работали при стаке окон и других манипуляциях с окнами, а так же были привязаны к нужному Gui, лучше добавлять их прям в окно используя метод AddChild(). // add widgets to UI WindowManager.MainWindow.AddChild(ObjManTranslator); WindowManager.MainWindow.AddChild(ObjManScaler); WindowManager.MainWindow.AddChild(ObjManRotator); После анстака и снова стака окна все начинало работать, потому что после стака окон виджеты автоматически правильно распределилсь к нужному Gui и инпут начал нормально проходить. 1
moriVotum Posted February 14 Author Posted February 14 Благодарю! Сейчас все работает как и должно. 1
Recommended Posts