尽管我在代码中添加了很多的注释但是我认为解释的还不够清晰,因此,建议配合其他教程使用,或者直接问我
ScriptableObject对象,类似于配置文件一样的东西,可以根据ScriptableObject对象的模板类创建,ScriptableObject对象挂载于普通脚本上,并提供相应的变量
ScriptableObject对象适合储存常量,如果一个变量在运行时会改变,建议将它写在类里
我不知道这种类叫什么名字因此我暂时将它称为ScriptableObject模板类
使用下面这段代码编写一个类后就可以创建相应的ScriptableObject对象了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu(menuName = "ZiZhiLei/物品类", fileName = "goods")]//这行添加 //CreateAssetMenu 特性,在编辑器的菜单中创建资源文件,
//在项目选项卡的随便一个文件夹里右键 > 创建然后你就会发现有不一样的东西
//menuName = "ZiZhiLei/物品类"的含义是在”创建“菜单下添加ZiZhiLei类,ZiZhiLei类下面还有”物品
// 类“(这里的ZiZhiLei是拼音自制类)
//fileName = "goods" 文件被创建时的默认名字
public class GoodsObject : ScriptableObject //我不知道这种类叫什么名字因此我暂时将它称为ScriptableObject模板类
{
//这个ScriptableObject对象仅提供物品最基础的属性,虽然它里面也可以声明方法也可以被调用,但,似乎限制很大,因此不建议在这里创建很复杂的类
[Header("数据")]// 如果不清楚特性[Tooltip(" ")]和[Header(" ")] 是什么概念的话可以复制后去unity官方api文档处搜索,我不知道怎么描述这个概念
[Tooltip("物品的编号")]
public int GoodsNumber;
[Tooltip("物品的属性号")]
public int GoodsType;
[Tooltip("物品的数量")]
public int GoodsQuantity;
[Tooltip("物品的名字")]
public string GoodsName;
[Tooltip("物品的数值")]
public float GoodNumericalValue;//物品数值
public void UseMedicinalSolution()
{
Debug.Log("使用药水");
}
void Start()
{
//Debug.Log("测试他是否会自动运行"); ;//调用一次仅作测试(一般来说他不会运行这里)
}
}
///创建完后大概在这样的位置右键就可以创建ScriptableObject对象了
/调用ScriptableObject对象的测试对象
把ScriptableObject对像挂载到脚本后就可以使用了
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
public class YaoShuiTest : MonoBehaviour
{
public GoodsObject _ScriptableObject;//挂载组件 这里变量的类型必须和ScriptableObject模/
//板类的名字一样
void Start()
{
Debug.Log("测试获取数据");
Debug.Log("物品的编号:"+_ScriptableObject.GoodsNumber);
Debug.Log("物品属性号:" + _ScriptableObject.GoodsType);
Debug.Log("物品的数量:" +_ScriptableObject.GoodsQuantity);
Debug.Log("物品名字:" +_ScriptableObject.GoodsName);
Debug.Log("物品数值" +_ScriptableObject.GoodNumericalValue);
_ScriptableObject.UseMedicinalSolution();//调用一次仅作测试
}
// Update is called once per frame
void Update()
{
}
}
如果对以上的内容有疑问或发现有错误需要改进的地方,欢迎提问与指正