Scriptable Object被认为是可以重用的数据容器,这些数据容器首先通过C#脚本定义,再通过Asset菜单生产,然后作为Asset保存在Unity项目中。

其有两个重要的用途,一为通过对Scriptable Object资源的实例的(直接)引用,可以减少内存使用量,而不是每次使用对象时都复制对象的所有数据(但也会造成永久更改,所以最好挂载在不更改属性的道具实例上而不影响最原本的脚本化对象表)

二是预定义可插拔数据集(如背包,商城内道具这类物体属性不怎么更改,但所处更改的(即插拔))

三为可以在多个脚本中作为方便的公用对象(如角色生命值设为脚本化对象时,就能在多个脚本中均对容器内的同一生命值进行操作)

 

写一个Scriptable Object案例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//在Creat菜单创建一个名为Item的条目(可以在资源文件夹下右键创建脚本化对象Item了)
[CreateAssetMenu(menuName = "Item")]

//继承自ScriptableObject而非MonoBehaviour,如此不能直接挂载到游戏对象上,得通过继承
//自MooBehaviour的类引用再去挂载
public class Item : ScriptableObject
{
//定义一种对外开放的标识
public string objectName;
//存储对spite精灵的引用,这样可以呈现一种默认形象
public Sprite sprite;
//一种对外开放的数据属性(例如此物体可以恢复生命值1,这里设为1便能方便操作)
public int quantity;
//判定可否堆叠(例如商城,背包)
public bool stackable;

//物品类型的枚举
public enum ItemType
{
COIN,
HEALTH

}
//使用枚举创建名为itemType的属性
public ItemType itemType;
}

中介——一个继承自MonoBehaviour的脚本,这样就能使得Scriptable Objec挂载到GameObject上了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Consumable : MonoBehaviour
{

//有一对外接口item,用以挂载创建的item对象
public Item item;

}

 

 

 

 posted on 2021-03-27 12:12  雨落江州  阅读(2214)  评论(0编辑  收藏  举报