주요 이벤트(Core Events)
커스텀 이벤트

스탠다드 이벤트

스탠다드 이벤트를 사용하여 다음의 다섯 가지 주요 영역에서 사용자 경험과 플레이어 동작을 추적할 수 있습니다.

  • 애플리케이션(Application): 애플리케이션 사용자 인터페이스의 기본 요소 사용을 추적합니다.
  • 진행도(Progression): 애플리케이션 또는 게임의 플레이어 진행도를 추적합니다.
  • 온보딩(Onboarding): 플레이어와 애플리케이션/게임 간의 최초 인터랙션을 추적합니다.
  • 참여(Engagement): 소셜 공유, 업적 등과 관련된 중요 액션을 추적합니다.
  • 수익화(Monetization): 수익 관련 이벤트와 게임 내 경제를 추적합니다.

스탠다드 이벤트 리스트에는 게임 및 애플리케이션에서 추적하면 도움이 되는 요소들이 포함되어 있습니다. 예를 들어 대부분의 게임에는 완료한 퍼즐 수, 플레이한 매치 수, RPG 게임의 획득 경험치 등 플레이어 진행도라는 개념이 있습니다. 스탠다드 진행도 이벤트를 추적하면 플레이어가 게임 진행을 멈춘 지점 그리고 궁극적으로는 게임플레이를 멈춘 지점을 자세히 파악할 수 있습니다.

대부분의 스탠다드 이벤트는 애널리틱스 이벤트가 전송될 때 게임 상태에 관한 추가 정보를 제공하는 필수 및 옵션 파라미터를 정의합니다. 자체 커스텀 파라미터를 정의할 수도 있습니다. 이벤트에 대한 파라미터를 설정하면 이벤트가 발생할 때 수집되는 데이터를 필터링할 수 있습니다. 스탠다드 이벤트와 커스텀 이벤트에 대한 시각화 도구(예: 데이터 탐색기(Data Explorer), 퍼널 분석기(Funnel Analyzer), 세그먼트 빌더(Segment Builder))는 애널리틱스 대시보드에서 확인할 수 있습니다.

Unity 애널리틱스는 사용자당, 시간당 수락하는 스탠다드 이벤트와 커스텀 이벤트의 수를 100개로 제한합니다. 즉, 게임을 플레이하는 단일 사용자가 시간당 100개가 넘는 스탠다드 이벤트와 커스텀 이벤트를 트리거하면 애널리틱스는 초과 분량의 이벤트를 폐기합니다.

참고: Unity 2017.3 이전 스탠다드 이벤트를 사용하려면 먼저 Unity 에셋 스토어에서 스탠다드 이벤트 SDK를 다운로드하여 임포트하십시오.

애플리케이션 이벤트

애플리케이션 이벤트는 게임 외부(예: 메뉴, 레벨 전후 컷씬 화면)에서 플레이어와 애플리케이션 사이의 인터랙션을 추적합니다. 애플리케이션 이벤트를 분석하여 플레이어가 사용자 인터페이스의 기본 요소를 여러분이 기대하는 만큼 사용하는지 확인할 수 있습니다.

이벤트 이름 목적
screen_visit 플레이어가 고득점 또는 설정 화면과 같은 UI 화면을 열었습니다.
cutscene_start 플레이어가 시네마틱 컷씬을 감상하기 시작했습니다.
cutscene_skip 플레이어가 시네마틱 컷씬을 건너뛰었습니다.

진행도 이벤트

진행도 이벤트는 플레이어가 게임을 진행하는 과정을 추적합니다. 스탠다드 진행도 이벤트를 분석하여 게임 내 플레이어 진행도를 모니터링할 수 있습니다.

이벤트 이름 목적
game_start 플레이어가 새 게임을 시작했습니다(시작과 끝이 분명한 게임의 경우 유용함).
game_over 플레이어가 게임을 끝냈습니다(시작과 끝이 분명한 게임의 경우 유용함).
level_start 플레이어가 레벨을 시작했습니다.
level_complete 플레이어가 레벨을 성공적으로 완료했습니다.
level_fail 플레이어가 레벨에 실패했습니다.
level_quit 플레이어가 레벨에서 나갔습니다.
level_skip 플레이어가 레벨을 건너뛰었습니다.
level_up 플레이어의 등급 또는 RPG 게임 경험치가 올랐습니다.

