yaml是什么文件.SO是什么文件

YAML 文件是一种人类可读性高、易于理解的数据序列化格式文件,常用于配置文件、数据交换等场景。YAML 的全称递归地缩写为 "YAML Ain't a Markup Language"(YAML 不是一种标记语言),意在强调它关注数据结构而非文档标记。尽管名称中有“不是标记语言”的表述,YAML 实际上可以视为一种数据表示语言。

YAML 的设计特点包括:

1. **可读性强**:通过缩进(必须使用空格,不能使用制表符)来表示层次关系,使得文件结构清晰易读。
2. **简洁性**:相比 XML 等格式,YAML 更加简洁,减少了冗余的标签,使得内容更加突出。
3. **数据类型丰富**:支持字符串、布尔值、整数、浮点数、数组(列表)、哈希表(字典)、日期时间等多种数据类型。
4. **注释功能**:允许使用 `#` 符号进行单行注释,方便对配置进行解释说明。
5. **跨语言支持**:由于其简洁和通用性,许多编程语言都有解析和生成 YAML 文件的能力,便于不同系统间的数据交换。

YAML 文件广泛应用于软件配置、自动化脚本、持续集成/持续部署(CI/CD)管道配置、云服务配置等多个领域。

`.so` 文件是 Linux 和类 Unix 系统中的动态链接库(Dynamic Link Library),类似于 Windows 系统中的 `.dll` 文件。`.so` 是 "Shared Object" 的缩写,这些文件包含了编译好的代码和数据,可以被多个程序在运行时共享,从而实现了代码的复用和内存的节省。

以下是关于 `.so` 文件的一些关键点:
- **动态链接**:程序在编译时不需要将 `.so` 文件中的所有代码包含进来,而是在运行时由操作系统负责加载这些共享库,仅链接到实际所需的函数和数据。
- **效率与灵活性**:这种机制允许程序更小、运行更快,同时便于库的更新,因为只需替换共享库文件,无需重新编译链接依赖它的每一个程序。
- **语言无关性**:虽然它们经常是由 C 或 C++ 编写并编译产生的,但其他编程语言编写的代码也可以编译为 `.so` 文件供其他程序调用。
- **跨平台兼容性**:在 Android 系统中,`.so` 文件也用于支持原生代码,帮助应用实现特定硬件加速或兼容不同的处理器架构(如 ARM, x86)。
- **使用方式**:程序员通过链接器在编译时指定 `.so` 文件,或者在程序运行时通过动态加载函数(如 `dlopen`, `dlsym`)来使用其中的函数和数据。

总之,`.so` 文件是 Linux 环境中程序开发和执行的一个重要组成部分,对于提高程序性能、促进代码重用以及简化跨平台支持等方面具有重要作用。

`GameSave.save` 不是一个特殊类型的系统文件,它只是一个 **由你创建的 Unity ScriptableObject 资源文件**,其本质是 Unity 的 `.asset` 文件。 --- ### ✅ 什么是 `GameSave.save`? - 它是你基于 `SaveData` 类(继承自 `ScriptableObject`)在 Unity 编辑器中创建的一个 **自定义数据容器**。 - 文件扩展名 `.save` 是你自己命名的,Unity 实际上并不区分这个后缀;真正重要的是它的类型和内容。 - 在 Unity 中,这类文件以二进制或文本格式存储序列化数据,保存在项目的 `Assets/` 目录下。 #### 🧾 示例: 当你执行以下操作: > 右键 → Create → Game → Save Data > 然后重命名为 `GameSave.save` Unity 会生成一个名为 `GameSave.save` 的 **ScriptableObject 资源文件**,它的实际类型是 `SaveData`。 --- ## 🔍 内部结构(示例) 假设你的 `SaveData` 类如下: ```csharp [CreateAssetMenu(fileName = "GameSave", menuName = "Game/Save Data")] public class SaveData : ScriptableObject { public SerializableDictionary<string, int> levelToStars = new SerializableDictionary<string, int>(); } ``` 那么 `GameSave.save` 文件的内容可能是这样的(如果导出为 YAML 文本格式): ```yaml %YAML 1.1 %TAG !u! tag:unity3d.com,2011: --- !u!114 &11400000 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 0} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: abc123...} # 对应 SaveData.cs m_Name: GameSave levelToStars: keys: [Level1, Level2] values: [3, 2] ``` > 这个文件会被 Unity 自动解析并加载到游戏中。 --- ## 📁 文件位置与资源管理 - 存放路径:`Assets/SaveData/GameSave.save`(任意你选择的位置) - 构建时行为:作为资源打包进游戏(不会丢失) - 编辑器可见:可以在 Project 面板中直接查看、拖拽使用 --- ## 💡 它的作用是什么? | 功能 | 说明 | |------|------| | 数据持久化(开发阶段) | 在编辑器运行期间保存玩家进度(如星级) | | 跨场景共享数据 | 多个脚本可以引用同一个 `.save` 文件 | | 可视化配置 | 在 Inspector 中直接看到每个关卡的星星数量 | | 初始存档设计 | 可设置默认解锁状态、预设评分等 | --- ## ⚠️ 注意事项 | 重点 | 说明 | |------|------| | `.save` 后缀可自定义 | 可以叫 `Progress.asset`、`PlayerData.so` 等,推荐用 `.asset` 标准后缀 | | 仅限编辑器/构建内使用 | 不能被外部程序直接读取(除非导出 JSON) | | 修改需调用 `SetDirty` | 如果你在运行时修改了它,必须用 `EditorUtility.SetDirty()` 才能保存回磁盘 | | 不适合用户个性化存档 | 因为所有玩家共用一份文件(除非配合 `persistentDataPath` 写入外部文件) | --- ## ✅ 推荐命名规范 虽然你可以命名为 `GameSave.save`,但更标准的做法是: ```text GameSave.asset ← 推荐!Unity 默认使用 .asset 扩展名 PlayerProgress.asset LevelStats.asset ``` Unity 创建 ScriptableObject 时默认就是 `.asset`,比如: ```csharp [CreateAssetMenu(fileName = "GameSave", ...)] ``` 会自动创建 `GameSave.asset`。 --- ## 🛠 如何创建一个 `.asset` 文件? ### 步骤: 1. 确保有 `SaveData.cs` 并继承 `ScriptableObject` 2. 在类上方加上 `[CreateAssetMenu]` 属性 3. 在 Unity 编辑器中右键点击 Project 面板 4. 选择 `Create > Game > Save Data` 5. 命名为 `GameSave.asset` 6. 拖到需要的地方(如 `GameOverUI.saveData` 字段) --- ## ✅ 总结 > `GameSave.save` 是一个你手动创建的 **ScriptableObject 资源文件**,它是 Unity 项目中用来存储游戏数据(如星级、解锁状态)的一种便捷方式。 > 实际上它就是一个 `.asset` 文件,只是名字叫 `.save` 而已。你可以把它理解为“游戏存档模板”或“全局数据容器”。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值