안녕하세요. 인텔리원스튜디오(IntelliOneStudio)입니다.
이번 시간에는 Unity에서 광고 쿨다운(Cooldown) 시스템을 구현하는 방법을 알아보겠습니다. 특히 AdCooldownManager 스크립트를 중심으로, 광고 시청 후 일정 시간 동안 재시청을 제한하는 방법을 소개해 드릴게요.
이 스크립트를 통해 게임 내에서 광고 시청 빈도를 조절하고, 사용자 경험을 향상시킬 수 있습니다. 단계별로 필요한 코드와 설명을 함께 제공하니, 프로젝트에서 바로 적용해 보세요.
2024.11.14 - [분류 전체보기] - [외워라!창고] 챗GPT를 활용해서 개발한 두 번째 게임을 여러분께 소개합니다!
창고에 물건을 보관하면 더이상 보여주지 않고, 오로지 당신의 기억력으로 찾아야해요.
날이 갈수록 늘어나는 상품들과 주문에도 정확하고 빠르게 물건을 찾아 배송해야해요.
과연 당신은 며칠까지 버틸수 있을까요?
당신의 기억력을 시험해봐요. 지금 다운로드하세요.
[아이폰 앱스토어 다운로드]
https://apps.apple.com/kr/app/%EC%99%B8%EC%9B%8C%EB%9D%BC%EC%B0%BD%EA%B3%A0/id6737766088
저희가 챗GPT를 활용해서 개발한 첫 번째 게임을 여러분께 소개합니다! 이 게임은 챗GPT의 놀라운 AI 기능을 활용해 개발했어요. 즐거움이 가득한 이번 게임은, 챗GPT를 활용해서 누구든지 게임을 재미있게 만들 수 있다는 것을 보여줄 거에요.
* APP Store 에서 다운로드
https://apps.apple.com/kr/app/%EB%86%8D%EB%B6%80%EC%9D%98-%EA%BF%88/id6479183930
*Google Play 에서 다운로드
https://play.google.com/store/apps/details?id=com.intellione.farmersfirstdream&pcampaignid=web_share
주요 기능 소개
싱글턴 패턴을 통한 전역 관리
광고 쿨다운 상태를 어디서든 접근하고 관리할 수 있도록 싱글턴 패턴을 사용합니다.
광고 시청 시간 기록 및 쿨다운 체크
광고를 시청한 시간을 기록하고, 쿨다운이 완료되었는지 여부를 판단합니다.
남은 쿨다운 시간 계산
쿨다운이 진행 중인 경우 남은 시간을 계산하여 사용자에게 표시할 수 있습니다.
아래와 같이 ChatGPT에게 질문했어요.
※ ChatGPT 답변 내용 중 제가 별도로 표시한 굵은 글씨를 기준으로 읽으시면 좀 더 이해가 쉽게 될 거예요.
[질문]
안녕, ChatGPT. 게임에서 광고를 시청한 후 일정 시간 동안 다시 광고를 볼 수 없게 하고 싶어. AdCooldownManager 스크립트를 작성했는데, 어떻게 동작하는지 자세히 설명해 줄 수 있어?
[답변]
안녕하세요! AdCooldownManager 스크립트를 통해 광고 쿨다운 시스템을 구현하는 방법을 단계별로 설명해 드릴게요.
1. 싱글턴 패턴을 통한 인스턴스 관리
public class AdCooldownManager : MonoBehaviour
{
public static AdCooldownManager Instance { get; private set; }
private void Awake()
{
// 싱글턴 패턴 구현
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject); // 씬 변경 시에도 파괴되지 않도록 함
}
else
{
Destroy(gameObject); // 인스턴스가 이미 존재하면 중복 생성 방지
}
}
}
설명:
- 싱글턴 패턴을 사용하여 AdCooldownManager의 인스턴스를 전역에서 접근할 수 있도록 합니다.
- DontDestroyOnLoad(gameObject)를 사용하여 씬이 변경되더라도 객체가 파괴되지 않도록 합니다.
- 이미 인스턴스가 존재하면 Destroy(gameObject)로 중복 생성을 방지합니다.
2. 광고 시청 시간 기록 및 쿨다운 설정
public TimeSpan AdCooldown { get; private set; } = TimeSpan.FromSeconds(60);
public DateTime LastAdWatchTime { get; private set; } = DateTime.MinValue;
// 광고를 시청한 시간 업데이트
public void UpdateLastAdWatchTime()
{
LastAdWatchTime = DateTime.Now;
}
설명:
- AdCooldown: 광고 쿨다운 시간을 설정합니다. 여기서는 60초로 설정되어 있습니다.
- LastAdWatchTime: 마지막으로 광고를 시청한 시간을 기록합니다.
- UpdateLastAdWatchTime(): 광고를 시청할 때마다 현재 시간을 LastAdWatchTime에 업데이트합니다.
3. 쿨다운 완료 여부 확인
// 대기 시간 체크
public bool IsAdCooldownComplete()
{
return DateTime.Now - LastAdWatchTime >= AdCooldown;
}
설명:
- IsAdCooldownComplete(): 현재 시간이 마지막 광고 시청 시간에서 쿨다운 시간을 더한 것보다 크거나 같은지 확인합니다.
- 이 메서드를 통해 광고를 다시 시청할 수 있는지 여부를 판단할 수 있습니다.
4. 남은 쿨다운 시간 계산
// 남은 대기 시간 계산
public TimeSpan GetRemainingCooldown()
{
if (IsAdCooldownComplete())
{
return TimeSpan.Zero;
}
else
{
return AdCooldown - (DateTime.Now - LastAdWatchTime);
}
}
설명:
- GetRemainingCooldown(): 쿨다운이 완료되지 않은 경우 남은 시간을 계산하여 반환합니다.
- 쿨다운이 완료되었다면 TimeSpan.Zero를 반환합니다.
- 이 정보를 통해 UI에 남은 시간을 표시할 수 있습니다.
전체 코드 정리
using System;
using UnityEngine;
namespace WarehouseDeliveryQuest.Managers
{
public class AdCooldownManager : MonoBehaviour
{
public static AdCooldownManager Instance { get; private set; }
public TimeSpan AdCooldown { get; private set; } = TimeSpan.FromSeconds(60);
public DateTime LastAdWatchTime { get; private set; } = DateTime.MinValue;
private void Awake()
{
// 싱글턴 패턴 구현
if (Instance == null)
{
Instance = this;
DontDestroyOnLoad(gameObject); // 씬 변경 시에도 파괴되지 않도록 함
}
else
{
Destroy(gameObject); // 인스턴스가 이미 존재하면 중복 생성 방지
}
}
// 광고를 시청한 시간 업데이트
public void UpdateLastAdWatchTime()
{
LastAdWatchTime = DateTime.Now;
}
// 대기 시간 체크
public bool IsAdCooldownComplete()
{
return DateTime.Now - LastAdWatchTime >= AdCooldown;
}
// 남은 대기 시간 계산
public TimeSpan GetRemainingCooldown()
{
if (IsAdCooldownComplete())
{
return TimeSpan.Zero;
}
else
{
return AdCooldown - (DateTime.Now - LastAdWatchTime);
}
}
}
}
[추가 질문]
그렇다면, 이 스크립트를 실제 프로젝트에 적용하려면 어떻게 해야 할까?
[추가 답변]
좋은 질문이에요! 이 스크립트를 프로젝트에 적용하는 방법을 알려드릴게요.
1. 스크립트 추가
- AdCooldownManager 스크립트를 생성하고, 위의 코드를 붙여넣습니다.
- 이 스크립트를 빈 게임 오브젝트에 추가하고, 해당 오브젝트를 **"DontDestroyOnLoad"**로 설정합니다.
2. 광고 시청 시점에 시간 업데이트
- 광고를 시청하고 보상을 지급하는 코드에서 AdCooldownManager.Instance.UpdateLastAdWatchTime()를 호출하여 마지막 광고 시청 시간을 업데이트합니다.
// 예시: 광고 시청 완료 콜백에서 호출
_adRewardedAd.Show(reward =>
{
// 보상 지급 로직
AdCooldownManager.Instance.UpdateLastAdWatchTime();
});
3. 광고 버튼 활성화 조건 설정
- 광고 버튼을 눌렀을 때 쿨다운이 완료되었는지 확인하고, 광고를 시청할 수 있는지 판단합니다.
public void OnAdButtonClicked()
{
if (AdCooldownManager.Instance.IsAdCooldownComplete())
{
// 광고 시청 로직 실행
}
else
{
// 남은 쿨다운 시간 표시 또는 안내 메시지 출력
TimeSpan remainingTime = AdCooldownManager.Instance.GetRemainingCooldown();
Debug.Log($"광고를 다시 시청하려면 {remainingTime.Seconds}초 남았습니다.");
}
}
4. UI에 남은 시간 표시
- GetRemainingCooldown() 메서드를 사용하여 남은 시간을 UI에 표시할 수 있습니다.
- 예를 들어, 광고 버튼 옆에 타이머를 표시하여 사용자가 언제 광고를 다시 시청할 수 있는지 알 수 있습니다.
오늘은 Unity에서 광고 쿨다운 시스템을 구현하는 방법을 알아봤어요.
AdCooldownManager 스크립트를 통해 광고 시청 빈도를 조절하고, 사용자의 광고 시청 경험을 개선할 수 있습니다.
이 시스템을 통해 광고 시청으로 인한 게임 밸런스 붕괴를 방지하고, 적절한 보상 체계를 유지할 수 있습니다.
지금까지 인텔리원스튜디오(IntelliOneStudio)였습니다!
감사합니다.
'디지털노마드' 카테고리의 다른 글
챗GPT 게임개발71: Unity에서 Game Center 및 Google Play Games 리더보드 구현하기 (0) | 2024.12.03 |
---|---|
챗GPT 게임개발70: Unity에서 다국어 지원과 언어별 폰트 적용하기 (4) | 2024.12.02 |
챗GPT 게임개발68: Unity에서 Google Mobile Ads로 리워드 광고 구현하기 (5) | 2024.11.29 |
챗GPT 게임개발67: Unity에서 Google Mobile Ads로 배너 광고 구현하기 (3) | 2024.11.29 |
챗GPT게임개발66: App Bundle 크기 초과 문제 해결! Unity로 Base APK 최적화하기 (1) | 2024.11.23 |