当前位置: 首页 > article >正文

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

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.kler.cn/news/18014.html

相关文章:

  • random — 伪随机数生成器(史上总结最全)
  • C++学习day--09 字符串比较、运算符
  • 【Java多线程编程】创建线程的基本方式
  • 【Linux】浅谈网络协议栈-网桥br0
  • 分布式锁Redisson对于(不可重入、不可重试、超时释放、主从一致性)四个问题的应对
  • Python人工智能—线性回归
  • C++面试题
  • java8新特性——StreamAPI
  • PyQt5零基础入门(二)——主窗口的显示与退出
  • LInux grep sed awk 命令详解
  • 开关电源基础01:电源变换器基础(3)
  • 数影周报:假冒ChatGPT的恶意软件激增,谷歌开启无密码登录
  • docker-mysql的几个问题
  • 学习HCIP的day.04
  • 【383. 赎金信】
  • 从零开始学习Linux运维,成为IT领域翘楚(十)
  • 【刷题】142. 环形链表 II
  • maven配置阿里云镜像仓库
  • 关于C语言的一些笔记
  • 算法:递归启蒙-汉诺塔
  • ChatGPT使用入门
  • 计算机网络基础知识(一)计算机发展史、网络设备、网络结构及拓扑
  • 设计模式:SOLID原则
  • 2022级吉林大学面向对象第三次上机测试
  • 总结841
  • SSM框架学习-bean生命周期理解
  • new BroadcastChannel(),BroadcastChannel API使用介绍
  • 这就是实力~ 腾讯云大咖亲码 “redis深度笔记” 无废话全精华
  • 洗稿伪原创工具-洗稿生成器
  • SSM框架详解,实现高效优雅的Java Web开发