Jump to content

[SOLVED] ObjectGui: WidgetButton не реагирует на нажатие мыши C#


photo

Recommended Posts

Posted

Помогите разобраться с ГУИ.

Добавил в мир ObjectGui

image.thumb.png.c34efbe58e00a0b8752837a8a8908607.png

В коде создаю кнопку и функцию нажатия к ней:

using System.Collections;
using System.Collections.Generic;
using Unigine;

[Component(PropertyGuid = "e43a1cf25fa271dca1f387fe5604fdeab4d5ec2c")]
public class MyGuiTest : Component
{
	Gui gui;
	WidgetButton widget_buttonSonarMode;

	void Init()
	{
		gui = (node as ObjectGui).GetGui();
		
		widget_buttonSonarMode = new WidgetButton(gui, "Sonar Mode");
		widget_buttonSonarMode.Arrange();
		widget_buttonSonarMode.SetPosition(10,100);
		widget_buttonSonarMode.FontSize = 50;
		widget_buttonSonarMode.ButtonColor = vec4.BLUE;
		// устанавливаем лямбда-функцию для обработки события CLICKED (щелчок мыши)
		widget_buttonSonarMode.EventClicked.Connect(BtnSonarMode);
		widget_buttonSonarMode.Enabled = true;
		
        gui.AddChild(widget_buttonSonarMode, Gui.ALIGN_OVERLAP);
		// Input.MouseGrab = true;

	}

	void BtnSonarMode(Widget sender)
	{
		Log.MessageLine("BTN SONAR");
	}

}

Кнопка создается и отображается как положено, но при попытке нажать на неё ничего не происходит, функция нажатия не вызывается, курсор просто исчезает.

image.png.4ac3271a5377e67a167d06e5d99f68a3.png

 

Posted

Спасибо за разъяснение! В тестовом проекте все заработало.

Но проблема пока решена частично и, возможно, я нашел то ли баг, то ли нужно для gui тип переменной Control Distance сменить с float на double для проектов double.

В моем рабочем проекте (double) большие расстояния, > 20 км. Район где должен работать симулятор от начала мировой системы координат >20 км.

Если выставить в GUI Control Distance = 100 км, то он начинает как то реагировать  и захватывать мышь. Но курсор мыши резко меняет положение и попасть в кнопку не получается, как будто появляется ошибка округления для float.

Такое ощущение, что Control Distance отсчитывается почему-то не от текущей камеры, а от начала мировой системы координат. 

Прикрепляю свой очищенный рабочий проект (755 Мб), где проблема воспроизводится 100% В проекте находится водный мотоцикл на котором gui эхолота дочерний к нему. 

Как можно решить проблему?

Вариант перенести область симуляции ближе к началу координат понятен, но хотелось бы чтобы gui работал везде в мире. И тогда нелогичен параметр Control Distance, если он не привязан к текущей камере.

 

 

Posted

Добрый день!

On 1/18/2025 at 2:27 AM, sevas55 said:

Но проблема пока решена частично и, возможно, я нашел то ли баг, то ли нужно для gui тип переменной Control Distance сменить с float на double для проектов double.

Похоже, возникли небольшие внутренние проблемы с ObjectGui, но можно попытаться обойти это ограничение, использовав другой режим мыши — MOUSE_VIRTUAL, в котором необходимо самостоятельно передавать позиции, кнопки и отображение курсора. В приведенном примере мышь обновляется с помощью метода setMouse: https://developer.unigine.com/en/docs/2.19.1/api/library/objects/class.objectgui?rlang=cs#setMouse_Vec3_Vec3_int_int_void

 

Скажите, вам может подойти это решение с примером кода, который приведен во вложении к этому сообщению?

Спасибо!

GUI_Sonar.cs

  • Like 1
Posted

Да, Ваш код работает и в рабочем проекте.

Спасибо за помощь от меня и студентов!

  • Like 1
Posted
13 minutes ago, sevas55 said:

Да, Ваш код работает и в рабочем проекте.

Спасибо за помощь от меня и студентов!

Пожалуйста!

  • bmyagkov changed the title to [SOLVED] ObjectGui: WidgetButton не реагирует на нажатие мыши C#
×
×
  • Create New...