Funnel Analyzer Improvements

Hi everyone,

We’ve just pushed a (mostly cosmetic) update to funnels. I say “cosmetic”, but we think it’s a much better UI/UX that addresses several concerns that you, our users, have raised. The update includes:

  • Streamlined UI/UX
  • Design better aligned w/ Data Explorer
  • Ability to view multiple segments within the same graph
  • Ability to view both the funnel and its parameters within same graph
  • Overall conversion rate appears in funnel overview
  • Improved naming of funnel steps for improved clarity
  • Various minor bug fixes

This is not the end of our funnel update process. Keep an eye out for further improvements coming soon!

1 Like

Hi there, looks great!
Sorry to ask here, but can I set a funnel in code, with in the game? Or must each be set by hand online?
Thanks

ex, I have 6 worlds, 20 levels each, 120 levels total. I want to see what levels are played. I would prefer a single line of code, vs 120 entrances into the web portal, by hand.
Thanks

We don’t have a coding API, but we do have a new templating system which uses Standard Events to build out a funnel. It doesn’t precisely do what you’re asking, but it comes close. You can now click “From Template” and choose a Level Completion template, telling it how many levels you have. We currently limit this template to 50 levels (I’m investigating the reason for that limit)…but perhaps simply spin up one funnel for each world for now (or wait to see if we change it :wink: )? As I say, not perfectly in line with what you’re requesting, but hopefully would work for now.

1 Like

Ok great.
Thanks and INVESTIGATE!!! Tho if I can just create one per world, that should work.

Thank you.

Hi do the funnel set up the levels, in the web page, each level in world x, has a Level Started, and a Level Completed slot. What I am wondering is, how do I access these slots, via Code.

Is it a Analytics.CustomEvent()?

If so, what are the arguments I must pass to Analyitcs to insure the correct slot is filled?

Thanks

@renman3000

Yes, that is exactly correct. The Dashboard receives the events that are sent from your game.

using UnityEngine;
using UnityEngine.Analytics.Experimental;

public class GameManager : MonoBehaviour {

    void StartLevel(int level) {
        AnalyticsEvent.LevelStart(level);
        ///Other level start stuff
    }

    void CompleteLevel(int level) {
        AnalyticsEvent.LevelComplete(level);
        ///Other level start stuff
    }
}

This code example uses Standard Events, so it will automatically use the standard event names that are also used by the Funnel Template system. Here are some more resources about Standard Events:
Standard Events Asset Store page
Standard Events documentation
Standard Events Blog Post 1 - Onboarding
Standard Events Blog Post 2 - Application and Progression

ok, the only issue for me is, LevelStart()… How do I say World1Level1_Started().

And thanks for the help!
Cheers!

@renman3000

You can send the events in any format that would fit your game. I think the necessary modifications might put the funnel templates out of reach, but creating a funnel manually for 20 levels per world would not be too time consuming.

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

public class GameManager : MonoBehaviour {

    void StartLevel(int world, int level) {
        Dictionary<string, object> levelData = new Dictionary<string, object>();
        levelData.Add("world", world);
        levelData.Add("level", level);
        //Add any other level-specific data e.g. coins, player health, completion time, etc.

        //Format: world_1_level_1_start, world_1_level_2_start
        string eventName = string.Format("world_{0}_level_{1}_start", world, level);

        AnalyticsEvent.Custom(eventName, levelData);

        ///Other level start stuff
    }

    void CompleteLevel(int world, int level) {
        Dictionary<string, object> levelData = new Dictionary<string, object>();
        levelData.Add("world", world);
        levelData.Add("level", level);
        //Add any other level-specific data e.g. coins, player health, completion time, etc.

        //Format: world_1_level_1_complete, world_1_level_2_complete, etc.
        string eventName = string.Format("world_{0}_level_{1}_complete", world, level);

        AnalyticsEvent.Custom(eventName, levelData);

        ///Other level complete stuff
    }
}

And then the funnel definition would look for the events you’ve defined:

1 Like

Awesome, thanks! Finally had a chance to look at this. I have not used dictionaries yet. So kinda geeked!

Hi, this code, what is it in reference to? I see no ability for MonoDevelop to recognize it.

AnalyticsEvent.Custom(eventName, levelData);


Will this work?

Analytics.CustomEvent (eventName);

