【Unity】读写ProjectSettings、UserSettings、Library文件夹中的文件

news2025/1/22 19:01:25

【Unity】读写ProjectSettings、UserSettings、Library文件夹中的文件

AssetDatabase 类提供的 LoadAssetAtPath 方法和 CreateAsset 方法只能读写Assets、Packages文件夹中的资产,如果想要读写其他文件夹(ProjectSettings、UserSettings、Library等)中的资产,需要使用
UnityEditorInternal.InternalEditorUtility 类。

Folders

方法说明

  • Object[] LoadSerializedFileAndForget(string path)
    • 从指定路径加载资产
    • path 参数:相对于工程根目录的加载路径,带扩展名,例如 ProjectSettings/MySettings.asset
    • 返回值:加载到的资产数组
  • void SaveToSerializedFileAndForget(Object[] obj, string path, bool allowTextSerialization)
    • 向指定路径存储资产
    • obj 参数:要存储的资产数组
    • path 参数:存储路径
    • allowTextSerialization 参数:是否以文本形式存储

示例

该示例在 ProjectSettings 文件夹中创建了一个名为 MySettings.asset 的配置文件,并在菜单栏中添加了一个菜单项 Tests/Project Settings Demo 来进行读写测试。

注意:示例中的创建的资产只能在Editor中读写,不可用于非Editor环境。

ProjectSettings 文件夹中的配置文件,通常需要实现一个对应的 SettingsProvider 。

MySettings

using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
using UnityEngine.Assertions;

// See also: https://docs.unity3d.com/ScriptReference/SettingsProvider.html 
public class MySettings : ScriptableObject
{
    #region Test

    [MenuItem("Tests/Project Settings Demo")]
    public static void TestSave()
    {
        var mySettings = MySettings.Instance;
        var data = mySettings.data;
        var newData = data + 1;
        var save = EditorUtility.DisplayDialog("Test Project Settings Demo",
            $"Old data: {data}, new data: {newData}.", "Save", "Cancel");
        if (save)
        {
            mySettings.data += 1;
            mySettings.Save();
        }
    }

    #endregion

    #region Singleton

    public const string AssetPath = "ProjectSettings/MySettings.asset";
    private static MySettings s_instance;

    public static MySettings Instance
    {
        get
        {
            if (!s_instance) CreateAndLoad();
            return s_instance;
        }
    }

    private static void CreateAndLoad()
    {
        Assert.IsTrue(!s_instance);

        // Load
        var files = InternalEditorUtility.LoadSerializedFileAndForget(AssetPath);
        if (files.Length != 0)
        {
            s_instance = (MySettings)files[0];
        }

        // Create
        if (!s_instance)
        {
            s_instance = CreateInstance<MySettings>();
            EditorUtility.SetDirty(s_instance);
            s_instance.Save();
        }
    }

    #endregion


    // Put your data here
    public int data;


    public MySettings()
    {
        if (s_instance)
        {
            Debug.LogError($"{nameof(MySettings)} already exists. Did you query the singleton in a constructor?");
        }
    }

    public void Save()
    {
        if (!s_instance)
        {
            Debug.LogError($"Cannot save {nameof(MySettings)}: no instance!");
            return;
        }

        InternalEditorUtility.SaveToSerializedFileAndForget(new[] { s_instance }, AssetPath, true);
    }
}

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

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

相关文章

【运筹优化】元启发式算法详解:模拟退火算法(Simulated Annealing,SA)+ 案例讲解代码实战

文章目录 一、介绍二、基础知识2.1 局部搜索(或蒙特卡罗)算法2.2 Metropolis 算法2.3 模拟退火算法 三、原理3.1 Statistical Equilibrium 统计平衡3.2 Asymptotic Convergence 渐近收敛 四、实际问题4.1 Finite-Time Approximation 有限时间近似4.2 Geometric Cooling 几何冷却…

区块元素和超连结

DIV (区块元素) <div>元素&#xff08;HTML 文件区块元素&#xff09;是无标签语意的容器元素&#xff0c;虽然它不代表任何意义&#xff0c;却是使用最多的标签之一&#xff0c;主要用来把相似或者被划分为同一区块的内容包在同个div 内&#xff0c;以便后续添加css 样…

【MyBatis】一文教你学会使用MyBatis操作数据库

文章目录 1. MyBatis是什么&#xff1f;2. 为什么要学MaBatis&#xff1f;3. MyBatis环境搭建4. MyBatis的使用4.1 简单示例4.2 获取动态参数4.2.1 ${xxx}获取动态参数4.2.2 #{xxx}获取动态参数4.2.3 #{xxx}与${xxx}获取字符串类型数据4.2.4 sql注入问题4.2.5 模糊查询like4.2.…

动态规划-背包问题-背包九讲

title: 动态规划-背包问题 date: 2023-05-12 13:01:31 categories: Algorithm动态规划 tags:动态规划 01背包问题 题目 题目链接&#xff1a;https://www.acwing.com/problem/content/description/2/ 有 N N N 件物品和一个容量是 V V V 的背包。每件物品只能使用一次。 …

数据分析05——往Pandas中导入数据

1、导入Excel&#xff1a; 注意这种方法可以导入xlsx和xls两种类型的数据读入的数据会以DataFrame的格式显示举例&#xff1a;df pd.read_excel(‘./data/demo_03.xlsx’)还可以导入excel文件中具体的某一个表格&#xff1a;pd.read_excel(‘./data/demo_03.xlsx’, sheet_na…

SD-MTSP:麻雀搜索算法SSA求解单仓库多旅行商问题(提供MATLAB代码,可以修改旅行商个数及起点)

一、单仓库多旅行商问题 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市的城市集…

