zoukankan      html  css  js  c++  java
  • Unity3D资源存放笔记

    文件夹及路径

    昨天记了一篇AssetBundle学习笔记,那么游戏中的各种资源应该如何存放呢?

    在网上一阵搜罗,把笔记记一下。

    非特殊名称文件夹

    非Unity3D指定名称的文件夹中的资源,如果游戏场景中有使用到,发布时会被一同打包,没有使用到则不会被打包。

    开发时可使用Application.dataPath来对根目录下的文件进行任意操作,但是发布到移动端后App是没有权限操作根目录的。

    Resources文件夹

    存放到该文件夹下的所有文件,无论场景中是否使用到,都会被打包。

    但是资源在打包后只能使用Resource.Load进行读取,不能对资源进行修改和删除等操作。

    StreamingAssets文件夹

    存放到该文件夹下的所有文件,无论场景中是否使用到,也都会被打包。

    使用Application.streamingAssetsPath可以获取到该目录,在PC端可以对该文件夹进行读写操作,在移动端只能对该文件夹进行读操作。

    这个文件夹下的资源也会全都打包在.apk或者.ipa 它和Resources的区别是,Resources会压缩文件,但是它不会压缩原封不动的打包进去。并且它是一个只读的文件夹,就是程序运行时只能读 不能写。它在各个平台下的路径是不同的,不过你可以用Application.streamingAssetsPath 它会根据当前的平台选择对应的路径。

    有些游戏为了让所有的资源全部使用assetbundle,会把一些初始的assetbundle放在StreamingAssets目录下,运行程序的时候在把这些assetbundle拷贝在Application.persistentDataPath目录下,如果这些assetbundle有更新的话,那么下载到新的assetbundle在把Application.persistentDataPath目录下原有的覆盖掉。(终于知道手游第一次进入时解压资源是在干什么了!)

    StreamingAssets目录下的资源都是不压缩的,所以它比较大会占空间,比如你的应用装在手机上会占用100M的容量,那么你又在StreamingAssets放了一个100M的assetbundle,那么此时在装在手机上就会在200M的容量。

    Application.persistentDataPath路径

    该路径在Unity3D根目录下没有对应的文件夹,该路径指向设备上的公共目录。

    因为Application.persistentDataPath目录是应用程序的沙盒目录,所以打包之前是没有这个目录的,直到应用程序在手机上安装完毕才有这个目录。

     

    该文件存在手机沙盒中,因为不能直接存放文件:

    1. 通过服务器直接下载保存到该位置,也可以通过Md5码比对下载更新新的资源
    2. 没有服务器的,只有间接通过文件流的方式从本地读取并写入Application.persistentDataPath文件下,然后再通过Application.persistentDataPath来读取操作。

    注:在Pc/Mac电脑 以及Android跟Ipad、ipone都可对文件进行任意操作,另外在IOS上该目录下的东西可以被iCloud自动备份。

    Application.temporaryCachePath路径

    操作方式跟上面Application.persistentDataPath类似。除了在IOS上不能被iCloud自动备份。

     

    一些记录

    Application.persistentDataPath没有读取文件的问题

    //安卓上跟其他平台不一样,安装后,这些文件实际上是在一个Jar压缩包里,所以不能直接用读取文件的函数去读,而要用WWW方式。具体做法如下:
    //1.把你要读取的文件放在Unity项目的Assets/StreamingAssets文件夹下面,没有这个文件夹的话自己建一个。
    //2.读取的代码(假设名为"文件.txt")
    byte[] InBytes; //用来存储读入的数据
    if (Application.platform == RuntimePlatform.Android) //判断当前程序是否运行在安卓下
    {
    string FileName = "jar:file://" + Application.dataPath + "!/assets/" + "文件.txt";
    WWW www = new WWW(FileName); //WWW会自动开始读取文件
    while(!www.isDone){} //WWW是异步读取,所以要用循环来等待
    InBytes = www.bytes; //存到字节数组里

    }
    else
    {
    //其他平台的读取代码
    }

    Unity3D研究院之IOS Android支持中文与本地文件的读取写入

    http://www.apkbus.com/android-429-1.html

    unity 在移动平台中,文件操作路径详解

    http://www.unitymanual.com/thread-23491-1-1.html

    Unity中的Path对应各平台中的Path

    http://www.unitymanual.com/thread-21404-1-1.html

     

  • 相关阅读:
    Web 日志分析过程
    nginx系列之九:lua服务
    Linux网络编程之IO模型
    从URL输入到页面展现到底发生什么
    CentOS 日常运维十大技能
    以MySQL为例,详解数据库索引原理(1)
    Elasticsearch的特点以及应用场景
    Ubuntu1804编译安装LNMP
    golang 高级
    Centos7 安装 Redis
  • 原文地址:https://www.cnblogs.com/hammerc/p/4603848.html
Copyright © 2011-2022 走看看