Unity3D ScriptableObject使用详解
创作时间:
作者:
@小白创作中心
Unity3D ScriptableObject使用详解
引用
CSDN
1.
https://blog.csdn.net/2301_76984003/article/details/137741790
Unity3D中的ScriptableObject是一个非常实用的数据存储类,可以用来创建和管理游戏配置数据。本文将详细介绍如何使用ScriptableObject,包括创建、获取数据、使用序列化类组织数据结构,以及在简单游戏中应用配置表的方法。
创建ScriptableObject
要使用ScriptableObject,首先需要创建一个继承自ScriptableObject的类,并添加创建菜单的代码。以下是一个简单的示例:
using UnityEngine;
[CreateAssetMenu(fileName = "SOConfig", menuName = "SOConfig", order = 0)]
public class SOConfig : ScriptableObject
{
public string version;
}
创建数据文件后,可以在Unity编辑器中填写数据:
获取ScriptableObject数据
在其他脚本中,可以直接引用创建好的ScriptableObject数据文件。例如:
using UnityEngine;
public class SODemo : MonoBehaviour
{
public SOConfig config;
void Start()
{
Debug.Log($"version = {config.version}");
}
}
使用序列化类组织数据结构
除了在ScriptableObject中定义单一的字段,还可以使用类来组织数据结构。这个类需要打上[Serializable]
标签:
using System;
using UnityEngine;
[CreateAssetMenu(fileName = "SOConfig", menuName = "SOConfig", order = 0)]
public class SOConfig : ScriptableObject
{
public string version;
public ConfigData configData;
}
[Serializable]
public class ConfigData
{
public string name;
public string description;
}
简单游戏配置示例
对于一些简单的小游戏来说,使用ScriptableObject做配置表会比较简单快捷。例如,一个商店的商品列表:
using System;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(fileName = "SOShop", menuName = "SOShop", order = 1)]
public class SOShop : ScriptableObject
{
public List<SOShopItem> shopItems;
public SOShopItem GetItem(int id)
{
return shopItems.Find(x => x.id == id);
}
}
[Serializable]
public class SOShopItem
{
public string name;
public int id;
public string description;
public int price;
}
配置数据后,可以在其他脚本中使用这些配置:
using UnityEngine;
public class SODemo : MonoBehaviour
{
public SOConfig config;
public SOShop shop;
void Start()
{
for (int i = 0; i < shop.shopItems.Count; i++)
{
SOShopItem item = shop.shopItems[i];
Debug.Log($"name = {item.name} price = {item.price}");
}
}
}
动态修改配置
ScriptableObject文件中填写的数据可以在代码中赋值:
using UnityEngine;
public class SODemo : MonoBehaviour
{
public SOConfig config;
public SOShop shop;
void Start()
{
config.version = "1.0.1";
}
}
如果只想在运行时修改,不想覆盖旧值,可以让ScriptableObject创建实例:
using UnityEngine;
public class SODemo : MonoBehaviour
{
public SOConfig config;
public SOShop shop;
public SOConfig configInstance;
void Start()
{
configInstance = ScriptableObject.CreateInstance<SOConfig>();
configInstance.version = "1.0.2";
}
}
运行后,可以看到有一个ScriptableObject实例。双击查看实例数据,可以看到实例的version是1.0.2,而本地文件的version还是1.0.1。
热门推荐
李沁演绎《梦中的那片海》:佟晓梅的成长与坚守
《七夜雪》:一部令人失望的武侠爱情剧
农村自建房内装全攻略:从布局到装修,打造温馨舒适家
2024年空军招飞最新标准揭秘!
揭秘!空军勤务学院最新培训秘籍
秋冬养生正当时:红枣补益精血的科学指南
唐梁医生:一粥一方,轻松改善脾气问题
神龛佛龛财位,房子装修中的民俗文化与信仰体现
光伏投资回报率:持有者的核心关切与策略分析
南京必打卡特色零食地图:状元豆、泸溪河桃酥、梅花糕
泸溪河桃酥:一块酥饼里的南京味道
周杰伦歌曲中的古诗词意象
AI音乐创作:从技术原理到实际应用
麦莉·赛勒斯教你如何写出热门单曲!
从《向往的生活》到邓紫棋:诗歌助你写词不愁!
扬州火车站公交线路全攻略:16条线路详解及景点出行指南
详细介绍常见房车的分类,并探讨哪类房车最适合您的需求!
李沁《七夜雪》引争议:从昆曲传人到实力派的转型之路
白萝卜汤的正确做法,应该学学,还有吃白萝卜的禁忌也要了解
白萝卜汤是一道家常菜,不仅口感清淡,而且具有丰富的营养价值
北京人喊“姐”,背后有啥秘密?
姐姐叫的好好听啊:家庭温情与责任的双重奏
脱口秀现场“大姐”惹争议:一个称呼引发的文化思考
如何分辨古建筑的朝代?
国内见于文字记载最早的伏羲庙,原来在微山
黑米:养生界的网红食材,营养价值与食用指南
黑米配高粱米:营养翻倍的健康饮食新选择
水发鱿鱼的美味做法,简单又好吃
U盘使用步骤和详细教程:轻松解决数据传输与存储问题的全方位指南
融慧教育:指向五育融合育人的林凯实践