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

Unity3D仿星露谷物语开发12之创建道具列表

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!

 


http://www.kler.cn/a/461851.html

相关文章:

  • 数据结构与算法之动态规划: LeetCode 213. 打家劫舍 II (Ts版)
  • Ansys Aqwa 中 Diffraction Analysis 的疲劳结果
  • 学习C++:数组
  • Windows系统提示ffmpeg.dll丢失怎么解决?
  • Linux之ARM(MX6U)裸机篇----5.仿stm32的LED驱动实验
  • Git的使用流程(详细教程)
  • iOS 中的 nil、Nil、NULL、NSNull 僵尸对象和野指针
  • Disruptor 有哪些典型的使用场景?
  • Frontend - 分页(针对 python / Django )
  • SpiderFlow平台v0.5.0内置变量及自定义函数
  • AAL省电效果对比
  • trie树算法--c语言
  • 解决Spring boot集成quartz时service注入失败为null的问题
  • 【目标跟踪】checkpoint文件到底是什么?
  • 网页单机版五子棋小游戏项目练习-初学前端可用于练习~
  • 基于W2605C语音识别合成芯片的智能语音交互闹钟方案-AI对话享受智能生活
  • MySQL DBA需要掌握的 7 个问题
  • 使用 Vue CLI 创建 Vue.js 项目的详细指南
  • 【DevOps】Jenkins部署
  • Java jni调用nnom rnn-denoise 降噪
  • WebRTC的线程事件处理
  • 五、其他核心概念
  • 基于SpringBoot在线竞拍平台系统功能实现三
  • 免费的量化交易股票API有哪些局限性?
  • 人工智能-Python上下文管理器-with
  • Windows系统下Rancher安装全攻略:开启容器管理新征程