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

news/2024/5/18 14:17:42 标签: 游戏程序

前言

        在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文件夹中的资源的,这个文件夹在打包后的应用中是不可写入的。


http://www.niftyadmin.cn/n/5433634.html

相关文章

MATLAB:拟合与插值

一、关于多项式的基本操作 若要求非线性方程的根&#xff0c;则采用fzero, fminbnd函数 二、多项式拟合 clc, clear x0:0.2:10; y0.25*x20*sin(x); plot(x,y,k.,MarkerSize,15) grid on; hold on [p1,s1,mu1]polyfit(x,y,3); %3阶多项式拟合 y1polyval(p1,x,s1,mu1); [p2,s…

【JAVA】JAVA方法的学习和创造

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不…

VUE3内置组件Transition的学习使用

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统RuoYi-Nbcio亿事达企业管理平台 gitee源代码地址 后端代码&#xff1a;…

《C++(四)--线程同步》

简介 利用条件变量实现线程同步&#xff1b; Example 读写变量同步&#xff1a; 写完变量后将标志位 ready 置为 true&#xff0c;读完变量后将ready 置为 false #include <iostream> #include <mutex> #include <condition_variable> #include <thre…

python--异常捕获+类的创建+类属性

异常处理 写法一 try: 可能会报错的代码 print(‘不报错执行’) except: print(‘报错的时候执行’) 写法二 try: # 可能报错的代码 print(‘不报错执行1’) except: print(‘报错的时候执行’) else: print(‘不报错执行2’) 写法三 try: # 可能报错的代码 print(‘不报错执行…

Prometheus 轻量化部署和使用

文章目录 说明Prometheus简介Grafana简介prometheus和Grafana的关系环境准备&#xff08;docker&#xff09;docker安装时间时区问题&#xff08;我的代码中&#xff09;dockers镜像加速和服务器时区设置 数据库准备(mysql、redis)mysql配置redis配置 Prometheus、grafana下载和…

【STM32定时器(一)内部时钟定时与外部时钟 TIM小总结】

STM32 TIM详解 TIM介绍定时器类型基本定时器通用定时器高级定时器常用名词时序图预分频时序计数器时序图 定时器中断配置图定时器定时 代码调试代码案例1代码案例2 TIM介绍 定时器&#xff08;Timer&#xff09;是微控制器中的一个重要模块&#xff0c;用于生成定时和延时信号…

Android 使用adb操作WiFi相关指令

没有系统原生设置应用又需要调试WiFi功能时&#xff0c;可以使用如下指令来验证WiFi相关功能 最常用的就是 svc wifi enable/disable&#xff0c;再使用wpa_supplicant/wpa_cli来验证&#xff0c;但对于AP功能就没办法验证了&#xff0c;其实Android有组很强大的shell指令集&a…