精华内容
下载资源
问答
  • Unity读取内部、外部资源详解

    千次阅读 2017-04-26 11:06:00
    Unity读取内部、外部资源详解unity读取资源大概分为两部分:一部分为内部资源,什么是内部资源,就是导入unity中的资源,我们称之为Asset,这部分资源unity有现成的管理方法。另外一部分是外部资源,没有导入unity,...

    Unity读取内部、外部资源详解

    unity读取资源大概分为两部分:一部分为内部资源,什么是内部资源,就是导入unity中的资源,我们称之为Asset,这部分资源unity有现成的管理方法。另外一部分是外部资源,没有导入unity,也不是打包的AssetBundle资源,比方说就是一个txt、png、lua等资源,需要自己去实现读取以及资源的管理。下面具体介绍:

    内部资源

    先说下个平台路径问题:

    1. 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             可读可写
      

      dataPath是app程序包安装路径,app本身就在这里,此目录是只读的。streamingAssetsPath是dataPath下的Raw目录。

      app的独立数据存储目录下有三个文件夹:Documents,Library和tmp。

      Documents目录,存储需要长期保存的数据,如热更新内容,iCloud会自动备份此目录。

      Library目录,这个目录下有两个子目录,Caches和Preferences。
          Caches是一个相对临时的目录,适合存放下载缓存的临时文件,空间不足时可能会被系统清除,Application.temporaryCachePath返回的就是此路径。我把热更新 的临时文件写在这里,等一个版本的所有内容更新完全后,再把内容转移到Documents目录。
          Preferences用于应用存储偏好设置,用NSUserDefaults读取或设置。

      tmp目录,临时目录,存放应用运行时临时使用的数据。

    2. Android

      Application.dataPath :  /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
      

      Android这几个路径读取权限和IOS一样,需要注意的就是Application.streamingAssetsPath目录是jar包协议,在unity中需要用www去加载文件,其他的路径可以直接用文件流去读取。

    3. Editor

      这个就不说了。。。通用的。。。
      

    关于资源的释放问题,已经有小伙伴详细的解答了,就不啰嗦了,点传送门。
    传送门

    外部资源

    再来说说外部资源,外部资源需要遵循ftp 、jar、http、https等协议,具体的拼接需要注意多一个或者少一个“/”的问题,然后用www去加载就行。读取外部资源大部分用到pc上,android、ios等还是扔到persistentDataPath 路径里。具体例子如下:

    public Texture2D LoadTexture2D(string path)
    {
          string dataPath = "file:///" + path; 
          WWW www = new WWW(dataPath);
            while (!www.isDone)   //同步等待,当然你可以采用协程,自己决定就好
            {
            }
            if (www.error != null)
                return null;
         Texture2D texture = new Texture2D(4, 4, TextureFormat.ARGB32, false); //初始大小随便设置,只要大于1就好,false是不开启mipamaps
         texture.LoadImage(www.bytes);
         //你可以设置一些Texture相关属性,www加载的texture2d是默认的属性
          texture.wrapMode = TextureWrapMode.Clamp;
          www.Dispose();  //断开连接,如果不断开的话,下次就会提示还在占用连接
          return texture;
    }
    
    
    需要注意的就是释放资源,直接用GameObject.DestroyImmediate(texture)或者GameObject.Destroy(texture),这样才能卸载掉内存,外部资源不是一个Asset,unity不会去帮你管理的,这时需要注意内存泄漏问题。

    资源释放传送门

    个人实践,如有错误欢迎留言交流。

    展开全文
  • spring 引入外部资源文件

    千次阅读 2018-09-16 17:26:27
    开发过程中,经常使用到*.properties资源文件,其实可以把它们放在项目之外的某个地方,方便统一管理,尤其是很多项目的时候。 贴代码: springmvc-config.xml <!--1、在spring配置文件中加入下面代码--&...

    开发过程中,经常使用到*.properties资源文件,其实可以把它们放在项目之外的某个地方,方便统一管理,尤其是很多项目的时候。
    贴代码:
    springmvc-config.xml

    <!--1、在spring配置文件中加入下面代码-->
    <context:property-placeholder file-encoding="utf-8"
                                  location="file:E:/test/test.properties"/>

    2、再新建一个类,专门存放这些属性
    AppProperties.java
    (如果不使用@Data @ToString,需要自行生成getter setter)

    package com.zcx.resource;
    
    import lombok.Data;
    import lombok.ToString;
    import org.springframework.beans.factory.annotation.Value;
    
    @Data
    @ToString
    public class AppProperties {
        @Value("${my.name}")
        private String name;
    }

    springmvc-config.xml

    <!--3、回到spring配置文件,定义刚才的类-->
    <bean id="appProperties" class="com.zcx.resource.AppProperties"/>

    然后就可以使用了
    MainController.java

    // 4、引入
    @Resource(name = "appProperties")
    private AppProperties appProperties;
    
    // 5、使用
    @RequestMapping("/printName")
    public void printName() {
        System.out.println(appProperties.getName());
    }
    展开全文
  • Unity载入外部数据的方法

    千次阅读 2018-09-17 19:14:31
    Unity载入外部数据的方法Step1:新建一个储存数据的文件Step2:关联数据文件Step3:将数据载入游戏Step4:读取数据 Step1:新建一个储存数据的文件 用txt格式保存,注意保存为UTF-8格式,不然Unity会识别不了 每...

    Step1:新建一个储存数据的文件

    用txt格式保存,注意保存为UTF-8格式,不然Unity会识别不了
    每一行为一个内容的数据,数据的字段以分割符分割开来。
    在这里插入图片描述

    Step2:关联数据文件

    先创建一个用来管理数据的脚本,然后在Unity中创建一个空的GameObject,然后将该脚本挂在这个GameObject上面
    在脚本中申明一个public变量

    	public TextAsset ItemManager; //TextAsset是一个txt文件资源的类
    

    然后将数据文件关联进去
    在这里插入图片描述

    Step3:将数据载入游戏

    private Dictionary<int,Item> itemDict = new Dictionary<int,Item>();  //申明一个字典用于存储数据
    
    private void Awake()  //入口
        {
            _instance = this;
            readItemInfoList();
        }
    
    private void readItemInfoList()
    {
    	string text = itemInfoList.text; //读取数据文件中的所有内容
    	string[] strArray = text.split('/n')  //以换行符为标记,将每一行分割开来,储存到数组中
    	foreach ( string str in strArray)  //对每一行的内容进行遍历
    	{
    		Item item = new Item();   //创建数据生成的对象
    		string[] proArray = str.split(',');  //以分割符将每一行的内容按字段分割,并储存
    		
    		//将所有的字段都赋好值
    		int id = int.Parse(proArray[0]);  //如果是数字,则要进行格式转换
    		string name = proArray[1];
    		...  
    		
    		//进行对象的赋值逻辑
    		item.id = id;
    		item.name = name;
    		... 
    		
    		//将对象以id为key,存入字典中
    		itemDirt.Add(id,item);
    	}
    

    Step4:读取数据

    创建一个读取数据的方法

    public Item getItemById(int id)
        {
            Item item;
            itemDict.TryGetValue(id, out item);
            return item;
        }
    
    展开全文
  • Unity 资源管理插件

    千次阅读 2016-11-03 18:08:37
    之所以写这个插件呢,就是为了方便整理项目中的资源文件,我记得之前好像也用了这么一个插件,但是也没去找,还是自己动手写一个吧,需要什么功能就看自己的需求。 在项目的过程中呢,已经写了一个插件来管理材质,...

    之所以写这个插件呢,就是为了方便整理项目中的资源文件,我记得之前好像也用了这么一个插件,但是也没去找,还是自己动手写一个吧,需要什么功能就看自己的需求。

    在项目的过程中呢,已经写了一个插件来管理材质,但是跟随模型导入的图片却越来越多,也是自己跟美术沟通不到位,导致根本没办法保证图片的命名规则或者是否有重复的图片,再加上不断的删除或者更新模型,项目中一些无用的图片也堆积了不少。我尝试了自己手动整理,但是没有命名规则的图片和一些靠缩略图甚至无法分辨是不是一样的图片,这样的工作,就相当无力了。


    于是呢,就完成了这么一个插件:

    1.点击Organize Resources/Editor Window打开插件,点击未使用资源按钮,这里就会罗列出Assets文件夹里所有未被引用的资源,当然当前未被引用肯定不代表他完全没用,还是得靠自己确认然后手动删除


    2.点击全部资源,他就会输出所有的文件,并可以通过按钮输出他的GUID、应用和被引用的其他Assets路径,这里主要理清一些资源的关联关系


    3.点击重复资源按钮,就可以分类显示当前重复有哪些文件,这里的文件重复判断后面有具体介绍,点击合并按钮,就可以清除掉多余的资源,如果其他本地资源引用了这个文件,合并的文件也会自动替换上去,不用担心其他文件引用会丢失


    这里New Material材质引用了fish 2图片,然后我在合并界面随便点一个fish后面的合并按钮


    然后,多余的图片已经被清除了,而本来引用fish 2的材质New Material,也变成了引用fish图片,这里就是我当前需要的主要功能



    上面的呢,是大概介绍了一些插件的功能,接下来就展示一下主要的功能代码:

    1.获取当前Object引用了其他哪些Object,这里在unity是有接口的,返回的就是引用了其他的Object的路径:

    string[] _OtherPaths = AssetDatabase.GetDependencies(_PathValue);
    2.获取当前Object被其他那些Object引用了,说着感觉有点绕,不过功能也就是根据上面的反正写一个查找功能,获取其他Obejc的引用路径,再与当前的的Object匹配,这里的主要判断依据靠的是Object的GUID

    #region 获取其他引用Assets的路径
        string[] GetUseAssetPaths(string _AssetPath)
        {
            List<string> _AssetPaths = new List<string>();
            //使用GUID作为判断标准
            string _AssetGUID = AssetDatabase.AssetPathToGUID(_AssetPath);
            //遍历所有Assets
            for (int i = 0; i < _AllAssetsPaths.Count; i++)
            {
                if (_AllAssetsPaths[i] == _AssetPath)
                    continue;
    
                string[] _OtherPaths = AssetDatabase.GetDependencies(_AllAssetsPaths[i]);
                if (_OtherPaths.Length > 1)
                {
                    for (int j = 0; j < _OtherPaths.Length; j++)
                    {
                        string _OtherGUID = AssetDatabase.AssetPathToGUID(_OtherPaths[j]);
                        if (_AssetGUID == _OtherGUID)
                        {
                            _AssetPaths.Add(_AllAssetsPaths[i]);
                        }
                    }
                }
            }
            return _AssetPaths.ToArray();
        }
        #endregion
    3.获取相同的文件,开始使用正常的文件MD5值的验证,发现了一个问题,就是对于外部资源(从外面导入的资源,比如Texture、fbx)的验证是正常的,但是对于unity内部资源(在unity内部创建的文件,比如prefab、material)就不对了,后来读取内部资源的Text发现,他在内部有Object的名称,而Unity里的文件又不能重名,于是文件就不一样了,后来我就直接将他有名称的那行数据先删掉再来获取MD5值,才成功判断相同文件

    获取相同文件

    string[] GetSameFilePaths(string _PathValue)
        {
            List<string> _AssetPaths = new List<string>();
    
            string _AssetMD5 = GetFileMD5(_PathValue);
            //遍历所有Assets
            for (int i = 0; i < _AllAssetsPaths.Count; i++)
            {
                if (_AllAssetsPaths[i] == _PathValue)
                    continue;
                    if (_AssetMD5 == GetFileMD5(_AllAssetsPaths[i]))
                        _AssetPaths.Add(_AllAssetsPaths[i]);
    
            }
            return _AssetPaths.ToArray();
        }
    获取文件的MD5值

    #region 获取文件的MD5值
        string GetFileMD5(string _PathValue)
        {
            //判断是否为本地资源   因为本地文件里有文件名称 但是在资源名称又不能重复  于是需要去掉名称 来检测md5值
            Object _ObejctValue = AssetDatabase.LoadAssetAtPath<Object>(_PathValue);
            bool _isNative =AssetDatabase.IsNativeAsset(_ObejctValue);
            string _FileMD5 = "";
            string _TemPath = Application.dataPath.Replace("Assets", "");
    
            if (_isNative)
            {
                string _TempFileText = File.ReadAllText(_TemPath + _PathValue).Replace("m_Name: " + _ObejctValue.name,"");
            
                System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
                //将字符串转换为字节数组  
                byte[] fromData = System.Text.Encoding.Unicode.GetBytes(_TempFileText);
                //计算字节数组的哈希值  
                byte[] toData = md5.ComputeHash(fromData);
                _FileMD5 = "";
                for (int i = 0; i < toData.Length; i++)
                {
                    _FileMD5 += toData[i].ToString("x2");
                }
            }
            else
            {
                try
                {
    
                    FileStream fs = new FileStream(_TemPath + _PathValue, FileMode.Open);
    
                    System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
                    byte[] retVal = md5.ComputeHash(fs);
                    fs.Close();
                    _FileMD5 = "";
                    for (int i = 0; i < retVal.Length; i++)
                    {
                        _FileMD5 += retVal[i].ToString("x2");
                    }
                }
                catch (System.Exception ex)
                {
                    Debug.Log(ex);
                }
            }
            return _FileMD5;
        }
        #endregion
    4.合并时,当前文件替换掉其他被清除的文件,这里也是比较简单的,其他Object也是通过文件的GUID来引用文件,这里主要将他的GUID替换掉就可以

     #region 合并
        void OnRepeatMerge(string _PathValue,List<string> _ListValue)
        {
            string _FixedGUID= AssetDatabase.AssetPathToGUID(_PathValue);
            string _AssetsPath = Application.dataPath.Replace("Assets", "");
    
            for (int i = 0; i < _ListValue.Count; i++)
            {
                if (_PathValue == _ListValue[i])
                    continue;
                string[] _OtherPaths = GetUseAssetPaths(_ListValue[i]);
                
                bool _isOtherNative = true;
                string _OldGUI = AssetDatabase.AssetPathToGUID(_ListValue[i]);
                for (int j = 0; j < _OtherPaths.Length; j++)
                {
                    Object _OtherUseAsset = AssetDatabase.LoadAssetAtPath<Object>(_OtherPaths[j]);
                    if (AssetDatabase.IsNativeAsset(_OtherUseAsset))
                    {
                        string _RealAllText = File.ReadAllText(_AssetsPath+ _OtherPaths[j]).Replace(_OldGUI,_FixedGUID);
                        File.WriteAllText(_AssetsPath + _OtherPaths[j], _RealAllText);
                    }
                    else
                        _isOtherNative = false;
                }
                //如果没有外部资源引用他 就删除
                if (_isOtherNative)
                {
                    AssetDatabase.DeleteAsset(_ListValue[i]);
                    _ListValue.RemoveAt(i);
                    i--;
                }
            }
            AssetDatabase.Refresh();
            OnRepeatClick();
        }
        #endregion

    5.最后总结,在相对较大的项目中,因为会遍历所有的文件,插件的反应速度就不那么尽如人意,想想也不会时时来整理资源,所以也暂时忽略掉了,然后,插件的功能也会在后面慢慢完善

    工程链接:https://github.com/coding2233/OrganizeResources


    展开全文
  • springboot对外部静态资源文件的处理

    千次阅读 2019-05-22 17:53:07
    springboot对外部资源文件的处理主要分为2部分,存和取,通过查看官方文件和看博客踩了坑之后终于搞定了,特此记录。 存方面倒还简单,这里贴上一个获取微信临时素材并保存的方法 /** * @功能 下载临时素材接口 ...
  • 人力资源管理软件(完全免费)

    千次下载 热门讨论 2011-03-08 11:36:20
    人力资源管理软件功能介绍 本人力资源软件包含人事档案管理 本人力资源软件包含工资管理 本人力资源软件包含考勤管理 本人力资源软件包含绩效管理 本人力资源软件包含用户管理 本人力资源软件软件界面美观,...
  • 第9章 项目人力资源管理9.1 规划人力资源管理规划人力资源管理是识别和记录项目角色、职责、所需技能、报告关系,并编制人员配备管理计划的过程。本过程的主要作用是,建立项目角色与职责、项目组织图,以及包含人员...
  • WPF 资源管理器 Explorer

    热门讨论 2013-12-09 13:48:48
    最近项目中有个功能是读取外部设备的中的文件,同时由于项目样式限制,因此需要需要简单实现一个Window资源管理器功能。 由于为了接下来工作更好地完善功能,因此先一步做了一个DEMO用于参照和不断的修正。之所以贴...
  • wildfly 21的配置文件和资源管理

    万次阅读 2020-12-31 19:49:48
    在上一篇文章我们介绍了wildfly 21的基本使用和管理界面。今天我们将会详细讲解一下wildfly的配置文件和资源管理
  • Unity手游框架之 资源管理

    千次阅读 2017-02-17 09:51:08
    Unity手游框架之 资源管理引子资源管理是做什么用的,让我们先来看一段代码public void SetHeroInfo(HeroInfo heroInfo) { GetControls(); int heroResId = heroInfo.Id & 0xffff; HeroTableData heroTableData =...
  • PMP项目管理-项目人力资源管理(5)

    千次阅读 2019-05-30 15:54:54
    项目人力资源管理包括组织、管理与领导项目团队的各个过程。 全员尽早地参与项目规划与决策 项目团队管理:也成为项目核心团队、执行团队或领导团队 两步组建:PM被任命后,行程核心团队;项目管理计划被批准后,...
  • 项目资源管理分为五块: A. Common:自定义库和数据; B. func_keywords & GUI_keywords:关键字; C. Library:外部库; D. share_resourse:共享的公共资源; E. Tools:小工具。
  • project2016资源管理

    千次阅读 2019-03-20 17:25:54
    在学习过程中我们会感受到project的一系列操作真的很是方便,今天给大家介绍一下project2016中的资源管理部分 (1) 创建资源列表、资源分配,成本分配的步骤和结果 创建资源列表: 打开资源工作表的方法方法一:...
  • 使用解决方案资源管理

    千次阅读 2017-03-05 15:10:43
    解决方案资源管理器使您可以在解决方案或项目中查看项并执行项管理任务。它还允许您使用 Visual Studio 编辑器在解决方案或项目上下文的外部处理文件。 “解决方案资源管理器”是集成开发环境 (IDE) 中包含您的解决...
  • 一、HAWQ如何管理资源 HAWQ使用多种机制管理CPU、内存、I/O、文件句柄等系统资源,包括全局资源管理、资源队列、强制资源使用限额等。1. 全局资源管理 Hadoop通常使用YARN全局管理资源。YARN是一个通用的资源管理...
  • 操作系统的资源管理

    千次阅读 2018-08-02 22:11:34
    操作系统的资源管理 1、目的 首先,物理资源有限而竞争使用资源的应用程序众多,必须合理地解决物理资源数量不足、合理分配资源等问题; 其次,物理资源的硬件实现非常复杂,用户几乎不可能直接使用,只能借助...
  • Yarn的资源管理机制

    千次阅读 2019-07-20 16:53:20
    资源调度器是Yarn的核心组件之一,它是ResourceManager中的一个组件,负责整个集群资源管理和分配。 ResourceManager要处理的各种事件: ResourceManager本质上是一个事件处理器,处理来自外部的各种...
  • c#.net 中的类方法前加上internal,表示仅仅是本程序集中的对象可以访问,而其他程序集中的对象不能访问。...在被测试程序集中,可以找到AssemblyInfo.cs文件(vs中在解决方案资源管理器的Properties节点下),...
  • 过去,在经济发展中,我们不断强调的是“科技是第一生产力。”随着互联网的迅速普及和发展... 借助区块链去中心化、不可篡改、溯源清晰等特性,区块链将人力资源管理模式带到了新高度。“区块链+人力资源”组合模式...
  • 如题,可以在浏览器打开,但是无法在资源管理器打开。虽然这不会影响文件的浏览与下载,但这样就无法进行上传操作了。 无法在资源管理器打开FTP站点 网上的解决方案基本是关闭被动模式,强制使用主动模式,我没有...
  • 管理onedrive与外部用户的共享

    千次阅读 2017-03-17 16:09:49
    打开或关闭外部共享 启用外部共享... 启用外部共享时,用户必须在访问内部资源前经过身份验证(通过登录)。 转到“管理”>“服务设置”>“网站和文档共享”。 执行下列操作之一: 打开外部共享 关闭外部共享 ...
  • [Java 8] (6) Lambda与资源管理

    千次阅读 2014-10-26 11:33:03
    资源处理 Java本身自带了垃圾回收...对于外部资源(External Resource),如数据库连接,文件句柄,套接字等资源,还是需要在程序中进行显式回收的。 使用Lambda表达式可以实现一种叫做Execute Around的模式,用来
  • Unity资源管理(一)

    千次阅读 2018-12-17 16:51:22
    序:之前有接做过打包的工作,但是一直也没有整理下来,现在整理一下资源管理相关的顺便整理一下吧。 Resources:Assets目录下面新建Resources文件夹,其中的所有资源,不论是否被场景用到,都会被打包到游戏中。 ...
  • 外部访问k8s 里面pod的方式方法

    千次阅读 2019-06-10 19:19:41
    https://www.cnblogs.com/jinanxiaolaohu/p/9472496.html ... 从外部访问Kubernetes中的Pod 看完木记住... ingress的一直没实操.. 今天搞一下. 你需要知道的...
  • 在牛客网上刷题: 外部碎片( External Fragmentation )最严重的存储管理方式是() A、固定分区; B、可变分区; C、分页; D、分段。答案为B,并不明白,就整理了一下大牛的总结~ 感谢博主: ...
  • 设置mysql允许外部IP连接的解决方法

    千次阅读 2013-12-12 14:31:18
    mysql默认情况下,只允许localhost连接,如果需要外部IP连接到mysql,需要向mysql数据库里的“user”表里添加相关授权。  例如:让newuser用户使用newpwd密码从IP:192.168.1.3主机链接到mysql服务器     具体...
  • HR必读的十本书籍推荐,身为人力资源管理者必看哦,你都看过哪几本呢? 1、《人力资源管理必读12篇》 推荐理由:本人最喜欢的一本人力资源管理方面的书籍,其他平台无售,只能从其官网购买,地址自已百度。 ...
  • 使用 Electron 打开外部链接或文件管理器 此系列文章的应用示例已发布于 GitHub: electron-api-demos-Zh_CN. 可以 Clone 或下载后运行查看. 欢迎 Star . Electron 中的 shell 模块允许您访问某些本地元素, 如文件...
  • 第九章 项目资源管理 项目资源管理包括识别、获取和管理所需资源以完成项目的各个过程。 规划资源管理: 1、定义:定义如何估算、获取、管理和利用团队以及实物资源。 2、规划资源管理的工具:数据表现(层级...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 389,872
精华内容 155,948
关键字:

外部资源管理方法