[学习日志]记录一下自己设计ScriptableObject的一些思考

参考数据库设计SO类

这是PCR数据库里的一行技能数据

在这里插入图片描述

这是PCR数据库里的一行技能动作

在这里插入图片描述

我想 如果是客户端的话 我是不是可以做成单独的配置文件,于是我就开始随意的写SO类

技能动作类

using UnityEngine;

[CreateAssetMenu(fileName = "new SkillAction", menuName = "Skill/Action", order = 1)]
public class SkillActionSO : ScriptableObject
{
   
    [SerializeField]
    private int _actionID;
    [SerializeField]
    private int _classID;
    [SerializeField]
    private ActionTypeSO _actionType;
    [SerializeField]
    private TargetTypeSO _targetType;
    [SerializeField, TextArea]
    private string _description;
    [SerializeField, TextArea]
    private string _levelUpDisp;
}

动作类型抽象类

using UnityEngine;

public abstract class ActionTypeSO : ScriptableObject
{
   
}

目标类型抽象类

using UnityEngine;

public abstract class TargetTypeSO : ScriptableObject
{
   
}

创建SO子类

在这里插入图片描述
在这里插入图片描述

开始创建SO文件进行配置

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

配置技能

技能数据     ←     技能动作1     ←     动作类型
                              ←     目标类型
            ←     技能动作2     ←     动作类型
                              ←     目标类型

如果需要创建一个技能数据,需要创建多个“Action的SO文件”,每个Action需要“一个ActionType与TargetType的SO文件”。

比如佩可的午餐时间技能,有2个Action,1个是自身防御力提升,1个是回复生命值,就需要创建6个SO文件

如果是按现在的方式去配置技能

根据PCR的数据库得知1个技能数据最多有7个Action

1个角色有1个UB技能 2个主技能 1个EX技能,每个技能还有对应的升级版本

首先要创建多个ActionType子类与TargetType子类

其次SO文件很难复用,就是说几乎每个技能动作都要创建单独的ActionType与TargetType的SO文件

我思考的解决方式

1. 与数据库的设计一致

去掉ActionType类与TargetType类,在对应的字段写数据,但是这种方式对配置人员不友好,想要更直观的方式。

我认为的优点与缺点

  • 优点
    • 同步数据库
    • 更容易文档编辑
  • 缺点
    • 没必要写SO类了,同步excel(存为JSON)或数据库,直接从数据库或者JSON文件中获取
    • 写参数都得参考设计文档
    • 不适合小项目快速开发

2. 参考JSON,将数据以键值对方式存储

假如我用JSON去保存技能数据,大概会是这个样子

{
   
    "SkillID": 1058002,
    "Name": "午餐时间",
    "SkillType": 0,
    "SkillAreWidth": 0,
    "SkillCastTime": 0.21,
    "Actions":
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值