Unity中的人物buff状态的实现

本文介绍了在Unity中实现游戏人物技能和Buff状态的思路与方法,包括使用ScriptableObject子类保存Buff信息,创建IBuff接口及管理类BuffManager,并利用委托简化触发逻辑。还提及了系统的扩展可能性,如增加响应函数、计时功能和特效制作。
摘要由CSDN通过智能技术生成

最近在考虑怎么写游戏中人物的技能与buff状态,在一些论坛里搜索了一些帖子和资料,但是讲的清楚明白的感觉比较少,这里讲一下如何最简单地实现游戏中人物技能和buff的实现。

实现思路

在游戏中Buff的作用是使人物产生被动的效果影响。比如提升人物的属性、增加人物判定成功的概率、在动作执行时附加额外动作等。

实现的思路如下:

  1. 编写ScriptableObject的子类BuffData,以创建保存Buff的id、图标、介绍等信息的asset文件;
  2. 创建可持有BuffData对象的父类IBuff,其子类的对象将作为玩家在游戏进行中持有的Buff;
  3. 在IBuff类中设置三个函数BuffStart、BuffEnd、BuffEffect,分别用于Buff添加、Buff消除、Buff触发。
  4. 制作管理类BuffManager,声明添加Buff、消除Buff、层数叠加等管理方法。

使用委托实现buff触发

对于设计完备的游戏而言,在某一动作下可能触发的Buff数量可能是非常庞大的。如果给每一种buff都设置一个bool变量,每一次操作都对所有的变量进行判断,无论是代码的冗余量还是程序的运行效率都是非常糟糕的。

因此,可以使用C#中的委托来实现Buff功能的动态添加与消除:

  1. 在BuffManager类中声明buff触发的委托buffCall;
  2. 当Buff被添加时,将IBuff类中的Buff触发函数BuffEffect添加至设置好的委托buffCall中;
  3. 在需要触发的动作的方法中调用buffCall。

具体的Unity委托用法可以参考我的这篇博文 C#的委托类(2分钟了解委托用法)

整个系统的结构如图:

在这里插入图片描述

代码编写

BuffData类:

/// <summary>
///	保存Buff的各项数据,如最高等级、持续时间、效果值等
/// </summary>
[CreateAssetMenu(menuName = "BuffData", fileName = "buff")]
public class BuffData : ScriptableObject
{
   
    public int id;
    
    public string buffName;
    
    public int maxLevel;
    
    public float[] buffValue = new float[10];
    
    public float[] lastTime = new float[10];
    
    public float restTime;
    
    public Sprite buffIcon;

    [TextArea(2, 3)]
    public 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值