news 2026/6/26 8:00:18

1.6 ScriptableObject

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.6 ScriptableObject

1.ScritableObject简介


1.ScritableObject简介

ScritableObject是继承自UnityEngine.Object的特殊基类,用于保存数据;它是纯数据 文件,独立于GameObject存在,没有生命周期函数,只负责存储数据(数值,素材引用,配置 等),数据保存在.asset格式的资源文件中,可在Inspector面板直接编辑
usingUnityEngine;// [CreateAssetMenu] 让你能在Project窗口右键创建该资源(新手首选)[CreateAssetMenu(fileName="NewCharacterConfig",// 默认文件名menuName="MyGame/Character Config"// 右键菜单路径(MyGame是自定义分类))]publicclassCharacterConfig:ScriptableObject{// 可序列化的字段(public或加[SerializeField]),会在Inspector显示[Header("基础属性")]// 分组注释,方便阅读publicstringcharacterName;publicintmaxHP=100;publicfloatmoveSpeed=5f;[Header("战斗属性")]publicintattackDamage=10;publicfloatattackRange=2f;[Header("素材引用")]publicSpritecharacterIcon;// 引用贴图资源publicAudioClipattackSound;// 引用音频资源}

发布游戏的核心方案:将ScriptableObject的结构化数据序列化为 JSON 文件,保存到 Unity 的PersistentDataPath(唯一安全的运行时持久化路径);游戏启动时,再从 JSON 文件加载数据并覆盖回ScriptableObject实例
usingUnityEngine;usingSystem.IO;// 1. 定义与ScriptableObject数据结构一致的普通C#类(用于序列化,避免直接序列化ScriptableObject)[System.Serializable]publicclassGameDataSaveModel{publicintplayerLevel;publicintgold;publicfloatplayerHP;// 从ScriptableObject赋值到序列化模型publicstaticGameDataSaveModelFromScriptableObject(GameDatadata){returnnewGameDataSaveModel{playerLevel=data.playerLevel,gold=data.gold,playerHP=data.playerHP};}// 从序列化模型赋值回ScriptableObjectpublicvoidToScriptableObject(GameDatadata){data.playerLevel=this.playerLevel;data.gold=this.gold;data.playerHP=this.playerHP;}}// 2. 改造ScriptableObject,添加运行时保存/加载方法[CreateAssetMenu(fileName="GameData",menuName="MyGame/GameData")]publicclassGameData:ScriptableObject{publicintplayerLevel=1;publicintgold=1000;publicfloatplayerHP=100f;// 保存路径(PersistentDataPath:不同平台的持久化路径,打包后可读写)privatestringSavePath=>Path.Combine(Application.persistentDataPath,"GameDataSave.json");// 运行时保存数据到JSON文件(编辑器/打包后都可用)publicvoidSaveRuntimeData(){// 创建序列化模型并赋值GameDataSaveModelmodel=GameDataSaveModel.FromScriptableObject(this);// 序列化为JSON字符串(带格式化,方便查看)stringjson=JsonUtility.ToJson(model,true);// 写入文件(不存在则创建,存在则覆盖)File.WriteAllText(SavePath,json);Debug.Log($"运行时数据已保存到:{SavePath}");}// 运行时加载JSON数据到ScriptableObjectpublicvoidLoadRuntimeData(){// 检查文件是否存在if(!File.Exists(SavePath)){Debug.LogWarning("保存文件不存在,使用默认数据");return;}// 读取JSON字符串stringjson=File.ReadAllText(SavePath);// 反序列化为模型GameDataSaveModelmodel=JsonUtility.FromJson<GameDataSaveModel>(json);// 赋值回ScriptableObjectmodel.ToScriptableObject(this);Debug.Log($"已从{SavePath}加载数据:等级={playerLevel},金币={gold}");}}// 3. 测试脚本(挂载到启动场景的GameObject)publicclassGameDataManager:MonoBehaviour{publicGameDatagameData;// 拖拽赋值你的GameData.assetvoidStart(){// 游戏启动时自动加载保存的数据gameData.LoadRuntimeData();}voidUpdate(){// 按S键保存数据if(Input.GetKeyDown(KeyCode.S)){gameData.playerLevel+=1;gameData.gold+=500;gameData.playerHP-=10f;gameData.SaveRuntimeData();}// 按R键重置数据(测试用)if(Input.GetKeyDown(KeyCode.R)){gameData.playerLevel=1;gameData.gold=1000;gameData.playerHP=100f;gameData.SaveRuntimeData();Debug.Log("数据已重置并保存");}}}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 8:33:03

Docker 详解与部署微服务实战

Docker 详解与部署微服务实战 主讲老师&#xff1a;Fox 有道笔记地址链接&#xff1a;https://note.youdao.com/s/8eWHV1Jr 1. Docker详解 1.1 Docker简介 Docker 是一个开源的容器化平台&#xff0c;可以帮助开发者将应用程序和其依赖的环境打包成一个可移植、可部署的容器…

作者头像 李华
网站建设 2026/6/18 9:24:52

咱们今天聊点硬核的——用VB.NET直接操控三菱变频器。这玩意儿在工厂自动化里可是刚需,特别是需要精准控制电机转速的场景。废话不多说,直接上干货

上位机控制三菱变频器 DEMO &#xff08;VB.NET&#xff09;&#xff0c; &#xff08;可编辑上位机与三菱PLC&#xff0c;西门子PLC通讯&#xff0c; 数据采集&#xff0c;&#xff09;源码带详细注释。 本程序有详细步骤和超详细的中文注释&#xff0c;可以控制多台变频器&…

作者头像 李华
网站建设 2026/6/10 19:37:01

Flutter for OpenHarmony 实战:IconButton 图标按钮详解

Flutter for OpenHarmony 实战&#xff1a;IconButton 图标按钮详解 摘要 IconButton是Flutter框架中用于创建带有图标的交互式按钮的核心组件&#xff0c;广泛应用于导航栏、工具栏和操作菜单等场景。在OpenHarmony平台上&#xff0c;通过Flutter的跨平台能力&#xff0c;开…

作者头像 李华
网站建设 2026/6/24 3:38:06

_基于springboot的智能家居系统(11675)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/6/23 9:29:57

【完全免费】小丸工具箱超详细的视频体积压缩教程,从1G视频压缩到100M,几乎不损画质,完全免费,而且可以批量处理视频文件

——软件使用教程—— 小丸工具箱超详细的视频体积压缩教程&#xff0c;从1G视频压缩到100M——下载地址&#xff08;防止被拦截&#xff0c;请用浏览器打开&#xff09;—— 夸克地址&#xff1a; https://pan.dxlszyk.com/s/1jeou2e1k 多盘地址&#xff1a; https://www.…

作者头像 李华