MissingReferenceException: объект типа UnityEngine.GameObject был уничтожен, но вы все еще пытаетесь получить к нему досC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 MissingReferenceException: объект типа UnityEngine.GameObject был уничтожен, но вы все еще пытаетесь получить к нему дос

Сообщение Anonymous »

Встроенная система событий для пользовательского интерфейса Unity продолжает пытаться получить доступ к кнопке после того, как я использовал Destroy() для ее игрового объекта. он останавливается и не начинается снова, когда я делаю паузу, но в противном случае будет продолжаться в каждом кадре. объект - это просто щелчок правой кнопкой мыши-> Пользовательский интерфейс -> кнопка - текстовая сетка pro.
Ниже приведена функция, которую выполняет кнопка, и функция для создания кнопки (в этом порядке)

Код: Выделить всё

    public void makeProgram(int i, Button button)
{
GameObject obj = Instantiate(ProgramObject, programHolder);
programs.Add(obj.GetComponent
());
obj.GetComponent().gameManager = this;
obj.GetComponent().localPosition = button.transform.localPosition;
Destroy (button.gameObject);
}
public void makeButton(int i)
{
Button button = Instantiate(ProgramBuyButton, programHolder)
.GetComponent();
button.name = i+"";
button.GetComponent().localPosition = Tools.makeProgramPosition(i - 1);
button.onClick.AddListener(() => makeProgram(i, button));
}
Ошибка ссылается на InputSystemUIInputModule:476, вторую строку в следующем коде.

Код: Выделить всё

            // now issue the enter call up to but not including the common root
Transform oldPointerEnter = eventData.pointerEnter?.transform;
eventData.pointerEnter = currentPointerTarget;
Проблема в том, что пользователь не может взаимодействовать с любыми другими объектами пользовательского интерфейса.
Ошибка:

Код: Выделить всё

Your script should either check if it is null or you should not destroy the object.
UnityEngine.Object+MarshalledUnityObject.TryThrowEditorNullExceptionObject (UnityEngine.Object unityObj, System.String parameterName) (at :0)
UnityEngine.Bindings.ThrowHelper.ThrowNullReferenceException (System.Object obj) (at :0)
UnityEngine.GameObject.get_transform () (at :0)
UnityEngine.InputSystem.UI.InputSystemUIInputModule.ProcessPointerMovement (UnityEngine.InputSystem.UI.ExtendedPointerEventData eventData, UnityEngine.GameObject currentPointerTarget) (at ./Library/PackageCache/com.unity.inputsystem/InputSystem/Plugins/UI/InputSystemUIInputModule.cs:476)
UnityEngine.InputSystem.UI.InputSystemUIInputModule.ProcessPointerMovement (UnityEngine.InputSystem.UI.PointerModel& pointer, UnityEngine.InputSystem.UI.ExtendedPointerEventData eventData) (at ./Library/PackageCache/com.unity.inputsystem/InputSystem/Plugins/UI/InputSystemUIInputModule.cs:402)
UnityEngine.InputSystem.UI.InputSystemUIInputModule.ProcessPointer (UnityEngine.InputSystem.UI.PointerModel& state) (at ./Library/PackageCache/com.unity.inputsystem/InputSystem/Plugins/UI/InputSystemUIInputModule.cs:352)
UnityEngine.InputSystem.UI.InputSystemUIInputModule.Process () (at ./Library/PackageCache/com.unity.inputsystem/InputSystem/Plugins/UI/InputSystemUIInputModule.cs:2257)
UnityEngine.EventSystems.EventSystem.Update () (at ./Library/PackageCache/com.unity.ugui/Runtime/UGUI/EventSystem/EventSystem.cs:530)
Я пытался найти способ «безопасно» уничтожить кнопку, но не могу найти ничего, что связано с системой событий, мне хочется отодвинуть ее от курсора и использовать сопрограмму для уничтожить его через некоторое время (отредактировать: я протестировал его, и он работает, но все равно хотелось бы более приятного решения) сработает, но также не будет самым элегантным, и я хочу найти лучший способ справиться с этим. Спасибо за чтение, и я надеюсь, что для этого есть лучшее решение.

Подробнее здесь: https://stackoverflow.com/questions/791 ... t-has-been
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»