UnityAPI---Application类(数据文件路径)

这篇具有很好参考价值的文章主要介绍了UnityAPI---Application类(数据文件路径)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

数据文件路径:总共有四个属性,分别为:dataPath、persistentDataPath、streamingAssetsPath、 temporaryCachePath
System.Environment.CurrentDirectory   获取到本地工程的绝对路径
Application.dataPath  Assets资源文件夹的绝对路径
Application.persistentDataPath  持久性的数据存储路径,在不同平台路径不同,但都存在,绝对路径
Application.streamingAssetsPath  Assets资源文件夹下StreamingAssets文件夹目录的绝对路径
Application.temporaryCachePath  游戏运行时的缓存目录,也是绝对路径
基本语法:public static string dataPath { get ;}
dataPaht是包含游戏数据文件夹的路径,权限为只读,返回的是一个相对路径,即对于不同的游戏平台返回的路径是不一样的。
Unity Editor: /Assets
Mac player: /Contents
iOS player: //Data
Android:/data/app/xxx.xxx.xxx.apk
注意:
Application.dataPath 返回的路径目录,在移动端是没有访问权限的(既不能访问此目录)。
基本语法:public static string persistentDataPath{ get ;}
persistentDataPaht返回的是一个持久化数据存储目录,权限为只读,在同一平台,不用的应用程序访问此属性返回值相同,但是不同的平台就不相同了。当应用程序发布到IOS和Android平台中,这个路径会指向一个公共的路径,而且应用每次更新时这里的数据不会被清除。
注意:
这个路径比较特殊,这个路径下是可读写。而且在IOS上就是应用程序的沙盒,但是在Android可以是程序的沙盒,也可以是sdcard。并且在Android打包的时候,ProjectSetting页面有一个选项Write Access,可以设置它的路径是沙盒还是sdcard。
该路径的特点:
  • 内容可读写,不过只能运行时才能写入或者读取。提前将数据存入这个路径是不可行的。
  • 无内容限制。你可以从StreamingAsset中读取二进制文件或者从AssetBundle读取文件来写入PersistentDataPath中。
  • 写下的文件,可以在电脑上查看。同样也可以清掉。
基本语法:public static string streamingAssetsPath{ get ;}
streamingAssetsPath返回的是流数据的缓存目录,返回路径为相对路径适合用来存储一些外部数据文件。
基本语法:public static string temporaryCachePath{ get ;}
temporaryCachePath返回一个临时数据缓存目录(只读),同一平台不用应用程序访问此属性的返回值相同,不同平台返回值不同。
将以上四个路径分别在Unity Editor和Android、IOS 平台下返回路劲的基本情况:
Android 平台
Application.dataPaht /data/app/xxx.xxx.xxx.apk
Application.streamingAssetsPath jar:file:///data/app/xxx.xxx.xxx.apk/!/assets
Application.persistentDataPath /data/data/xxx.xxx.xxx/files
Application.temporaryCachePath /data/data/xxx.xxx.xxx/cache
IOS 平台
Application.dataPath:
Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data
Application.streamingAssetsPath:
Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw
Application.persistentDataPath:
Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents
Application.temporaryCachePath:
Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Library/Caches
Unity Editor平台
Application.dataPaht Application(工程目录)/Assets
Application.streamingAssetsPath Application(工程目录)/Assets/StreamingAssets
Application.persistentDataPath 系统指定目录1/工程名
Application.temporaryCachePath 系统指定目录2/工程名
从中可以看出,dataPath 和 stremingAssetsPath是相对于程序的安装目录,是相对路径。非常适用于移植平台设置外部数据文件读取路径。而persistentDataPath和temporaryCachePath返回的程序所在平台的固定位置。适用于存储程序运行过程中一些数据。
实际用法:
 如果只是读取和创建文件或者文件夹,直接用上面的路径拼自己的文件夹就可以;如果是要访问apk或者app内的文件这里操作就有点特殊了,如下(这里以streamingAssetsPath为例):
安卓读:
正常读
filePath = Application.streamingAssetsPath + "/新建文件.txt";
读apk包内文件
filePath = "jar:file://" + Application.dataPath + "/!/assets" + "/新建文件.txt";
IOS读: 
正常读
filePath = "file://" +  Application.streamingAssetsPath + "/新建文件.txt";
读ipa包内文件
filePath = "file://" +  Application.dataPath + "/Raw" + "/新建文件.txt";
PC读:
filePath = "file://" + Application.streamingAssetsPath + "/新建文件.txt";
扩展知识:资源加载---Unity移动平台获取外部文件解析
关于资源加载问题要讲到Resources、StreamingAssets、AssetBundle这三个类。
Resources:
它作为一个Unity3D的保留文件夹出现的,也就是如果你新建的文件夹的名字叫Resources,那么里面的内容在打包时都会被无条件的打到发布包中。
其特点是:
  • 只读,即不能动态修改。所以想要动态更新的资源不要放在这里。
  • 会将文件夹内的资源打包集成到.asset文件里面。因此建议可以放一些Prefab,因为Prefab在打包时会自动过滤掉不需要的资源,有利于减小资源包的大小。
  • 主线程加载。
  • 资源读取使用Resources.Load()。