온보딩 이벤트

온보딩 이벤트는 최초 사용자 경험(FTUE)을 추적합니다. 스탠다드 온보딩 이벤트를 분석하여 튜토리얼의 효과를 모니터링할 수 있습니다.

이벤트 이름 목적
first_interaction 플레이어가 최초로 게임을 실행한 후 인터랙션을 완료했습니다.
tutorial_start 플레이어가 튜토리얼을 시작했습니다.
tutorial_step 플레이어가 튜토리얼의 마일스톤을 통과했습니다.
tutorial_complete 플레이어가 튜토리얼을 완료했습니다.
tutorial_skip 플레이어가 튜토리얼을 건너뛰었습니다.

참여 이벤트

참여 이벤트를 통해 플레이어가 게임에 참여하는지, 그리고 리텐션 및 바이럴리티와 높은 상관 관계가 있는 액션을 취하는지 파악할 수 있습니다.

이벤트 이름 목적
push_notification_enable 플레이어가 푸시 알림을 활성화했습니다.
push_notification_click 플레이어가 푸시 메시지에 응답했습니다.
chat_msg_sent 플레이어가 채팅 메시지를 보냈습니다.
achievement_unlocked 플레이어가 업적을 완료했습니다.
achievement_step 플레이어가 업적을 위한 마일스톤을 완료했습니다.
user_signup 플레이어가 소셜 네트워크에 연결했습니다.
social_share 플레이어가 소셜 네트워크를 통해 초대장 또는 선물 등을 공유했습니다.
social_accept 플레이어가 소셜 네트워크를 통해 무언가를 수락했습니다.

수익화 이벤트

수익화 이벤트는 수익 및 게임 경제를 추적하여 리소스 균형을 맞추고 수익원을 개선하도록 도와줍니다.

이벤트 이름 목적
store_opened 플레이어가 상점을 열었습니다.
store_item_click 플레이어가 상점에서 아이템을 선택했습니다.
iap_transaction 플레이어가 실제 현금을 지불하여 인앱 구매를 했습니다.
item_acquired 플레이어가 게임 내에서 자원을 획득했습니다.
item_spent 플레이어가 게임 내에서 아이템을 소비했습니다.
ad_offer 플레이어에게 광고를 볼 기회가 있었습니다.
ad_start 플레이어가 광고를 보기 시작했습니다.
ad_complete 플레이어가 광고를 끝까지 봤습니다.
ad_skip 플레이어가 광고가 끝나기 전에 건너뛰었습니다.
post_ad_action 플레이어가 광고에서 유도한 액션을 완료했습니다.

스크립팅 스탠다드 이벤트

스크립트에서 스탠다드 이벤트를 디스패치하려면 다음의 네임스페이스를 추가하십시오.

using UnityEngine.Analytics;

참고: Unity 에셋 스토어에서 받은 스탠다드 이벤트 SDK를 사용할 때는 UnityEngine.Analytics.Experimental 네임스페이스를 대신 사용해야 합니다.

이제 AnalyticsEvent 클래스를 사용하여 스탠다드 이벤트를 디스패치할 수 있습니다. 각 스탠다드 이벤트에는 해당하는 정적 함수가 있습니다. 예를 들어 game_start 이벤트를 보낼 때는 다음 함수를 호출하십시오.

AnalyticsEvent.GameStart();

대부분의 스탠다드 이벤트에는 필수 파라미터와 여러 개의 옵션 파라미터가 포함되어 있습니다. 자체 추가 파라미터를 사전에 추가할 수도 있습니다. 예를 들어 ScreenVisit 이벤트를 사용하여 플레이어가 방문하는 화면뿐만 아니라 방문하기 이전 화면도 추적하고 싶은 경우 다음과 같이 해당 정보를 사전 오브젝트에 전달할 수 있습니다.

public static void ReportScreenVisit(string screenName, string currentScreenName)
{
    AnalyticsEvent.ScreenVisit(screenName, new Dictionary<string, object>
    {
        { "from_screen", currentScreenName }
    });
}

