Unity UI не работает должным образом ТОЛЬКО на Windows - PullRequest
0 голосов
/ 01 июня 2018

Я работаю над выяснением того, что происходит с пользовательским интерфейсом моей игры, по крайней мере, два дня, и никакого прогресса.

Обратите внимание, что это мобильная игра, но меня попросили построить дляWindows для визуализации и презентации.

Проблема в том, что когда я запускаю свою игру на платформах Unity Editor, Android, iOS и Mac, пользовательский интерфейс работает просто отлично, но когда я запускаю игру в Windows,Пользовательский интерфейс по-прежнему работает нормально, пока я не загрузил конкретную сцену.

Эта конкретная сцена является экраном загрузки (между главным меню и уровнем), когда уровень завершил асинхронную загрузку, в скрипте на экране загрузки вызывается метод с именем MoveObjects, чтобы переместить некоторые объекты, которыепорождался в сцене экрана загрузки в сцену уровня (хотя это не проблема, поскольку я уже пробовал без этого метода, и проблема с пользовательским интерфейсом сохраняется).

Как только логика этого метода MoveObjectsготово, кнопка запуска активирована на экране загрузки, чтобы игрок мог щелкнуть и начать играть (я пытался переместить кнопку запуска на сцену уровня, поскольку, возможно, проблема не в том, что ребенок в текущей активной сцене может быть проблемой,но проблема все еще сохраняется).В этот момент пользовательский интерфейс частично поврежден, я имею в виду то, что кнопки (и некоторые другие элементы пользовательского интерфейса, такие как полоса прокрутки) видят изменение цвета / состояния, когда мышь перемещается над ними, но я не могу нажать на нихбольше (кнопка не изменится даже на нажатое состояние).

Также обратите внимание, что я попытался создать сборку разработки, чтобы увидеть, есть ли какие-либо ошибки в консоли, и я заметил, что эта проблема также влияет на старуюСистема пользовательского интерфейса, поэтому я больше не мог взаимодействовать с консолью разработки.

Также обратите внимание, что если я беру и перетаскиваю полосу прокрутки до появления этой проблемы, я продолжаю удерживать полосу прокрутки, пока это не произойдет.мышь застревает на полосе прокрутки, что означает, что я больше не могу взаимодействовать с пользовательским интерфейсом, но полоса прокрутки все еще будет двигаться с помощью мыши.

  • Я уже проверяю, что эти вещи не являются источникомпроблема:
    • Отсутствует EventSystem, GraphicRaycaster или InputModule.
    • ДругойЭлемент пользовательского интерфейса, блокирующий остальную часть пользовательского интерфейса.
    • Canvas равен Screen Space - Overlay, поэтому нет необходимости в ссылке на камеру.
    • У меня есть только один EventSystem.
    • Time.timeScale равно 1.

Я не уверен, что еще я мог бы попробовать, поэтому, если у кого-то есть какие-либо предложения, я был бы признателен.Спасибо.

PS: Мне жаль говорить, что я не могу поделиться каким-либо кодом, визуальным материалом или примерами из-за конфиденциальности.

1 Ответ

0 голосов
/ 01 июня 2018

Основным источником для нерабочего пользовательского интерфейса для меня всегда был другой (невидимый) объект пользовательского интерфейса, блокирующий raycast (прозрачное изображение или большой текстовый объект с включенным raycast).

Вот фрагментЯ собираю информацию на основе информации, найденной в другом месте, и часто использую ее для отслеживания объектов, маскирующих лучевую трансляцию в сложных ситуациях пользовательского интерфейса.Поместите компонент в текстовый объект, убедитесь, что он имеет высоту не менее нескольких строк, так как результаты будут отображаться одна под другой.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
[RequireComponent(typeof(Text))]
public class DebugShowUnderCursor : MonoBehaviour
{
    Text text;
    EventSystem eventSystem;
    List<RaycastResult> list;
    void Start()
    {
        eventSystem = EventSystem.current;
        text = GetComponent<Text>();
        text.raycastTarget=false;
    }

    public List<RaycastResult> RaycastMouse(){
         PointerEventData pointerData = new PointerEventData (EventSystem.current)   {  pointerId = -1, };
         pointerData.position = Input.mousePosition;
         List<RaycastResult> results = new List<RaycastResult>();
         EventSystem.current.RaycastAll(pointerData, results);
         return results;
     }
    void Update()
    {
        list= RaycastMouse();
        string objects="";
        foreach ( RaycastResult result in list)
            objects+=result.gameObject.name+"\n";
        text.text = objects;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...