StreamingAssets:
要说到StreamingAssets,其实和Resources还是蛮像的。同样作为一个只读的Unity3D的保留文件夹出现。不过两者也有很大的区别,那就是Resources文件夹中的内容在打包时会被压缩和加密。而StreamingAsset文件夹中的内容则会原封不动的打入包中,因此StreamingAssets主要用来存放一些二进制文件。下面也同样做一个简单的总结:
- 只读不可写。
- 主要用来存放二进制文件。
- Android平台下一般是通过过WWW类来读取。
下边的例子是把unity里StreamingAssets下的一个文件复制到手机上
可以打包成APK在手机上测试 把unity里streamingAssetsPath目录下选定的文件拷贝到手机的目标位置。
string path = Application.streamingAssetsPath + "/white.png";//找到streamingAssetsPath目录下的文件 把路径返回
public void file()
{
StartCoroutine(Png());
}
IEnumerator Png()
{
WWW www = new WWW(path);
yield return www;
if (www.isDone)
{
string topath = Application.persistentDataPath + "/" + "white.png";//目标路径
File.WriteAllBytes(topath, www.bytes);//把文件数据写入 可以打包成APK在手机上测试 把unity里streamingAssetsPath目录下选定的文件拷贝到手机的目标位置。
}
}
Unity在构建项目时将大多数资产组合到一个项目中。但是,将文件放入目标计算机上的普通文件系统以使其可通过路径名访问有时很有用。这方面的一个例子是在iOS上部署电影文件设备; 必须从文件系统中要由该PlayMovie功能播放的位置提供原始电影文件。
放置在Unity项目中名为StreamingAssets(区分大小写)的文件夹中的任何文件将逐字复制到目标计算机上的特定文件夹中。您可以使用Application.streamingAssetsPath属性检索该文件夹。最好使用它Application.streamingAssetsPath来获取StreamingAssets文件夹的位置,因为它始终指向运行应用程序的平台上的正确位置。
返回的位置Application.streamingAssetsPath因平台而异:
- 大多数平台(Unity Editor,Windows,macOS,Linux播放器,PS4,Xbox One,Switch)使用Application.dataPath + “/StreamingAssets”,
- iOS使用Application.dataPath + “/Raw”,
- Android使用压缩APK内的文件 / JAR文件"jar:file://" + Application.dataPath + “!/assets”。
下边举个在安卓平台上播放StreamingAssets视屏的例子
添加一个面板用来当做视频的背景 添加video player 和脚本
video player里的URL不选 在脚本里调用
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
public class StreamingAssetsDataPathDemo : MonoBehaviour
{
//public AudioSource MAudioSource;
public VideoPlayer MVideoPlayer;
// Use this for initialization
void Start () {
Debug.LogError("Program Starts");
StartCoroutine("FindAudioFile");
}
// Update is called once per frame
void Update () {
}
private IEnumerator FindAudioFile()
{
//string filepath = Application.dataPath + "/StreamingAssets/" + "GuitarLoop.wav";
//string filepath = "jar:file://" + Application.dataPath + "!/assets/" + "GuitarLoop.wav";
string filepath_video = "jar:file://" + Application.dataPath + "!/assets/" + "EasyMovieTexture.mp4";
//打包后在安卓上的路径
string path= Application.dataPath + "/StreamingAssets/" + "EasyMovieTexture.mp4";
//在unity中调试
Debug.LogError("File Path: " + filepath_video);
WWW www = new WWW(filepath_video);
yield return www;
MVideoPlayer.url = filepath_video;//video player 的url
MVideoPlayer.Play();
}
}