Имя FileUtil не существует в текущем контексте - PullRequest
0 голосов
/ 19 апреля 2019

Я сталкиваюсь с ошибкой: «Имя FileUtil не существует в текущем контексте», только когда я создаю приложение Unity для Android, но оно работает без ошибок, когда я запускаю его в редакторе. Эта строка в основном удаляет папку

Я попытался добавить, используя System.IO; но это все еще не работает. Также это работает, если я удалю строку.

public void Delete()
{
    P = EventSystem.current.currentSelectedGameObject.transform;
    FileUtil.DeleteFileOrDirectory(Application.persistentDataPath + "/ARPortal/"  + P.parent.gameObject.name);
    P.gameObject.SetActive(false);
    P.parent.GetChild(4).transform.gameObject.SetActive(true);
    counter = 0;
}    

Есть ли обходной путь или альтернатива для удаления папки. Фрагмент ошибки, с которой я сталкиваюсь

enter image description here

1 Ответ

0 голосов
/ 19 апреля 2019

FileUtil является частью пространства имен UnityEditor.Он не существует в сборке, но только в самом редакторе Unity.

=> Вы не можете использовать что-либо из этого в встроенном приложении.


Обычно вы используете его только для сценариев редактора (то, что должно происходить только в Unity, например, при наличии модных инспекторов и т. Д.).

Чтобы исключить такие части кода из сборки, существует два основных способа:

  1. Убедитесь, что все сценарии редактора размещены в папках с именем Editor.Они автоматически исключаются из процесса сборки.

  2. Если вы хотите исключить только определенные блоки кода из сборки (все, что использует UnityEditor, вы можете использовать , если используются препроцессоры с UNITY_EDITOR

    #if UNITY_EDITOR
        using UnityEditor;
    #endif
    
    ...
    
    #if UNITY_EDITOR
        // some code using the UnityEditor namespace
    #endif
    

Для удаления папки во время выполнения вы можете использовать, например, Directory.Delete

Для файла вы можете использовать File.Delete

В обоих случаях вы никогда не должны напрямую объединять строки пути, а использовать Path.Combine

using System.IO;

...

var path = Path.Combine(Application.persistentDataPath, "ARPortal", P.parent.gameObject.name);

//if it is an empty folder use
Directory.Delete(path);

//if it is a folder with content use
Directory.Delete(path, true);

//if it is a file use
File.Delete(path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...