unity3d 各个目录的意思

1.首先,你得理解Unity中各个目录的意思?

我这里说的是移动平台(安卓举例),读,写。所谓读,就是你出大版本的包之后,这个只读的话,就一辈子就这些东西了,不会改变了,不会有其他资源来覆盖或者增加啦。

可写,就是可以加东西进去呗。可能是自己太笨,一开始没怎么注意这意思。竟然往StreamingAssets去实现资源更新(天啦撸)。

 

Application.StreamingAssetsPath,

StreamingAssets目录必须在Assets根目录下,该目录下所有资源也会被打包到游戏里,不同于Resources目录,该目录下的资源不会进行压缩,同样是只读不可写的。
这里的只可读,不可写,就是除了出大版本的包(重新下载),这里面的东西永远不会变。

  各平台StreamingAssets路径打印: 
  Win:E:/myProj/Assets/StreamingAssets 
  Mac : /myProj/Assets/StreamingAssets 
  Andorid:jar:file:///data/app/com.myCompany.myProj-1/base.apk!/assets 
  iOS: /var/containers/Application/E5543D66-83F3-476D-8A8F-49D5332B3763/myProj.app/Data/Raw

Application.PersistentDataPath

   应用程序安装后才会出现。该目录独特之处在于是可读,可写的,所以我们一般将下载的AssetBundle存放于此。
  各平台PersistentDataPath路径打印: 
  Win:C:/Users/lodypig/Appdata/LocalLow/myCompany/myProj 
  Mac : /Users/lodypig/Library/Application Support/myCompany/myProj 
  Andorid:/data/data/com.myCompany.myProj/files 
  iOS: /var/mobile/Containers/Data/Appliction/A112252D-6B0E-459Z-9D49-CD3EAC6D47D/Documents

Application.DataPath

  应用程序目录,即Assets目录。使用Appliction.dataPath访问。只读不可写
  各平台DataPath路径: 
  Win:E:/myProj/Assets 
  Mac : /myProj/Assets/ 
  Andorid:/data/app/com.myCompany.myProj-1/base.apk! 
  iOS: /var/containers/Application/E5543D66-83F3-476D-8A8F-49D5332B3763/myProj.app/Data

综上,也就是说,要实现资源更新,你只有把资源下载到Application.PersistentDataPath目录下才可实现资源更新(增加或者替换),其他目录不可能实现。

 

2.理解上面三种目录的关系,Unity游戏加载的资源是如何分配的?(彼此的关系)

首先你得有一个资源服务器(FTP为例),因为StreamingAssets目录是只读的,我们想要实现热更新,StreamingAssets

目录里面的东西一旦第一个版本打出APK的包之后,这里的东西将永远不会变(只读)。由于PersistentDataPath目录是可读可写的,

所以游戏下载资源都会下载到这里面。这样就实现了资源的热更新。

 

注解:绿色的代表流动,可以不断可以改变的资源。红色线代表,读取persistent目录没有的情况下,读StreamingAssets目录,所以,是永远不变的资源。(除非你去重新下载一个apk的包,就不是热更了)

3.如何加载本地的资源?

 首先优先判断PersistentDataPath目录下的资源是否存在,因为服务器上的资源都是下载到这里的,最新的资源通过下载到这里并且覆盖,这里的资源

能保持跟服务器一致。(雨松之前讲的UnityAssetBundle例子就是通过加载服务器上的,那个只是一个小案例,不能每次用哪下载到哪,每次都要下载,

这种方式是很不好用的,就第一次用的时候如果资源与服务器不一致,就下载到本地中,即PersistentDataPath目录。)

因为每个游戏一开始出大版本的时候,都会附带大量资源,就是放在StreamingAssets目录,所以,这里存放大量资源。这样减少下载的次数。

