news 2026/4/23 15:25:22

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/4/16 20:21:12

HMI信息架构设计:四层金字塔模型——构建符合认知负荷的高效界面

在信息爆炸的现代工业现场&#xff0c;将成百上千个数据点杂乱地堆砌在HMI屏幕上&#xff0c;是对操作员认知能力的巨大挑战&#xff0c;尤其在压力下极易导致误判。优秀的HMI设计&#xff0c;本质是信息架构的设计。四层金字塔模型为此提供了一个经过验证的、符合人类认知规律…

作者头像 李华
网站建设 2026/4/23 13:10:33

导师严选2026 AI论文工具TOP8:继续教育必备测评

导师严选2026 AI论文工具TOP8&#xff1a;继续教育必备测评 2026年学术AI写作工具测评&#xff1a;精准匹配继续教育需求 在当前快速发展的科研环境中&#xff0c;学术写作已成为高校师生、研究人员等群体的核心任务之一。然而&#xff0c;面对繁重的论文撰写压力&#xff0c;传…

作者头像 李华
网站建设 2026/4/23 14:48:20

海关智慧监管空间智能平台专项技术方案——基于空间视频感知与统一空间智能底座的非侵入式监管路径

海关智慧监管空间智能平台专项技术方案——基于空间视频感知与统一空间智能底座的非侵入式监管路径建设单位&#xff1a;镜像视界&#xff08;浙江&#xff09;科技有限公司一、建设背景与监管挑战随着国际贸易规模扩大和跨境要素流动频率持续提升&#xff0c;海关监管对象呈现…

作者头像 李华
网站建设 2026/4/23 11:18:50

2026年最新论文降ai全攻略,教你如何快速实现aigc免费降重并降低ai率。

又到了论文开题季&#xff0c;很多同学发现&#xff0c;自己用AI辅助写完的论文&#xff0c;AIGC率高得吓人。明明只是润色&#xff0c;检测却显示“高风险AI生成”。面对这个论文降ai的难题&#xff0c;盲目手改往往收效甚微。 别慌。市面上已经有很多工具可以辅助降低ai率。今…

作者头像 李华
网站建设 2026/4/23 13:54:37

Flutter for OpenHarmony 实战:TextButton 文本按钮详解

Flutter for OpenHarmony 实战&#xff1a;TextButton 文本按钮详解 摘要&#xff1a;本文将深入探讨 Flutter 框架在 OpenHarmony 平台上 TextButton 控件的应用实践。作为 Flutter 中最常用的交互控件之一&#xff0c;TextButton 以其简洁的设计风格和灵活的定制能力成为构建…

作者头像 李华
网站建设 2026/4/23 14:01:03

(新卷,100分)-数大雁(JavaPythonJSC++C)

题目描述 一群大雁往南飞&#xff0c;给定一个字符串记录地面上的游客听到的大雁叫声&#xff0c;请给出叫声最少由几只大雁发出。 具体的: ​ 1.大雁发出的完整叫声为”quack“&#xff0c;因为有多只大雁同一时间嘎嘎作响&#xff0c;所以字符串中可能会混合多个”quack”…

作者头像 李华