kouseya

导航

Unity编程设计 —— 关于任务系统的设计总结

一、关于任务系统的设计总结
1、需要处理的问题
(1)让任务所需锚点随时响应
为了避免任务系统强绑在某一物体上(如任务面板UI)导致若因场景切换等情况导致的物体销毁而无法让任务目标及时反馈。
(2)避免冗余判断
为了避免在大量任务条件的情况下,如每日任务这种随机刷新某几个任务的需求,会有过多冗余判断而导致的问题。
(3)任务可以对自己进行自管理,避免多个任务之间的耦合
避免每次生成和销毁的任务都需要对管理器进行操作,增加多余操作
2、处理方式
(1)以单例管理器作为全局物体来充当管理中介。管理器不随场景切换销毁可随时响应访问。

    if (TaskManager.instance == null)
        {
            TaskManager.instance = this;
            DontDestroyOnLoad(this);
        }

(2)在管理器内以任务所需类型设置不同的扳机事件,在流程中相应的位置调用非空事件(可以用枚举筛选)。

    public event UnityAction<int> gameFinishEvent;
    public event UnityAction<int> firstRankEvent;

(3)将任务数据写为基类,任务在创建时自动向对应的扳机事件中添加自己的数据记录方法,这样即使任务被误删/误创也不会影响其他任务

    public virtual void SetTaskEvent()
    {
        switch (thisType)
        {
            case TaskType.对局完成:
                TaskManager.instance.gameFinishEvent += AddProgress;
                break;
            case TaskType.第一名对局完成:
                TaskManager.instance.firstRankEvent += AddProgress;
                break;
            default:
                Debug.LogError("未设置的任务类型");
                break;
        }
    }

posted on 2026-04-10 14:14  kouseya  阅读(1)  评论(0)    收藏  举报