Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

383
Visualizações
¿Cómo obtener la posición del mouse fuera de la función OnGUI?

Estoy trabajando en una herramienta de Unity y quiero crear una GUI personalizada para ella.

En este sencillo script, verifico si el mouse se ha desplazado sobre un botón y, de ser así, cambio el color de la GUI. Este es solo un ejemplo realmente básico, pero los mismos principios se aplican a algo que quiero hacer.

El problema es que el cambio se retrasa mucho. Intenté implementar el estado isDirty, donde solo se vuelve a pintar cuando es necesario. Aunque parece que no funciona. El mismo problema de retraso... Podría volver a pintar la ventana en cada cuadro, pero eso realmente no funciona.

 private bool isDirty = false; Rect _hoveredRect; Rect HoveredRect { get { return _hoveredRect; } set { if (_hoveredRect != value) { isDirty = true; } _hoveredRect = value; } } void Update() { if (isDirty) { Repaint(); isDirty = false; } } void OnGUI() { Rect button = new Rect(25, 25, 100, 35); DrawButton(button, "Label"); } bool DrawButton(Rect rect, string label) { var e = Event.current; bool hovered = rect.Contains(e.mousePosition); if (hovered) { HoveredRect = rect; } if (!hovered && HoveredRect == rect) { HoveredRect = Rect.zero; } var defaultColor = GUI.color; GUI.color = hovered ? Color.red : defaultColor; bool pressed = GUI.Button(rect, label); GUI.color = defaultColor; return pressed; }

Luego se me ocurrió otra solución, que debería funcionar, pero necesito obtener la posición del mouse y no puedo usar Event.current fuera de la función OnGUI.

 Dictionary<Rect, bool> hoverableRects = new Dictionary<Rect, bool>(); private void OnEnable() { EditorApplication.update += UpdateMe; } private void OnDisable() { EditorApplication.update -= UpdateMe; } void UpdateMe() { var mousePos = ??; List<Rect> rects = new List<Rect>(hoverableRects.Keys); foreach (var rect in rects) { hoverableRects[rect] = rect.Contains(mousePos); } } void OnGUI() { Rect button = new Rect(25, 25, 100, 35); DrawButton(button, "Label"); } bool DrawButton(Rect rect, string label) { if (!hoverableRects.ContainsKey(rect)) { hoverableRects.Add(rect, false); } var defaultColor = GUI.color; GUI.color = hoverableRects[rect] ? Color.red : defaultColor; bool pressed = GUI.Button(rect, label); GUI.color = defaultColor; return pressed; }

¿Hay alguna manera de obtener la posición del mouse en cada cuadro fuera del método OnGUI?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Así que cuando dices que es lento. ¿Quiere decir que el cambio de color es lento para reaccionar, o que el proceso real de cambio de color es lento?...

Porque si su color es lento para cambiar inicialmente. Como si tu cursor estuviera ahí pero no estuviera haciendo nada porque en realidad no estás comprobando que el cursor esté sobre el botón en cada fotograma, o lo que sea...

Es posible que tenga if ('isDirty'?) en la actualización, lo cual hace ... Pero, el método que lo calcula NO está en la actualización, lo que significa que 'isDirty' se actualiza menos de una vez por cuadro.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda