一、介绍
PlayerPrefs和Prefab在Unity中完全不是一个东西,只是名字比较接近,不可以混淆。Prefab是我们在游戏创造过程中的物体模板;而PlayerPrefs相当于存小数据的本地小数据库。
二、Prefab(预制体)
Prefab是项目资源,放在Project窗口,可以将我们封装好的游戏物体做成模板。
把 Hierarchy 窗口做好的物体(模型、UI 面板、角色、子弹、弹窗)拖进 Project,就生成预制体。预制体保存这个物体的:位置、旋转、缩放、挂载的所有脚本、组件、参数、子物体结构。
作用
我们在场景里可以通过实例化的方式加载我们的预制体的克隆体Instantiate(prefab),如果修改了预制体源,则用到预制体的地方都会同步更新。比较适合我们重复出现的物体,例如:登录弹窗、Loading 画布、怪物、子弹、道具、按钮组合等
在Hierarchy层级面板里,Prefab实例名字是蓝色文字+蓝色立方体图标
在Inspector面板中可以对预制体进行全部应用
Revert All(全部还原)
把当前场景实例上所有覆盖修改全部扔掉,恢复成和 Project 里面原始预制体一模一样。
你在场景调的 Slider 大小、锚点,会直接变回预制体原版,刚才的改动作废。
Apply All(全部应用)
把场景实例上你做的所有修改,写进 Project 里的原始 .prefab 资源!
点完之后:Project 面板里的 Canvas_Loading 预制体模板就更新了。
以后所有其他场景里的 Canvas_Loading 预制实例,都会同步继承这次 Slider RectTransform 改动。
PlayerPrefs
是Unity 自带的轻量级本地持久化存储类,静态类。
它只负责保存少量基础类型数据:int、float、string。
持久化:游戏关闭,再打开,数据还在。
底层存储位置
Windows:注册表 HKEY_CURRENT_USER\Software\CompanyName\ProductNameAndroid:/data/data/包名/shared_prefs/下的 XML 文件
-iOS:plist 文件WebGL:浏览器本地存储
使用场景
- 记住账号 / 记住密码(⚠️注意:明文存储,不安全!正式项目密码不要直接存 PlayerPrefs)
- 音量设置、分辨率、开关选项
- 简单存档:关卡进度、最高分
对比
| 项目 | Prefab(预制体) | PlayerPrefs |
|---|---|---|
| 本质 | 游戏物体模板,项目资源 | 静态数据存储工具 |
| 保存内容 | GameObject、组件、UI、模型、子物体结构 | int/float/string 简单数据 |
| 存放位置 | 项目文件夹,打包进游戏资源 | 用户设备本地(注册表 /xml/plist) |
| 使用目的 | 动态生成游戏对象,复用 UI / 模型 | 本地持久化保存玩家配置、简单存档 |
| 编辑器可见 | Project 面板可以直接看到资源 | 编辑器看不到,运行后才生成本地数据 |
| 能不能实例化物体 | ✅ Instantiate 生成物体 | ❌ 完全不能生成任何物体 |
| 能不能存账号分数 | ❌ 不可以 | ✅ 适合少量简单数据(密码需加密) |
本专栏记录Unity新手小白的学习成长之路,愿和大家一同钻研、共同进步。文章若有疏漏或错误,欢迎各位大佬在评论区指正,我会及时勘误优化。觉得内容对你有帮助,不妨点个关注,后续持续更新Unity实用干货!本文部分内容由 AI 辅助整理生成