zoukankan      html  css  js  c++  java
  • Unity ScriptableObject 简单说明

    ScriptableObject介绍:

    ScriptableObject是一个类,他允许你从脚本实例独立地存储大数量的共享数据。这个类也是继承MonoBehaviour,但不能作为组件添加到游戏对象中去。主要作为Unity的一种资源存储一些数据。

    ScriptableObject与“可序列化对象类”不同,他是一个编辑类和可以填充不同的东西。

    可以参考这个例子:你可以使用带有脚本的prefab,他有一个4MB内存的整型数组,这个数组是这个prefab独有的。但你每次实例化这个prefab时,你都要实例化这个数组,10个prefab就要40MB的数组,很浪费内存。而使用ScriptableObject就可以共享同一个数组,这样就一直只是4MB了,因为其他实例使用这个数组只是使用引用。

    ScriptableObject不止可以用来避免内存的浪费,还可以定义可拔插的数据集操作。如下

     1 abstract class PowerupEffect : ScriptableObject {
     2     public abstract void ApplyTo(GameObject go);
     3 }
     4 
     5 [CreateAssetMenu]
     6 class HealthBooster : PowerupEffect {
     7     public int Amount;
     8     public override void ApplyTo(GameObject go) {
     9         go.GetComponent<Health>().currentValue += Amount;
    10     }
    11 }
    12 
    13 class Powerup : MonoBehaviour {
    14     public PowerupEffect effect;
    15     public void OnTriggerEnter(Collider other) {
    16         effect.ApplyTo(other.gameObject);
    17     }
    18 }
    ExampleCode

    在Unity中,除了普通类,Unity的类在运行时都不能被序列化,只能被反序列化。ScriptableObject里有自带的序列化,他可以在编辑时序列化一些Unity的类,但在运行时无法序列化Unity的类。也就是说Unity只能在编辑时序列化自身的东西,在运行时Unity对于自身的东西只能反序列化。

    如果想要序列化Unity自身的东西,需要使用自己的类,但不用Unity的序列化系统。

  • 相关阅读:
    大数据分析项目中的“最差”实践
    【Python】Python正则表达式使用指导
    大数据分析的5个方面
    你真的会python嘛?
    你是如何自学 Python 的?
    python中#!/usr/bin/python与#!/usr/bin/env python的区别
    [实验吧刷题]密码学部分
    [bugku]高阶web 综合帖
    [bugku]sqlmap部分
    【ctf第一次校赛】+不会的web/ +凉凉的省赛预赛 + 最后摸了 个二等。。
  • 原文地址:https://www.cnblogs.com/SeaSwallow/p/6674732.html
Copyright © 2011-2022 走看看