edit: Update::Will this work, it is hard to gauge, with out a real time pick up.

    public static void level_started(int int_level, int int_world){


        //level info, world level
        Dictionary<string, object> levelData = new Dictionary<string, object>();
        levelData.Add("world", int_world);
        levelData.Add("level", int_level);
        //Add any other level-specific data e.g. coins, player health, completion time, etc.
        //Format: world_1_level_1_start, world_1_level_2_start
        string eventName = string.Format("world_{0}_level_{1}_start", int_world, int_level);
        Analytics.CustomEvent (eventName);


        //clear
        levelData.Clear ();


        //level info, mode, difficulty
        levelData.Add ("mode", LoadingMng.ins.settings_vs);
        levelData.Add ("difficulty", LoadingMng.ins.settings_difficulty);
        eventName = string.Format ("mode_{0}_difficulty_{1}_start", LoadingMng.ins.settings_vs, LoadingMng.ins.settings_difficulty);
        Analytics.CustomEvent (eventName);




    }
    public static void level_completed(int int_level, int int_world){

        //level info, world level
        Dictionary<string, object> levelData = new Dictionary<string, object>();
        levelData.Add("world", int_world);
        levelData.Add("level", int_level);
        //Add any other level-specific data e.g. coins, player health, completion time, etc.
        //Format: world_1_level_1_start, world_1_level_2_start
        string eventName = string.Format("world_{0}_level_{1}_complete", int_world, int_level);
        Analytics.CustomEvent (eventName);


        //clear
        levelData.Clear ();


        //level info, mode, difficulty
        levelData.Add ("mode", LoadingMng.ins.settings_vs);
        levelData.Add ("difficulty", LoadingMng.ins.settings_difficulty);
        eventName = string.Format("mode_{0}_difficulty_{1}_complete", LoadingMng.ins.settings_vs, LoadingMng.ins.settings_difficulty);
        Analytics.CustomEvent (eventName);
    }

@renman3000

The code sample I used requires the Standard Events package from the Asset Store:

Thank you.

@ap-unity Hi, So I am finally installing the Custom Events, as you have suggested. It will be 24 hours before any data takes hold. I am curious if I am setting it up correctly. I have followed your steps very closely, just double checking. If you have the time, please go over.

Cheers

  1. All parameters in Funnel Analyizer are blank.
    https://s7.postimg.org/ifekrnby3/Screen_Shot_2017-12-15_at_11.59.26_AM.png
    Is this ok?

  2. As noted, each level is part of a designated world. So Level 1, World 1… kinda thing.
    That said, see code, and pic. Is this legit? Thanks
    //code:

    //set up

This should all be legit? I hope.

Anyhow, thank you for your help. Best.

@renman3000

Yeah, that’s fine. If the parameters are blank, then the Funnel step will just be triggered by the Custom Event with that name.

You aren’t using the levelData in your Custom Event. You can either add it to the event as the second parameter, or you can just remove it entirely if you don’t need it:

using UnityEngine;
using UnityEngine.Analytics;
    
public class GameManager : MonoBehaviour {
    
    void StartLevel(int world, int level) {
        //Format: world_1_level_1_start, world_1_level_2_start
        string eventName = string.Format("world_{0}_level_{1}_start", world, level);
    
        Analytics.CustomEvent(eventName);
    
        ///Other level start stuff
    }
    
    void CompleteLevel(int world, int level) {
        //Format: world_1_level_1_complete, world_1_level_2_complete, etc.
        string eventName = string.Format("world_{0}_level_{1}_complete", world, level);
    
        Analytics.CustomEvent(eventName);
    
        ///Other level complete stuff
    }
}

Also, wanted to mention that we do have real time Validation of Funnels now. The Validator is now on the Funnel Builder page, so you can test out events and make sure they are triggered correctly. We’re still working on the documentation for this, but the process is basically:

  1. Define the Funnel step with your Custom Event
  2. Trigger the Custom Event in the Editor and watch the funnel Validator to see if it triggered the right step.
1 Like

Great!
But I gathered from the page, and pop up windows that the initial funnel needs to be initialize, and that process is 24 hours. No?

That’s true after you create the funnel.

But while you are still building it, when you are adding steps, that is when the Funnel Validator is available.

1 Like

Really?
ok, cheers!!!

Is there any way I can find the average score of players on a given level ?
I send a level complete event which also contains the score player earned by player in that level.

Hi @brainydexter
You can add the level complete event in Data Explorer, then select score and average.
Here is an example.