其实,换一种说法,PersistentDataPath完全是给StreamingAssets的补丁目录,我是这样理解的。当然,在项目运用中,都需要优先最先资源判断。

 4.遇到的那些神神神.....坑?

   (1) 不要以为在PC端可以加载的路径,安卓也可以用。

  我这边因为涉及到WWW加载,贴出我的。

  这里主要是通过www 如何加载PersistentDataPath和StreamingAssets这两个目录。

  Application.PersistentDataPath:

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
   /// 天呐,一个Per目录,还两种方法加载。这真的是最后我找出来最完美的,可以加载的,之前还有N种版本,就不提了,网上有,我是经过实测,Unity5.3.4版本
   /// 加载PC上安卓平台,加载PC上Standalone,加载安卓真机(APK包),这三个,都是可以加载的(WWW加载),
   /// </summary>
   public static string PERSISTENT_PATH_DATABASE //= LGameConfig.LOCAL_URL_PREFIX + Application.persistentDataPath + "/DataBase/";
   {
       get
       {
           #if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
                   return   "file:///"+ Application.persistentDataPath + "/Test/";
           #else
                         return   "file://"+ Application.persistentDataPath + "/Test/";
           #endif
       }
   }

  Application.StreamingAssets:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static string STREAMING_PATH_DATABASE
    {
        //这样写,因为安卓Unity平台是Application.isMobilePlatform==false, 而宏定义中又  ==UNITY_ANDROID。
         //因为我们项目中是需要同时在PC下安卓平台和PC下 Standard平台,哈哈
        get
        {
            if (!Application.isMobilePlatform)
            {
                return "file://" + Application.dataPath + "/StreamingAssets" "/DataBase/";
            }
            else
            {
                return
#if UNITY_ANDROID
        Application.streamingAssetsPath+  "/DataBase/";
#else
      "file://" + Application.dataPath + "/StreamingAssets" "/DataBase/";
#endif
            }
        }

  这个加载地址,真的是精华,可能自己太笨,就是搞这个WWW加载安卓StreamingAssets目录,花了大把时间,因为网上,加载方式真的是尼玛一万种,要喷一下,这些人,不实际打到APK测一下,我MDGB呀,坑的我好惨。

 

 (2)不要以为在PC端可以用的方法,在安卓也可以用。

   

      安卓上跟其他平台不一样,安装后,这些文件实际上是在一个Jar压缩包里,所以不能直接用读取文件的函数去读,而要用WWW方式
      读取的代码(假设名为"文件.txt") 

 (3) 安卓资源路径加载,下载问题,真的是这次做AssetBundle最大的障碍。

(4)通过FTP和CDN下载资源的时候对应的 后缀是不同的。

  FTP下载 后面用   "/"  ,即可。

  CDN下载 后面用  "//" ,即可。

(5)不同的加载方式,加载的路径也是不同的。

具体我就不说了。

(6)记得加 加载文件的后缀名

安卓上跟其他平台不一样,安装后,这些文件实际上是在一个Jar压缩包里,所以不能直接用读取文件的函数去读,而要用WWW方式
1.读取的代码(假设名为"文件.txt") 

(7)加载方式,First In PersistentDataPath,Then StreamingAssets

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
IEnumerator LoadAnouncementText()
    {
        string strUrl = GetTxtPerststentUrl(anouncementText);
        WWW www = new WWW(strUrl);
        yield return www;
        if (www.error == null)
        {
            mAnoucementText = ConvertByteToString(www.bytes);
        }
        else if (www.isDone)
        {
            string strPerUrl = GetTxtStreamUrl(anouncementText);
            www = new WWW(strPerUrl);
            yield return www;
            if (www.error == null)
            {
                mAnoucementText = ConvertByteToString(www.bytes);
            }
            else if (www.isDone)
            {
                Debug.LogError("下载当前表出错"  + www.error.ToString());
            }
        }
    }
string GetTxtStreamUrl(string name)
    {
        return STREAMING_PATH_DATABASE + name + ".txt";
    }
    string GetTxtPerststentUrl(string name)
    {
        return PERSISTENT_PATH_DATABASE + name + ".txt";
    }!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!补充!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!补充:对于上面的路径问题大家可能有些困惑。贴出最详细全面的路径问题,经过测试,完全没问题(安卓,PC都可以用,实际项目中使用)
复制代码
 string GetScenePath(string fileName){string path =DataUrl.GetFilePersistentUrl(fileName)+".unity3d";// string path= DataUrl.LOCAL_URL_PREFIX + Application.dataPath + "/StreamingAssets/" + "Scene_Main" + ".unity3d";//读取Per目录的时候不需要加prefix,但是读取Streaming目录时候需加上prefixbool isPersistentDataPath = System.IO.File.Exists(path);if (!isPersistentDataPath){path =  DataUrl.GetFileStreamingUrl(fileName)+ ".unity3d";if (!System.IO.File.Exists(path)){Debug.LogError("Per,Stream目录 scene bundle都不存在");return null;}}return DataUrl.LOCAL_URL_PREFIX+ path;}DataUrl.cs
public static string GetFilePersistentUrl(string path){return Application.persistentDataPath+"/" + path;}public static string GetFileStreamingUrl(string path){return Application.streamingAssetsPath+"/" + path;}
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WINpublic static readonly string LOCAL_URL_PREFIX = "file:///";
#elsepublic static readonly string LOCAL_URL_PREFIX="file://";
#endif
复制代码

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/387519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress Option API(数据库储存 API)

WordPress Option API 是提供给开发者的数据库存储机制&#xff0c;通过调用函数&#xff0c;可以快速、安全的把数据存储到数据库里&#xff08;都在 wp_options 表&#xff09;。 每个设置的模式是 key – value&#xff0c;利于扩展。Option API 不仅仅给主题和插件开发者用…

asp.net core根据用户权限控制页面元素的显示

asp.net core根据用户权限控制页面元素的显示 Intro 在 web 应用中我们经常需要根据用户的不同允许用户访问不同的资源&#xff0c;显示不同的内容&#xff0c;之前做了一个 AccessControlHelper 的项目&#xff0c;就是解决这个问题的。 asp.net core 支持 TagHelper 和 基于 …

Please let us know in case of any issues

Please let us know in case of any issues转载于:https://www.cnblogs.com/zhangchenliang/archive/2010/05/18/1738117.html

Java面向对象(二)

source:http://blog.java1234.com/index.html?typeId1 Java类的继承 1&#xff0c;继承定义以及基本使用 定义&#xff1a;子类能够继承父类的属性和方法&#xff1b; 注意点&#xff1a;Java中只支持单继承&#xff1b; 私有方法不能继承&#xff1b; 2&#xff0c;方法重写 …

游戏通讯方式

农药自从上线以来&#xff0c;依靠着强大的产品力以及腾讯的运营能力&#xff0c;在游戏市场上表现可谓是风生水起&#xff0c;根据第三方的调研数据显示&#xff0c;《王者荣耀》渗透率达到22.3%&#xff0c;用户规模达到2.01亿人&#xff0c;每日的日活跃用户&#xff08;DAU…

小小c#算法题 - 3 - 字符串语句反转

题目&#xff1a;反转语句。 如I love Beijing! 反转后输出 !Beijing love I 特点是指反转单词的顺序&#xff0c;其他字符&#xff08;这个可以自己指定&#xff09;不反转。且不能用内置函数&#xff0c;如Split和Substring。 分析&#xff1a;我们需要保证一个单词的字…

unity5.4.3p2里面的AssetBundle打包流程

unity5.4.3p2里面的AssetBundle打包流程&#xff0c;相比之前unity4.x的打包简单了许多&#xff0c;Unity4.X中打包的时候需要自己去管理依赖关系&#xff0c;各种BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies()&#xff0c;一不小心手一抖&…

静态查找表的实现

#ifndef SSTABLE_H #define SSTABLE_H#include <iostream> using namespace std;/************************************************************* SSTable&#xff1a;stastic search table 静态查找表的模板类实现 顺序存储结构 ************************************…

(转)javascript匿名函数

文章来源: http://hi.baidu.com/koen_li/blog/item/4b14e4fc0c9b140c08244d8c.html 匿名函数的写法 顾名思义&#xff0c;就是没有名字的函数&#xff08;⊙﹏⊙b汗&#xff09;。匿名函数通常用于javascript作用域的控制&#xff0c;可以有效的避免对全局变量的污染。常见的匿…

BZOJ3307 雨天的尾巴

题目链接&#xff1a;戳我 树上链修改->差分 每一个节点都开一个权值线段树&#xff0c;最后从下往上合并qwq 代码如下&#xff1a; #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> #define MA…

主成分分析(PCA)原理详解 2016/12/17 · IT技术 · 主成分分析, 数学 分享到: 21 原文出处: 中科春哥 一、PCA简介 1. 相关背景 主成分分析(Principa

主成分分析&#xff08;PCA&#xff09;原理详解 2016/12/17 IT技术 主成分分析, 数学 分享到&#xff1a;21原文出处&#xff1a; 中科春哥 一、PCA简介 1. 相关背景 主成分分析&#xff08;Principal Component Analysis&#xff0c;PCA&#xff09;&#xff0c; 是一种统…

1 Hadoop简介

1.1 什么是Hadoop 分布式计算平台 优点&#xff1a; 高可靠性 高扩展性 高效性 在各节点之间动态地移动数据&#xff0c;保证各个节点的动态平衡 高容错性 数据多副本&#xff1b;重新启动失败任务 Hadoop应用&#xff1a; Yahoo 广告系统Web搜索研究 Facebook 数据分…

Google Xpath Helper

Google Xpath Helper 下载方法&#xff1a; 1. 访问http://chrome-extension-downloader.com/ 2. 把https://chrome.google.com/webstore/detail/xpath-helper/hgimnogjllphhhkhlmebbmlgjoejdpjl拷贝到文本框里面&#xff0c;然后点击“Download Extention”按钮。 使用方法&am…

【Tensorflow】 Object_detection之训练PASCAL VOC数据集

参考&#xff1a;Running Locally 1、检查数据、config文件是否配置好 可参考之前博客&#xff1a; Tensorflow Object_detection之配置Training Pipeline Tensorflow Object_detection之准备数据生成TFRecord 2、训练模型 PIPELINE_CONFIG_PATH/data/zxx/models/research/date…

2 Hadoop的安装与配置

需要JDK、SSH 对于伪分布式&#xff0c;Hadoop会采取与集群相同的处理方式&#xff1a;按次序启动文件conf/slaves中记载的主机上的进程&#xff0c;只不过在伪分布式中Slave为localhost&#xff08;自身&#xff09;。 Hadoop从三个角度将主机划分为两种角色&#xff1a; 最…

局域网访问控制

访问局域网内其他机器可用如下方式&#xff1a; \\PC-name\d$\dir 或者 \\192.168.xxx.xxx\d$\dir d代表d盘 但前提是对方机器已经把本机用户设置为管理员账户转载于:https://www.cnblogs.com/jimmy-c/p/4116804.html

Unity3d 插值同步

文中大体的思路&#xff1a; A玩家 移动时&#xff0c;本机自行移动&#xff0c;并发送移动指令给服务端&#xff0c;假设移动是成功的&#xff0c;服务端同步其他客户端 B玩家&#xff0c;B玩家 中用一个队列 Queue 来装服务端来的移动指令&#xff0c;然后客户端在updata中做…

laravel数据库相关操作说明

输出原生sql: DB::table(users)->where([[name,,张三]])->toSql(); //输出sql为&#xff1a;select * from users where name?; DB::table(users)->where([[name,,张三]])->getQuery(); //输出sql为&#xff1a;select * from users where name张三; 运行原生sql查…

1 数据挖掘基础

1.1 什么是数据挖掘 从大量数据中挖掘出隐含的、未知的、对决策有潜在价值的关系、模式和趋势&#xff0c;并用这些知识和规则建立用于决策支持的模型&#xff0c;提供预测性决策支持的方法、工具和过程&#xff0c;这就是数据挖掘。 是统计学、数据库技术、人工智能技术的结…

R文件报错的原因

一般R文件报错&#xff0c;无非是资源文件错误&#xff0c;图片命名错误&#xff0c;但是编译都会报错&#xff0c;可以很快解决。但是前几天&#xff0c;引入一个第三方aar包后&#xff0c;项目编译正确&#xff0c;但是就是R文件报错&#xff0c;找不到R文件&#xff0c;整个…