You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity实现应用启动时仅显示一次每日任务面板的方法咨询

Unity当日任务面板单次显示实现方案

核心逻辑

通过全局会话状态标记控制面板显示:用单例管理器存储本次应用启动后的显示状态,确保同会话内重复进入主页面不重复显示;应用重启后状态自动重置,满足重启后再次显示的需求。如果需要结合「当日」更新逻辑,可额外添加日期校验。


具体实现步骤

1. 全局状态管理器(单例)

创建一个不随场景销毁的单例类,用来存储本次启动的面板显示状态:

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    // 标记本次启动是否已显示过任务面板
    public bool hasShowedDailyTaskPanel = false;

    private void Awake()
    {
        if (Instance == null)
        {
            Instance = this;
            DontDestroyOnLoad(gameObject);
        }
        else
        {
            Destroy(gameObject);
        }
    }
}

把这个脚本挂载到一个空物体上,放在启动场景中,确保应用启动时就初始化。

2. 主页面面板控制脚本

在主页面的脚本中,监听页面进入事件,检查状态并控制面板显示:

using UnityEngine;

public class MainMenu : MonoBehaviour
{
    public GameObject dailyTaskPanel; // 在Inspector中拖拽任务面板对象

    private void OnEnable()
    {
        // 每次主页面激活时检查是否显示面板
        CheckTaskPanelStatus();
    }

    private void CheckTaskPanelStatus()
    {
        if (!GameManager.Instance.hasShowedDailyTaskPanel)
        {
            dailyTaskPanel.SetActive(true);
            GameManager.Instance.hasShowedDailyTaskPanel = true;
            // 加载当日任务数据的逻辑写在这里
            LoadDailyTaskData();
        }
        else
        {
            dailyTaskPanel.SetActive(false);
        }
    }

    private void LoadDailyTaskData()
    {
        // 示例:从本地或服务器拉取当日任务并更新面板UI
        // 比如遍历任务列表组件,赋值任务名称、进度等
    }
}

3. 可选:跨天任务更新逻辑

如果需要实现「跨天后重启应用显示新的当日任务」,可以添加日期校验,结合PlayerPrefs存储上次显示日期:

修改主页面的CheckTaskPanelStatus方法:

private void CheckTaskPanelStatus()
{
    string currentDate = System.DateTime.Now.ToString("yyyy-MM-dd");
    string lastShowDate = PlayerPrefs.GetString("LastTaskShowDate", "");

    // 两种情况显示面板:本次启动未显示过,或当前日期与上次显示日期不同
    if (!GameManager.Instance.hasShowedDailyTaskPanel || currentDate != lastShowDate)
    {
        dailyTaskPanel.SetActive(true);
        GameManager.Instance.hasShowedDailyTaskPanel = true;
        PlayerPrefs.SetString("LastTaskShowDate", currentDate);
        PlayerPrefs.Save();
        LoadDailyTaskData();
    }
    else
    {
        dailyTaskPanel.SetActive(false);
    }
}

注意事项

  • 确保GameManager在应用启动时优先加载,避免空引用错误。
  • 如果主页面是通过场景切换进入,可改用SceneManager.sceneLoaded事件监听主场景加载完成,替代OnEnable。
  • 若应用有后台切换需求,可结合OnApplicationFocus或OnApplicationPause事件,避免后台切回后误触发显示。

内容的提问来源于stack exchange,提问作者okeanous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 05:50:34