✅ IdleRewardManager 클래스 예시
using System;
using UnityEngine;
public class IdleRewardManager : MonoBehaviour
{
private const string LastLogoutKey = "LastLogoutTime";
private const float GoldPerSecond = 1f; // 초당 획득 골드량
public Action<int> OnRewardCalculated;
private void Start()
{
CalculateIdleReward();
}
private void OnApplicationPause(bool pause)
{
if (pause)
{
SaveLogoutTime();
}
}
private void OnApplicationQuit()
{
SaveLogoutTime();
}
private void SaveLogoutTime()
{
string nowStr = DateTime.Now.ToString();
PlayerPrefs.SetString(LastLogoutKey, nowStr);
PlayerPrefs.Save();
Debug.Log($"로그아웃 시간 저장됨: {nowStr}");
}
private void CalculateIdleReward()
{
string savedTimeStr = PlayerPrefs.GetString(LastLogoutKey, string.Empty);
if (string.IsNullOrEmpty(savedTimeStr))
{
Debug.Log("처음 실행이거나 이전 시간 없음");
return;
}
DateTime lastTime = DateTime.Parse(savedTimeStr);
TimeSpan idleTime = DateTime.Now - lastTime;
int reward = Mathf.FloorToInt((float)idleTime.TotalSeconds * GoldPerSecond);
Debug.Log($"방치 시간: {idleTime.TotalSeconds:F1}초, 보상 골드: {reward}");
// 외부에서 이 값으로 UI나 보상 시스템 작동 가능
OnRewardCalculated?.Invoke(reward);
}
}
🧩 클래스 사용 예시
public class RewardUI : MonoBehaviour
{
public IdleRewardManager rewardManager;
private void Start()
{
rewardManager.OnRewardCalculated += ShowRewardPopup;
}
private void ShowRewardPopup(int gold)
{
if (gold > 0)
{
Debug.Log($"방치 보상으로 골드 {gold} 획득!");
// UI 팝업 띄우기 가능
}
}
}
📌 장점
- 확장성 있음: 골드 말고도 경험치, 아이템 등 다양하게 확장 가능
- 구조 분리: UI는 보상 로직과 분리되어 깔끔함
- 오프라인 시간 기반: 실제로 게임이 돌지 않아도 보상 제공 가능