[Unity] ACT 战斗系统学习 2:从 Buff 系统开始的思考

本文探讨了在Unity中构建ACT战斗系统时,如何设计Buff系统。作者从BuffSystemSingleton、BuffManager和IBuff接口出发,讨论了是否需要Buff池,并引入了Blackboard的概念作为逻辑桥梁。在实现过程中,作者面临如何处理速度增益等具体Buff效果,以及如何在玩家和敌人之间通用的问题。同时,对比了多种不同的Buff系统实现方案,并提出了对UnityEvent和C#事件的思考。

从零开始写,我希望 Buff 系统由三部分组成
BuffSystemSingleton 用于存 Buff 对象池和 Buff 字典,提供创建 Buff,回收 Buff 的功能
BuffManager 不继承 mono,是某个 mono 的一个成员,存储一个 Buff 列表,为主人 mono 提供 Buff 数据
IBuff 定义 Buff 类和 Buff 的基本行为

写到 Buff 池的时候

Assets/MeowACT/Scripts/BuffSystem/BuffSystemSingleton.cs

// ----------------------------------------------
// 作者: 廉价喵
// 创建于: 27/03/2022 10:00
// 最后一次修改于: 27/03/2022 10:00
// 版权所有: CheapMiaoStudio
// 描述:
// ----------------------------------------------

using System.Collections.Generic;
using UnityEngine;

namespace MeowACT
{
   
   
    /// <summary>
    /// Buff 系统管理器
    /// </summary>
    public class BuffSystemSingleton : MonoBehaviour
    {
   
   
        /// <summary>
        /// Buff 系统管理器管理器单例
        /// </summary>
        private static readonly BuffSystemSingleton singleInstance;

        /// <summary>
        /// Buff 系统管理器管理器单例
        /// </summary>
        public static BuffSystemSingleton SingleInstance => singleInstance;

        /// <summary>
        /// buff 字典
        /// </summary>
        private Dictionary<int, IBuff> buffMap = new Dictionary<int, IBuff>();
        
        /// <summary>
        /// Buff 池
        /// </summary>
        private static Stack<IBuff> buffPool = new Stack<IBuff>();

        /// <summary>
        /// Buff 系统管理器管理器单例的静态构造函数
        /// 首次实例化该类或任何的静态成员被引用时调用该静态构造函数
        /// </summary>
        static BuffSystemSingleton()
        {
   
   
            var gameObject = new GameObject();
            DontDestroyOnLoad(gameObject);
            singleInstance = gameObject.AddComponent<BuffSystemSingleton>();
        }

        public void Register(IBuff
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值