StreamingAssets:
要说到StreamingAssets,其实和Resources还是蛮像的。同样作为一个只读的Unity3D的保留文件夹出现。不过两者也有很大的区别,那就是Resources文件夹中的内容在打包时会被压缩和加密。而StreamingAsset文件夹中的内容则会原封不动的打入包中,因此StreamingAssets主要用来存放一些二进制文件。
下面也同样做一个简单的总结:
  • 只读不可写。
  • 主要用来存放二进制文件。
  • Android平台下一般是通过过WWW类来读取。
AssetBundle:
是把prefab或者二进制文件封装成AssetBundle文件(也是一种二进制)。但是也有硬伤,就是在移动端无法更新脚本。
下面简单的总结下:
  • 是Unity3D定义的一种二进制类型。
  • 最好将prefab封装成AseetBundle,只要这个prefab上挂的是本地脚本,就可以。
  • 使用WWW类来下载。
案例:不同平台Resources、StreamingAssets、AssetBundle应用。
先新建一个文本,写入以下内容,然后把后缀改为.xml,已提供加载使用。
新建的测试test.xml文件:
    GarFey
    http://blog.sina.com.cn/u/3286376053
    26
   

China文章来源地址https://www.toymoban.com/news/detail-734875.html

Resources:
1.在Assets文件夹下新建一个Resources目录,将test.xml放在该目录下,
2.新建一个脚本ReadXmlInResources.cs挂在 Main Camera上,脚本内容:
 
//-----------------------
// @Author GarFe
// @date 20190612
// @version 1.0
//-----------------------
using UnityEngine;
using System.Collections;
using System.Xml;

///
/// 此类用于测试 在Resources目录下读取XML文件
///
public class ReadXmlInResources : MonoBehaviour
{
    private string readXmlResult;

    // Use this for initialization
    void Start () {
        LoadXML("test");
        Debug.Log("xml:" + readXmlResult);
    
    }

    void OnGUI()
    {
        GUIStyle titleStyle = new GUIStyle();
        titleStyle.fontSize = 20;
        titleStyle.normal.textColor = new Color(0, 255, 255);
        GUI.Label(new Rect(400, 10, 500, 200), readXmlResult, titleStyle );
    }

    ///
    /// 加载Assets/Resources文件夹下resourcesName文件
    ///
    ///
    private void LoadXML(string resourcesName)
    {
        readXmlResult = Resources.Load(resourcesName).ToString();
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(readXmlResult);
    }
}
StreamingAssets:
1.在Assets目录下新建StreamingAssets目录,将test.xml放到该目录下。
2.创建脚本ReadXmlInStreamingAssets.cs 挂在Main Camera上,脚本内容:
 
//-----------------------
// @Author GarFe
// @date 20190612
// @version 1.0
//-----------------------
using UnityEngine;
using System.Collections;
using System.IO;

public class ReadXmlInStreamingAssets: MonoBehaviour
{
    ///
    /// 读取XML结果
    ///
    private string readXmlResult;

    // Use this for initialization
    void Start ()
    {
        loadXML();
        Debug.Log(readXmlResult);
    }
    
    void OnGUI()
    {
        GUIStyle titleStyle = new GUIStyle();
        titleStyle.fontSize = 20;
        titleStyle.normal.textColor = new Color(0, 255, 255);
        GUI.Label(new Rect(400, 10, 500, 200), readXmlResult, titleStyle);
    }

    ///
    /// 根据不同的平台加载StremingAssets文件夹下的XML文件
    ///
    private void loadXML()
    {
        if(Application.platform == RuntimePlatform.Android)
        {
            Debug.Log("android platform");
            StartCoroutine("loadXMLWithWWW");
        }
        else if(Application.platform == RuntimePlatform.WindowsEditor)
        {
            Debug.Log("window platform");
            //获得文件路径
            string path = Application.streamingAssetsPath + "/text.xml";
            loadXMLWithStreamReader(path);
        }
        else if(Application.platform == RuntimePlatform.IPhonePlayer)
        {
            Debug.Log("iphone platform");
            //获得文件路径
            string path = Application.streamingAssetsPath +"/text.xml";
            loadXMLWithStreamReader(path);

        }
        //发现所有平台StreamingAssets目录下的文件路径都可以用Application.streamingAssetsPath +"/fileName.xml"来加载,但Android加载方式不一样
    }

