Как получить доступ к ресурсам Unity на Android или iPhone?

android iphone unity3d assets

14891 просмотра

3 ответа

1125 Репутация автора

Мне нужно получить доступ к файлу изначально (из кода C ++ или Java) на Android и iPhone в проекте плагина Unity. Предоставляет ли Unity какой-либо метод для доступа к файлам в активах проекта?

Автор: arsalank2 Источник Размещён: 23.11.2011 06:00

Ответы (3)


0 плюса

10887 Репутация автора

Доступ к файлам во время выполнения ограничен каталогом Assets / Resources. Ко всему помещенному в него можно получить доступ Resources.Loadметодом ( doc ), но нет возможности получить что-то вне папки.

В папке Assets / Resources вы можете настроить произвольную структуру папок. Я использовал его в проекте iPhone для создания уровней из предопределенных текстовых файлов, и это работало как шарм.

Автор: Kay Размещён: 28.11.2011 03:23

6 плюса

76 Репутация автора

Решение
  1. Мой обходной путь состоял в том, чтобы скопировать файлы из Application.streamingAssetsPath (который находится внутри jar и не может быть доступен большинству собственных библиотек) в Application.persistentDataPath (что вполне нормально), а затем передать этот путь в собственный код ,
  2. Исходные файлы в проекте должны быть в папке Assets \ StreamingAssets.

Небольшой пример кода в C # для асинхронного копирования файлов: добавьте этот метод в скрипт, который наследует MonoBehaviour

IEnumerator CopyFileAsyncOnAndroid()
{
    string fromPath = Application.streamingAssetsPath +"/";
    //In Android = "jar:file://" + Application.dataPath + "!/assets/" 
    string toPath =   Application.persistentDataPath +"/";

    string[] filesNamesToCopy = new string[] { "a.txt" ,"b.txt"};
    foreach (string fileName in filesNamesToCopy)
    {
        Debug.Log("copying from "+ fromPath + fileName +" to "+ toPath);
        WWW www1 = new WWW( fromPath +fileName);
        yield return www1;
        Debug.Log("yield done");
        File.WriteAllBytes(toPath+ fileName, www1.bytes);
        Debug.Log("file copy done");
    }
    //ADD YOUR CALL TO NATIVE CODE HERE
    //Note: 4 small files can take a second to finish copy. so do it once and
    //set a persistent flag to know you don`t need to call it again
}
Автор: assaf Размещён: 01.07.2013 01:23

0 плюса

1 Репутация автора

Я использую этот плагин для andriod: https://assetstore.unity.com/packages/tools/input-management/better-streaming-assets-103788

Вы можете просмотреть источник здесь: https://github.com/gwiazdorrr/BetterStreamingAssets

Помогает вам избежать использования www

Автор: Rune Elmstrom Размещён: 17.02.2019 11:39
Вопросы из категории :
32x32