ScriptableObject上的prefab内容暂用,ScriptableObject详解

news/2024/11/27 2:11:29/

ScriptableObject是Unity引擎中的一种特殊类型,它允许你创建可扩展的、自定义的数据容器,用于在项目中存储和管理数据。它们非常适合存储那些不直接关联场景对象的数据,例如配置数据、游戏设置、AI行为树、技能和物品属性等。

ScriptableObject具有以下特点:

不依赖场景:ScriptableObject的数据存储在项目文件夹中的资源文件中,而不是存储在场景中的GameObject上。这使得它们可以轻松地在多个场景中共享和访问数据。

不可撤销的更改:与场景中的GameObject和Component不同,对ScriptableObject所做的更改在编辑器中无法撤销。这意味着在编辑器中编辑ScriptableObject数据时要谨慎。

轻量级:ScriptableObject比继承自MonoBehaviour的类更轻量级,因为它们不需要挂载到GameObject上,也没有像Update、Start等Unity生命周期事件。这使得ScriptableObject更高效,更易于管理。

要创建一个ScriptableObject,需要遵循以下步骤:

创建一个继承自ScriptableObject的自定义类。例如:


using UnityEngine;[CreateAssetMenu(fileName = "Data", menuName = "ScriptableObjects/ExampleData", order = 1)]
public class ExampleData : ScriptableObject
{public string exampleString;public int exampleInt;public GameObject examplePrefab;
}

使用CreateAssetMenu属性为该类提供创建菜单。这将允许你在Unity编辑器中的Assets菜单中轻松创建ScriptableObject实例。

在Unity编辑器中创建ScriptableObject实例。选择Assets > Create > ScriptableObjects > ExampleData。这将在项目的资源文件夹中创建一个新的ScriptableObject实例,你可以编辑它的属性值。

在其他脚本中引用和使用ScriptableObject实例。例如,在MonoBehaviour脚本中,你可以声明一个ExampleData类型的公共字段,并在Unity编辑器中将ScriptableObject实例拖放到相应的插槽中。

using UnityEngine;public class ExampleUsage : MonoBehaviour
{public ExampleData exampleData;private void Start(){Debug.Log("Example String: " + exampleData.exampleString);Debug.Log("Example Int: " + exampleData.exampleInt);}
}

这样,你就可以在游戏运行时访问和使用ScriptableObject中的数据了。

当你在ScriptableObject上引用Prefab时,只有Prefab的元数据和引用信息会被加载到内存中,而不是整个Prefab的内容。只有当你在运行时实例化Prefab时(使用Instantiate函数),才会将Prefab的内容(如游戏对象、组件和资源)加载到内存中。

因此,尽管ScriptableObject上的Prefab引用占用一定的内存,但这通常是非常小的。只有在实际需要时,才会实例化Prefab并占用更多的内存。这种按需加载和实例化的方式有助于优化内存使用和性能。

所以,只要你没有实例化Prefab,它们就不会对内存产生太大影响。


http://www.ppmy.cn/news/61872.html

相关文章

全方位揭秘!大数据从0到1的完美落地之运行流程和分片机制

一个完整的MapReduce程序在分布式运行时有三类实例进程: MRAppMaster: 负责整个程序的过程调度及状态协调MapTask: 负责Map阶段的整个数据处理流程ReduceTask: 负责Reduce阶段的整个数据处理流程 当一个作业提交后(mr程序启动),大概流程如下&#xff1…

家用洗地机哪款好?2023入门级智能洗地机

现代社会对卫生日益重视,尤其是在工业、商业和公共场所要求越来越高。传统清洁方式不能满足人们的需求,清洁工作效率低且卫生难以保证。而洗地机的出现,正是为了解决这些问题。它能够深入清洁地面,有效防止不必要的污垢、细菌和病…

【Linux】软件包管理器 yum和编辑器-vim的基本使用

文章目录 一、yum背景知识1.商业生态2.开源生态3.Linux软件生态本土化 二、yum的基本使用1.什么是软件包2.查看软件包3.安装软件4.卸载软件5.rzsz 三、vim的基本使用1.vim的基本概念2.vim的基本操作3.vim命令模式命令集4.vim末(底)行模式命令集5.操作总结 四、简单vim配置1.vim…

高级【IO】

目录 一.五种IO模型 (1)阻塞IO: (2)非阻塞IO (3)信号驱动IO: (4)IO多路转接 (5)异步IO 二.高级IO概念 1.同步通信、异步通信 2.阻塞、非阻…

Scala Option类型,异常处理,IO,高阶函数

Option类型 实际开发中, 在返回一些数据时, 难免会遇到空指针异常(NullPointerException), 遇到一次就处理一次相对来讲还是比较繁琐的. 在Scala中, 我们返回某些数据时,可以返回一个Option类型的对象来封装具体的数据,从而实现有效的避免空指针异常。S…

SpringBoot 自定义注解实现Redis缓存功能

背景 最近小A的公司要做一个大屏可视化平台,主要是给领导看的,领导说这个项目要给领导演示,效果好不好直接关系到能不能拿下这个项目,领导还补了一句“这项目至少是百万级的,大伙要全力以赴”,早上小A还想…

js高级知识汇总一

目录 1.怎么理解闭包? 2.闭包的作用? 3.闭包可能引起的问题? 4.变量提升 5.函数动态参数 6.剩余参数 ...(实际开发中提倡使用) 7.展开运算符 8.箭头函数 9.解构赋值(数组、对象) 10 创…

道德经-第十六章

致虚极,守静笃。 万物并作,吾以观复。 夫物芸芸,各复归其根。 归根曰静,是谓复命。 复命曰常,知常曰明。 不知常,妄作,凶。 知常容,容乃公。 公乃王,王乃天。 天乃道&…