    ///
    /// 使用StreamReader读取文件信息
    ///
    /// 读取文件的路径
    private void loadXMLWithStreamReader(string path)
    {  
        FileInfo fileInfo = new FileInfo(path);
        StreamReader reader = fileInfo.OpenText();
        readXmlResult = reader.ReadToEnd();
        reader.Close();
    }

    ///
    /// 
    ///对于android平台, streamingAssets中的文件一般只能用www来异步读取
    /// (同时,可以用persistenDataPath来保存streamingassets里读取的数据)
    ///
    ///
    IEnumerator loadXMLWithWWW()
    {
        //获得文件路径
        string path = Application.streamingAssetsPath + "/text.xml";
        WWW www = new WWW(path);
        yield return www;
        readXmlResult = www.text;
    }
}

到了这里,关于UnityAPI---Application类(数据文件路径)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Boot】application 配置文件(2)

    server.servlet.session. timeout =1800  定义了 HTTP 会话的超时时间,单位是秒,在此设置中,会话的超时时间被设置为 1800秒 即30分钟。这意味着 ,如果30分钟内用户没有与服务器进行任何活动(如请求页面),那么会话将自动过期。  spring.jackson.time-zone=GMT+8 这个设置指定了jackson 库

    2024年01月23日
    浏览(45)
  • IDEA中application.properties文件中文乱码

    项目编码格式与IDEA编码格式不一致导致的 在File-Settings-Editor-File Encodings选项中,将Global Encoding,Project Encoding,Default encoding for properties files这三个选项置为一致,可以是GBK或者UTF-8 注:修改完后乱码并不会变成中文,新输出的中文就不会变成?了。

    2024年04月16日
    浏览(41)
  • SpringBoot配置文件application.yml的理解

    一、存放位置分类 1.当前项目根目录下的config目录下 2.当前项目的根目录下 3.resources目录下的config目录下 4.resources目录下 按照这上面的顺序,4个配置文件的优先级依次降低。  二、自定义存放位置和自定义命名 自定义存放位置和自定义配置文件命令和application.properties配置类

    2024年02月09日
    浏览(51)
  • application.yml文件中开启mybatis自动驼峰映射

    如果不开启映射 在使用BaseMapper 和Iservice封装的方法时 会报错 如果在Mapper.xml文件中自己写sql语句 在selsect* 或者其他字段名自己指定清楚的情况下 不会报错 但同样无法正确返回数据 道理很简单 因为数据库数据 写不到java的属性名里 只是查询能查到 不会报错 sql查询默认查询

    2024年02月14日
    浏览(64)
  • IDEA中 application.yaml文件没有绿色的叶子

    问题背景 前段时间一直在刷算法题和备战考试,忽略了项目方面的锻炼,于是今天就想着来写一个练手的项目,重新熟悉一下技术栈。结果刚搭建一个SpringBoot项目,就发现application.yaml配置文件没有被IDEA识别,显示为灰色,同时没有出现Spring标志性的绿色叶子 问题原因 :

    2024年02月15日
    浏览(44)
  • Spring Boot Application.properties和yaml配置文件

    全局配置文件能够对一些默认配置值进行修改。Spring Boot使用一个application.properties或者application.yaml的文件作为全局配置文件,该文件存放在src/main/resource目录或者类路径的/config,一般会选择resource目录。 使用Spring Initializr方式创建项目——PropertiesDemo 单击【Next】按钮 添加W

    2024年01月24日
    浏览(74)
  • Java实战:Spring Boot application.yml配置文件详解

    本文将详细介绍Spring Boot application.yml 配置文件的使用和配置项。我们将探讨 application.yml 文件的基本概念,以及如何使用它来配置Spring Boot应用程序的各个方面。此外,我们将通过具体的示例来展示如何配置不同的Spring Boot组件,如数据源、数据库、缓存、邮件服务等。本文适

    2024年04月24日
    浏览(45)
  • idea application.yml配置文件没有提示或读不到配置

     不一样的右键去设置    

    2024年02月14日
    浏览(45)
  • SpringBoot - 配置文件application.yml使用详解(附:Profile多环境配置)

    SpringBoot - 配置文件application.yml使用详解(附:Profile多环境配置) 1,基本介绍 (1)YAML 是 JSON 的超集,简洁而强大,是一种专门用来书写配置文件的语言,可以替代 application.properties。 (2)在创建一个 SpringBoot 项目时,引入的 spring-boot-starter-web 依赖间接地引入了 s

    2024年02月08日
    浏览(48)
  • SpringBoot 常用的配置文件 application.yml和 bootstrap.yml的区别

    SpringBoot默认支持properties和YAML两种格式的配置文件。前者格式简单,但是只支持键值对。如果需要表达列表,最好使用YAML格式。SpringBoot支持自动加载约定名称的配置文件,例如application.yml。如果是自定义名称的配置文件,就要另找方法了。可惜的是,不像前者有@PropertySour

    2023年04月15日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包