我从服务器下载一些精灵并将它们存储在Application.persistentDataPath
。
但是,我无法使用Resources.Load (controllerPath)
加载控制器,因为该路径位于Resources文件夹之外。
此外,当我尝试将动画控制器添加到MissingComponentException
时,我得到GameObject
。
这是我的代码:
private GameObject SideSprite;
// ...
string controllerPath = Application.persistentDataPath+"/"+aux+"/"+aux+"Controller";
controller = (RuntimeAnimatorController)Resources.Load (controllerPath); // Returns null
// Below I get:
// MissingComponentException: There is no 'Animator' attached to the
// "Missing Prefab (Dummy)" game object, but a script is trying to access it.
SideSprite.GetComponent<Animator> ().runtimeAnimatorController = controller;
我应该如何从持久数据路径加载资源?
答案 0 :(得分:2)
persistentDataPath用作任何常规文件夹。我不会存储精灵,但更可能是纹理,下次你需要它时,你可以展开将纹理应用于精灵的过程:
public static void StoreCacheSprite(string url, Sprite sprite)
{
if(sprite == null || string.IsNullOrEmpty(url) == true) { return; }
SpriteRenderer spRend = sprite.GetComponent<SpriteRenderer>();
Texture2D tex = spRend.material.mainTexture;
byte[] bytes = tex.EncodeToPNG();
string path = Path.Combine(Application.persistentDataPath, url);
File.WriteAllBytes(Application.persistentDataPath, bytes);
}
public static Sprite GetCacheSprite(string url)
{
if( string.IsNullOrEmpty(url) == true) { return; }
string path = Path.Combine(Application.persistentDataPath, url);
if(File.Exists(path) == true)
{
bytes = File.ReadAllBytes(path);
Texture2D texture = new Texture2D(4, 4, TextureFormat.RGBA32, false);
texture.LoadImage(bytes);
Sprite sp = Sprite.Create(texture, new Rect(0,0 texture.width, texture.height, new Vector2(0.5f,0.5f));
return sp;
}
return null;
}
第一种方法使用.NET中的File类存储纹理。它将字节数组转换并写入设备的ROM(File.WriteAllBytes)。你需要一个Sprite的路径和它的名字。该名称需要符合文件和文件夹路径命名。
第二种方法执行逆过程,检查它是否已经存储,并将RAM上找到的字节数组转换为可用的Sprite。
答案 1 :(得分:0)
您也可以简单地使用WWW获取数据。
string controllerPath = Application.persistentDataPath+"/"+aux+"/"+aux+"Controller";
IEnumerator Start ()
{
WWW www = new WWW("file:///" + controllerPath);
yield return www;
Debug.Log(www.texture); //or www.bytes
}