1、目标
道具是游戏的核心部分,道具包括你可以拾取的东西,你可以使用的工具和你能种的东西等。
本节就是创建道具的信息类。同时了解ScriptableObject类的使用。
2、创建道具枚举类
修改Assets -> Scripts -> Enums.cs脚本,
新增如下内容:
public enum ItemType
{Seed, // 种子Commodity, // 商品Watering_tool, // 浇水工具Hoeing_tool, // 锄头Chopping_tool, // 砍伐工具Breaking_tool, // 破碎工具Reaping_tool, // 收割工具Collecting_tool, // 收集工具Reapable_scenary, // 可达到场景Furniture, // 家具none,count // 计数,记录列表中东西的个数
}
整个Enums.cs脚本如下:
public enum ToolEffect
{none, watering
}public enum Direction
{up,down,left,right,none
}public enum ItemType
{Seed, // 种子Commodity, // 商品Watering_tool, // 浇水工具Hoeing_tool, // 锄头Chopping_tool, // 砍伐工具Breaking_tool, // 破碎工具Reaping_tool, // 收割工具Collecting_tool, // 收集工具Reapable_scenary, // 可达到场景Furniture, // 家具none,count // 计数,记录列表中东西的个数
}
3、创建道具详情类
在Assets -> Scripts -> Item下新增ItemDetails.cs脚本。
using UnityEngine;[System.Serializable]
public class ItemDetails
{public int itemCode;public ItemType itemType;public string itemDescription;public Sprite itemSprite;public string itemLongDescription;public short itemUseGridRadius;public float itemUseRadius;public bool isStartingItem;public bool canBePickedUp;public bool canBeDropped;public bool canBeEaten;public bool canBeCarried;
}
- [System.Serializable]:使用[System.Serializable]属性标记的类,其实例可以在Unity编辑器中进行可视化编辑;被序列化和反序列化,便于数据保存和读取。
- itemUseGridRadius:比如一定距离的树木被砍伐,一定距离的物品可以被拾取,用整个属性来确定这个物品的有效网格距离。
- itemUseRadius:如果不是基于网格的物品,比如环境中的草等是基于距离的,使用当前属性。
4、创建道具列表类
(1)创建SO_ItemList脚本
在Scripts -> Item下创建SO_ItemList脚本。
using System.Collections.Generic;
using UnityEngine;[CreateAssetMenu(fileName ="so_ItemList", menuName ="Scriptable Objects/Item/Item List")]
public class SO_ItemList : ScriptableObject
{[SerializeField]public List<ItemDetails> itemDetails;
}
(2)ScriptableObject说明
ScriptableObject是什么?
- Unity提供的一个数据配置存储基类,它可以用来保存大量数据得数据容器
- 是一个类似MonoBehaviour的基类,要想使用它,需要写个脚本去继承ScriptableObject。继承自ScriptableObject的脚本无法挂载到游戏物体上,因为它不是继承自MonoBehaviour。
- ScriptableObject类的实例会被保存成资源文件(.asset文件),和预设体、材质球、音频文件等类似,都是一种资源文件,存放在Assets文件夹下。
作用是什么?
- 编辑模式下数据持久化
- 配置文件(配置游戏中的数据)
- 数据复用(多个对象公用一套数据,不用clone数据)
使用方法?参考示例如下:
[CreateAssetMenu(fileName = "BulletData", menuName = "ScriptableObject/子弹数据", order = 0)]
public class BulletData : ScriptableObject
{public float speed;public float damage;
}
fileName: 表示数据资源文件创建出来的文件名
menuName:表示在Assets / Create 下的名字
order:表示在Assets / Create 下的位置顺序
(3)创建ScriptableObject实例
在Assets目录下创建如下目录结构:
在Assets -> Scriptable Object Assets -> Item下右击创建so_ItemList对象列表。
创建24个实例。
24个Element罗列如下:
From small acorns do large oak trees grow.One day this humble acorn could be a towering giant!
A juicy,fat,ripe pumpkin.It makes great soup as well as a scary Halloween face!
Juicy fresh corn - try it roasted on a BBQ smothered with butter and a health conscious sprinkling of salt and pepper!