Unity小白:ScriptableObject踩坑记录 在使用ScriptableObject之前,我研究过官方文档,但很显然,里面并没有说的多详细,倒是在CSDN上有很多博主给出了一些常见错误:在ScriptableObject里面试图保存多维数组;在ScriptableObject里保存类时没有对类进行序列化;在editor运行时ScriptableObject的数据更改不会保存,要特殊标记为dirt才能将...
对于ScriptableObject这种方法,特别指出,继承ScriptableObject的类对象确实可以被Unity序列化后持久化成文件,不需要走Monobehaviour存储数据那样要依附在一个GameObject身上再做成Prefab这个弯路,并且其能够保持资源索引关系。但是,这仅限于在编辑时。打包成app在客户端运行时,scriptableObject对象是只读的,不可写。所以非得将其持...
ScriptableObject in Unity: 全面解析 ScriptableObject 是 Unity 中一种强大的数据容器类型,允许您在不附加到游戏对象的情况下存储大量数据。以下是关于 ScriptableObject 的详细指南: 基本概念 本质:继承自 UnityEngine.Object 的类,但不需要附加到 GameObject 上 主要用途: 数据存储和配置 减少场景中的内存占用 实现数据...
public class ScriptableObjectTest : ScriptableObject { public int ID; public string Name; public List<string> NameList; } 1. 2. 3. 4. 5. 6. 使用[CreateAssetMenu], 在Unity中右键指定的菜单即可创建ScriptableObject类型的资源. 如图: 然后手动填写对应的值, 就能持久化下来, 最后加载资源进行实例化即可...
通常我们的脚本会继承MonoBehaviour,SO与其不同的是继承自ScriptableObject。 你不能直接在GameObject上使用它。上述代码中 CreateAssetMenu 属性会在Unity引擎的右键菜单中新提供一个操作选项。 点击Assets -> Create -> MyScriptableObject ,或者右键点击Project窗口,就可以从上述代码定义的SO类来实例化一个自定义资产。(...
在Unity中,ScriptableObject怎样存储问答数据? Unity中使用ScriptableObject允许我们创建配置文件并作为Unity中的Asset资产使用,无需像Json、XML等文件需要通过IO读取并反序列化成为我们需要的数据结构,其弊端是不可以像Json等配置文件可以在外部进行修改,在此不对其做详细介绍,下面使用ScriptableObject创作一个用于配置问答系统数...
“ScriptableObject 是一个可独立于类实例来保存大量数据的数据容器。ScriptableObject 的一个主要用例是通过避免重复值来减少项目的内存使用量。如果项目有一个预制件在附加的 MonoBehaviour 脚本中存储不变的数据,这将非常有用。 每次实例化预制件时,都会产生单独的数据副本。这种情况下可以不使用该方法并且不存储重复数据...
本篇介绍物品类数据的记录方式,首先我们想到的是ScriptableObject(下简称“SO”)来解决储存问题, 一般想来我们会直接在SO文件中直接定义需要用到的字段。 我们以创建一个菜品的物品为例,我们定义两个字段做说明。 usingUnityEngine;[CreateAssetMenu(fileName="DishesData",menuName="Inventory/DishesData")]publicclass...
一、ScriptableObject 简介 ScriptableObject是unity自带的一个类,继承于UnityEngine.Object,可用于制作数据配置文件,或编辑器扩展便于可视化编辑,unity会自动将这个继承ScriptableObject的类序列化,可控性弱,但用于数据的加载是效率最高的。 编写序列化类 由于ScriptableObject的使用要求,我们需要专门编写一个脚本作为所需要存储...
publicclassInventoryData_So:ScriptableObject { public List<InventroyItem> items = new List<InventroyItem>();//将物品数据保存进背包publicvoidAddItem(ItemData_SO itemData,intamount){boolfound =false;//判断物品是否被找到//如果物品是可堆叠的,则先遍历列表if(itemData.stackable){ ...