필수 파라미터, 옵션 파라미터(사용하는 파라미터만 해당), 추가 파라미터는 총합 10개를 넘을 수 없습니다. 즉 이벤트 함수에 2개의 필수 파라미터가 있고 2개의 옵션 파라미터 중에서 하나를 설정한 경우 최대 7개의 추가 키 값 쌍이 포함된 사전을 함수에 전달할 수 있습니다. 동일한 이벤트에서 옵션 파라미터를 2개 모두 설정했다면 사전에는 6개의 추가 키 값 쌍만 포함할 수 있습니다.

스탠다드 이벤트 코드 예제

다음 클래스에서는 스탠다드 MonoBehaviour 이벤트 함수를 사용하여 레벨의 시작 및 끝과 관련된 스탠다드 이벤트를 디스패치하는 예제를 제공합니다.

Awake 함수는 level_start 이벤트를 디스패치합니다. 이 예제는 레벨 이름과 레벨 인덱스를 둘 다 제공하지만, 그중 하나만 필요합니다. 또한 이 예제는 오브젝트의 이름과 인덱스를 사용하지만, 다른 값을 사용할 수도 있습니다.

OnDestroy 함수는 level_complete, level_fail, level_skip 또는 level_quit 이벤트를 디스패치합니다. 이는 현재 레벨 상태 값에 기반합니다(실제 게임에서는 이 예제에서 정의된 SetLevelPlayState() 함수를 사용하여 레벨의 다른 코드에 의해 설정될 수 있음). 예제에서는 “customParams” 사전을 통해 이러한 이벤트에 추가 파라미터를 제공합니다.

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Analytics;

public class LevelEventManager : MonoBehaviour {
    public enum LevelPlayState {InProgress, Won, Lost, Skip, Quit}

    private Scene thisScene;
    private LevelPlayState state = LevelPlayState.InProgress;
    private int score = 0;
    private float secondsElapsed = 0;
    private int deaths = 0;

    void Awake () {
        thisScene = SceneManager.GetActiveScene();
        AnalyticsEvent.LevelStart(thisScene.name, 
                                      thisScene.buildIndex);
    }

    public void SetLevelPlayState(LevelPlayState newState){
        this.state = newState;
    }

    public void IncreaseScore(int points){
        score += points;
    }

    public void IncrementDeaths(){
        deaths++;
    }

    void Update(){
        secondsElapsed += Time.deltaTime;
    }

    void OnDestroy(){
        Dictionary<string, object> customParams = new Dictionary<string, object>();
        customParams.Add("seconds_played", secondsElapsed);
        customParams.Add("points", score);
        customParams.Add("deaths", deaths);

        switch(this.state){
        case LevelPlayState.Won:
            AnalyticsEvent.LevelComplete(thisScene.name,
                                             thisScene.buildIndex, 
                                             customParams);
            break;
        case LevelPlayState.Lost:
            AnalyticsEvent.LevelFail(thisScene.name,
                                         thisScene.buildIndex, 
                                         customParams);
            break;
        case LevelPlayState.Skip:
            AnalyticsEvent.LevelSkip(thisScene.name,
                                         thisScene.buildIndex, 
                                         customParams);
            break;
        case LevelPlayState.InProgress:
        case LevelPlayState.Quit:
        default:
            AnalyticsEvent.LevelQuit(thisScene.name,
                                         thisScene.buildIndex, 
                                         customParams);
            break;
        }
    }
}

이 예제에서는 OnDestroy()에서 생성된 커스텀 파라미터 사전을 한 번만 사용합니다. 하지만 이러한 사전을 사용하는 이벤트를 자주 디스패치하는 경우 매번 새 사전을 만드는 것보다는 단일 사전 인스턴스를 생성하여 재사용하는 것이 좋습니다. 사전 오브젝트를 재사용하면 향후 프레임에서 가비지 수집 작업에 필요한 메모리 할당량이 감소합니다. 자세한 내용은 애널리틱스 이벤트 파라미터를 참조하십시오.


  • 2018–03–02 편집 리뷰 없이 페이지 게시됨

  • 2018–03–02 - 이 날짜를 기준으로 서비스가 Unity 5.2 이상 버전과 호환되지만, 버전 호환성은 변경될 수 있음

  • Unity 5.2의 새로운 기능

주요 이벤트(Core Events)
커스텀 이벤트