유니티로 게임이나 어플을 만들때, 이벤트 팝업을 노출하는 일이 많습니다.

매번 이벤트 팝업이 나오면 사용자들의 경험상 좋지 않기 때문에 토글 체크 메뉴를 이용해서 7일간 보지 않기 같이 만드는 방법을 알아보겠습니다.

 

이벤트 팝업 패널 만들기

 

이벤트 팝업 만드는 형태는 사람마다 다르고 만들어야 하는 형태마다 다르기 때문에 대략적인 구조만 설명을 드리자면!

(이름은 임의로 마음에 드는 형태로 만들면 됩니다.)

1. eventPop : 제일 아래 백그라운드 이미지를 설치해서 팝업 아래 다른 것들이 가려지게 하면서, 전체 크기를 규정

2. eventPopBG : 이벤트 팝업 형태 제일 아래를 나타내며, 이미지 영역과 7일간 보지 않기 토글 영역으로 구분

3. popImage : 이벤트에 사용될 이미지 영역

4. popMenu : 일주일간 보지 않기 영역

 

일주일간 보지 않기 토글 메뉴 만들기

 

유니티 UI에는 토글 관련 기능을 편하게 구현하도록 Toggle이라는 오브젝트가 있습니다.

토글 기능을 붙이려는 오브젝트에 마우스 우클릭을 해서 나오는 메뉴에서 UI ▶ Toggle을 선택하면 생성이 됩니다.

토글 메뉴의 구조는 제일 아래 토글 영역 표시(백그라운드라고 보면 됨)와 체크 그리고 텍스트로 구성이 됩니다.

그리고 닫기 버튼을 추가합니다.

 

토글에 체크를 넣고, 닫기 버튼을 눌러 팝업을 닫으면 이제 일주일간 보지 않기 팝업의 기능이 시작되는 것입니다

이와 관련해서 이제 스크립트를 작성해야 합니다.

 

일주일간 보지 않기 스크립트 작성

 

액션 플로우는 아래와 같습니다.

 

1. 팝업 창이 닫힐때, 일주일간 보지 않기 체크가 되었는지 확인

 - 체크가 되었다면, 현재 시간 저장

2. 매번 앱이 실행될때 일주일간 보지 않기 체크 여부 확인 및 시간을 확인해서 7일이 경과했는지 체크

 - 경과했다면 이벤트 창을 열고, 아직 일주일을 경과하지 않았다면 이벤트 팝업이 열리지 않으면 됩니다.

 

한단계씩 스크립트를 구성해보겠습니다.

 

1. 팝업창이 닫힐때 체크 유무 및 날짜 저장

 

tog는 인스펙터 게임오브젝트 중에서 sevenDay라는 이름의 오브젝트가 있는지 확인하는 것입니다.

이렇게 쉽게 찾아낼 수 있지만, 만약 이 스크립트가 sevenDay 가 attach(부착)되어 있는 오브젝트에 없는 것이라면 해당 오브젝트를 찾을 수 없다고 나올 것입니다.

 

오브젝트 외부에서는 비활성화된 게임 오브젝트를 GameObject.Find로는 찾을 수 없다.

 

그 이유는 현재 이 게임 오브젝트는 비활성화 상태이기 때문입니다.

이런 경우 해당 오브젝트 부모 오브젝트가 활성화 된 상태에서 부모 오브젝트로부터 자식을 찾아가는 방식으로 해야 하는데요.

현재는 같은 게임 오브젝트 내의 자식 오브젝트이기 때문에 비활성화 상태에서도 이렇게 찾아낼 수 있습니다.

 

bool isSeven = tog.GetComponent<Toggle>().isOn;

 

토글 오브젝트에서 토글이 체크되었는지 확인하는 방법은 isOn이라는 bool 값을 리턴해서 확인할 수 있습니다.

isSeven이 True라는 것은 체크가 되었다는 것인데요.

if문으로 isSeven이 체크가 되었는지 확인을 해서 되어 있다면, 현재 시간 값을 받아냅니다.

 

그리고 PlayerPrefs로 저장을 하는데요. 그냥 시간으로는 저장이 되지 않습니다.

그러므로 시간을 ToString()을 이용해 문자열로 교체한 다음 SevenHide(원하는 이름)라는 키값으로 저장합니다.

 

이제 앱이 실행될 때, 시간을 체크해보겠습니다.

 

2. 앱 실행시 시간 체크해서 7일 경과 여부 확인

 

먼저 앱이 실행되자마자 일주일간 보지 않기 관련 PlayerPrefs 값이 있는지를 확인합니다.

만약 SevenHide라는 키 값이 존재한다면, 해당 값을 비교를 위해 날짜로 다시 변환해야 합니다. (문자열로 저장했으므로)

 

DateTime checkedTime = DateTime.Parse(sevenD);

 

여기서 sevenD는 string sevenD = PlayerPrefs.GetString("SevenHide")에서 저장한 문자열로 변환한 시간 값입니다.

이 값을 다시 시간 값으로 변경합니다.

 

DateTime curTime = DateTime.Now;

그리고 현재 시간을 구한 다음, TimeSpan 을 이용해서 시간차를 구합니다.

이때 현재 시간에서 과거 시간을 빼야 정상적인 시간차가 나올 것입니다. (절대값으로 해도 관계는 없습니다.)

 

TimeSpan 값이 7 이상이라면 일주일이 경과한 것이고, 그렇지 않다면 아직 일주일이 되지 않은 것입니다.

이에 따라서 팝업 창을 띄울지 말지를 분기해서 나타내면 됩니다.

 

글 마무리

 

더 전문적으로 심플하게 구현하는 분들도 많고, 서버를 이용해서 정보를 서버에서 팝업 열지 않기를 하는 경우도 많이 있습니다.

중요한 것은 내가 아는 수준에서도 만들어낼 수 있도록 연구를 하다보면 점점 더 나아지겠죠?

 

유니티 관련해서 다른 내용도 한번 보시기 바랍니다.

 

2021.03.16 - [프로그래밍] - 유니티 푸시 기능 추가하기

 

유니티 푸시 기능 추가하기

유니티로 모바일 앱이나 웹 앱 등 앱을 만들때 푸시는 중요한 요소로 작용합니다. 새로운 소식이나 이벤트가 있을때, 유저들에게 직접적으로 참여에 대한 요청을 보낼 수 있기 때문입니다. 그런

rich-informer.tistory.com

2021.03.06 - [프로그래밍] - ini 파일 유니티에서 읽고 쓰는 방법

 

ini 파일 유니티에서 읽고 쓰는 방법

ini 파일 유니티에서 읽고 쓰는 방법에 대해서 알려드립니다. 어플리케이션을 만들때 로컬에 있는 파일의 어떠한 정보를 읽고, 쓰고 할 필요가 있습니다. 자주 사용되는 파일 중에 config.ini가 있

rich-informer.tistory.com

+ Recent posts