当前位置: 首页 > news >正文

Unity如何让游戏程序读写资源文件?

前言

        在Unity中,分为开发环境和打包后环境。

        在开发环境中,你可以直接访问项目的文件系统,包括Assets文件夹中的所有文件。但是在打包后的环境中,你不能直接访问文件系统,因为所有的资源都被打包到了一个或多个数据文件中。

   Resources.Load是Unity提供的一个API,它可以在运行时加载Resources文件夹中的资源。这个API在开发环境和打包后的环境中都可以使用。

        所以,如果你有一些资源需要在运行时加载,你应该将这些资源放在Resources文件夹中,然后使用Resources.Load来加载它们。这样,无论你是在开发环境还是在打包后的环境中,都可以正确地加载这些资源。

常见的存放数据的路径

        Application.dataPathApplication.persistentDataPath在Unity中有不同的用途和使用场景。

Application.dataPath

        在编辑器中,这将返回你的项目的Assets文件夹的路径,开发环境时比较好用。

        在开发环境下,你可能会使用Application.dataPath来读取你的项目中的数据文件。

Application.persistentDataPath

  Application.persistentDataPath返回的是一个可以用于存储持久化数据的路径。这个路径在不同的平台上有不同的位置,但是它总是指向一个可以安全地写入数据的位置。这个路径通常用于存储用户生成的数据,如保存文件、用户设置等。

  在打包后的环境下,你可能会使用Application.persistentDataPath来存储用户生成的数据。

加载资源文件的方法

        请注意,这些文件在打包后将会被包含在你的游戏数据中,而不是在文件系统中的某个位置。这意味着你不能直接通过文件路径来访问这些文件,而是需要使用Unity提供的API来访问。

        例如,如果你有一个名为myData.txt的文件,你可以将它放在Assets/Resources文件夹中,然后通过以下代码来访问它:

TextAsset myData = Resources.Load<TextAsset>("myData");
string myDataText = myData.text;

举个栗子:加载csv文件

string filename = "文件名不带后缀"
TextAsset csvData = Resources.Load<TextAsset>(filename);
using (var reader = new StringReader(csvData.text))
{string line;while ((line = reader.ReadLine()) != null){Debug.Log(line);}
}

注意事项

Application.persistentDataPath

        Application.persistentDataPath返回的路径取决于你的应用运行的平台。以下是一些常见平台的Application.persistentDataPath的位置:

  • WindowsC:\Users\<username>\AppData\LocalLow\<companyname>\<productname>
  • Mac OS/Users/<username>/Library/Application Support/<companyname>/<productname>
  • iOS<Application>/Library/Application Support
  • Android/data/data/<packagename>/files

        在这些路径中,<username><companyname><productname><packagename>是你的应用的具体信息。

        需要注意的是,Application.persistentDataPath返回的路径是可以写入的,你可以在这个路径下存储用户生成的数据,如保存文件、用户设置等。而Resources.Load是用来加载Assets/Resources文件夹中的资源的,这个文件夹在打包后的应用中是不可写入的。

相关文章:

  • MySQL模块---更新和删除数据
  • 【计算机网络】https的工作原理以及和http的区别
  • Leet code 179 最大数
  • 【PyTorch】基础学习:在Pycharm等IDE中打印或查看Pytorch版本信息
  • 白话模电:3.三极管(考研面试与笔试常考问题)
  • 【目标检测经典算法】R-CNN、Fast R-CNN和Faster R-CNN详解系列一:R-CNN图文详解
  • Django验证码(二)
  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的自动驾驶目标检测系统详解(深度学习+Python代码+PySide6界面+训练数据集)
  • GAMES104-现代游戏引擎 1
  • 用 Visual Studio 调试器中查看内存中图像
  • LeetCode 395. 至少有K个重复字符的最长子串
  • 在Linux/Ubuntu/Debian中使用windows应用程序/软件
  • 实战:django项目环境搭建(pycharm,virtualBox)
  • Jenkins: 配置自动化发布脚本
  • 蓝桥杯2022年第十三届省赛真题-GCD
  • Hibernate最全面试题
  • JavaScript创建对象的四种方式
  • Linux快速复制或删除大量小文件
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • passportjs 源码分析
  • Webpack 4 学习01(基础配置)
  • 飞驰在Mesos的涡轮引擎上
  • 计算机常识 - 收藏集 - 掘金
  • 如何选择开源的机器学习框架?
  • 三分钟教你同步 Visual Studio Code 设置
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 运行时添加log4j2的appender
  • 正则表达式-基础知识Review
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • !!java web学习笔记(一到五)
  • #define,static,const,三种常量的区别
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (c语言)strcpy函数用法
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (pojstep1.1.2)2654(直叙式模拟)
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (实战篇)如何缓存数据
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .aanva
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .net FrameWork简介,数组,枚举
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @AliasFor注解
  • @Autowired注解的实现原理
  • @RequestParam,@RequestBody和@PathVariable 区别
  • [20160807][系统设计的三次迭代]
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大