postgresql源码学习(55)—— 列中的NULL值是如何存储和判断的?

问题来自 《PostgreSQL面试题集锦》学习与回答_Hehuyi_In的博客-CSDN博客 第11题 一、 NULL值存储位置 在pg元组头数据中&#xff0c;有一个t_bits数组&#xff0c;用于存储空值位图。当元组中没有null值的时候&#xff0c;t_bits可以被认为是空的&#xff0c;当元组有null值的…

javaweb学习 html+css基础1

1、学习路线 2、web网站的开发模式 课程安排 web 前端 前端学习内容 html和css的帮助网站 HTML 系列教程 (w3school.com.cn) html快速入门 使用VSCode开发工具&#xff0c;输入 &#xff01;enter&#xff0c;即可出现骨架。 ctrl/ 可以将文字转换为注释 右击一个页面…

【JavaEE】计网之IP协议+以太网+DNS

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 网络层重点协议——IP协议&#xff0c;在复杂的网络环境中确定一个合适的路径~ 本篇文章我们来讲解什么是 IP协议及以太网&#xff0c;在IP协议中&#xff0c;有 地址管理 和 路由选择 两个…

C++中基类和派生类的构造函数与析构函数的调用顺序分析

基类为B&#xff0c;派生类为C&#xff0c;直接上代码以及运行结果。 目录 思路分析 代码一 运行结果一 代码二&#xff1a;B(i)改为b(i) 运行结果二 代码三&#xff1a;加上B(i) 运行结果三 代码四&#xff1a;删掉C类定义的B对象b&#xff0c;删除b(i) 运行结果四 思路…

Linux使用全应用

一、CentOS安装Docker Docker CE 支持 64 位版本 CentOS 7&#xff0c;并且要求内核版本不低于 3.10&#xff0c; CentOS 7 满足最低内核的要求&#xff0c;所以我们在CentOS 7安装Docker。 基础命令 搜索镜像&#xff1a;docker search mysql 下载镜像&#xff1a;docker p…

[架构之路-197]-《软考-系统分析师》- 关键技术 - 问题分析阶段重要的四个任务

目录 前言&#xff1a; 一、信息系统/软件产品的问题分析概述 二、信息系统/软件产品的问题/痛点分析四步骤 步骤1、问题领域分析&#xff1a;研究遇到问题的业务领域&#xff08;诉求&#xff09; 步骤2、 领域问题和机会分析&#xff1a;分析业务领域的问题、痛点、难点…

计算机网络学习 一 (计算机网络体系结构)

计算机网络 基本概念 计算机网络是一个将分散的,具有独立功能的计算机系统. 简单来说,计算机网络就是一些互连的,自治的计算机系统的集合 分类 广义上:是一个资源共享的系统. 资源共享上: 1.目的–资源共享 2.组成单元–分布在不同地理位置的多台独立的"自治计算机"…

第十四届蓝桥杯青少组模拟赛Python真题 (2022年11月8日)

第十四届蓝桥杯青少组模拟赛Python真题 (2022年11月8日) 编程题 第 1 题 问答题 二进制位数 十进制整数2在十进制中是1位数&#xff0c;在二进制中对应10&#xff0c;是2位数。 十进制整数22在十进制中是2位数&#xff0c;在二进制中对应10110&#xff0c;是5位数。 请问十…

Linux高级---k8s之service服务

文章目录 一、service基本概念二、service类型三、service的使用1、实验环境准备2、ClusterIP类型的Service3、HeadLiness类型的Service4、NodePort类型的Service5、LoadBalancer类型的Service6、ExternalName类型的Service 一、service基本概念 在kubernetes中&#xff0c;pod…

【Java多线程编程】线程的六种状态

前言&#xff1a; 在我们进行多线程编程&#xff0c;脑海里会想到线程运行的状态到底是什么&#xff1f;因此我整理出这线程的状态这篇博文。线程的状态分为六种&#xff1a;新建状态&#xff08;NEW&#xff09;、就绪状态&#xff08;RUNNABLE&#xff09;、阻塞状态&#xf…

1-Linux环境安装JDK

Linux环境安装JDK 准备&#xff1a; ① Linux 环境 本文中Linux环境为 CentOS Linux 7 可使用以下命令查询 linux 系统版本&#xff1a; hostnamectl② 准备JDK包 进入官网 https://www.oracle.com/java/technologies/downloads/#java17下载对应jdk包 此处使用以前下载的旧…

Linux驱动编程(驱动程序基石)(下)

一、中断的线程化处理 复杂、耗时的事情&#xff0c;尽量使用内核线程来处理。上节视频介绍的工作队列用起来挺简单&#xff0c;但是它有一个缺点&#xff1a;工作队列中有多个 work&#xff0c;前一个 work 没处理完会影响后面的 work。解决方法有很多种&#xff0c;比如干脆…

String类的学习笔记(下):字符串拼接以及StringBuilder和StringBuffer的学习

本文介绍了String类对字符串进行拼接的方法 和拼接字符串的效率分析 以及能对字符串内容进行修改的StringBuilder和StringBuffer类其常用方法和区别 , 最后介绍了两个字符串经典面试题 StringBuilder和StringBuffer的学习 一.String类概括二.StringBuilder和StringBuffer1.字符…

是未来的超级计算机还是只是一场炒作?

随着科技的飞速发展和创新&#xff0c;量子计算技术逐渐成为了人们关注的热点话题。量子计算作为一种前沿的计算方式&#xff0c;具有超强的运算能力和突破性的创新潜力&#xff0c;因此备受瞩目。然而&#xff0c;随着各大公司和机构纷纷加入到这一领域的竞争中&#xff0c;一…