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
相关产品推荐
相关产品推荐

