Unreal Match 3 - A New Mobile Learning Resource!


Unreal Match 3 is built from the ground up to help developers learn how to make mobile games using Unreal Engine 4.

With Unreal Match 3, you can:

Unreal Match 3 utilizes UE4 features such as the Unreal Motion Graphics (UMG) UI editor and the Paper 2D toolset. With the Unreal Match 3 project, you can look through the game’s Blueprint scripts, art assets, and C++ code, and use the assets for your own projects. If you’ve ever wondered how UE4 supports ads, achievements, in-app purchases, and leaderboards, this download will show you how they work in a live environment, as well as how they were set up within the project.

We’ve had a blast creating this learning resource for you all - check it out and have fun!

Just a note, for Mac users downloading the project in the launcher:

  • If you’re not going to set up your own Flurry code (instructions here), disable the Flurry Analytics Plugin before building the project.
  • The project is set up for Shipping, so if you’d prefer to build a Development build, open your DefaultEngine.ini config file and change bDevForArm64=True to bDevForArm64=False.

YEUS! Been waiting for this :slight_smile:

Very awesome, though I’ve already been through all the frustration of figuring this out myself.

One thing though: You can’t restore purchases on Android, any ETA on that? It’s fairly crucial that this is possible.

Awesome. Thanks Epic!

What’s the licensing terms with regards to the source code?

from above: "you can look through the game’s Blueprint scripts, art assets, and C++ code, and use the assets for your own projects. "

I’ve seen nothing that contradicts how we can use all the assets that Epic has given freely. Use them to your hearts content in personal, hobbiest, or commercial projects. Can’t sell the asset itself, but can use it in commercial projects.

Of course, that’s just my armchair lawyering.

Go crazy! :slight_smile:

Any chance of a future Match 3 video tutorial?


Tried to compile for the Android. Won’t compile.

Great stuff, thx a lot :slight_smile:

Huge thanks for this! I hope the docs are detailed, will look into them soon.

Til then - I saw on Google play this is a 62Mb download limit. Does that sound large? That puts it right along Candy Crush Saga which has a lot more content. I guess I’m really wondering if there are size optimizations to come later down the line or if this size is expected?


Hey . Please report this to the Bug Reports section of the UE4 Answerhub, along with all details and error messages, and we can investigate why this is failing to compile.


This is a great initiative. Will this project get kept up to date with future UE developments? Tappy Chicken for instance could do with a small remake since UMG gave us a better option for UI work but it’s not been kept up to date. No biggie for Tappy Chicken, would be nice to see this project getting continued love if needed though.


Hi Lauren! There are a few local files on your computer which were not copied over when the demo was downloaded. Both of these are the media files (UE4_Logos): D:/Lauren.Ridge_D1146_Main/UE4-UserContent/4.10/CompleteProjects/Match3/Content/Movies/UE4_Logo_Portrait368.mp4

Any chance you could release these 2 movies so that we can link to them properly?

Something struck me - did you guys add code to make sure there will always be at least one solution at any one time? How is this handled? It’d need to be added in code once new gems fall down as well once three items have been matched.

Hi RumbleMonk - glad you like it! We will for sure keep Unreal Match 3 up to date with engine releases. We’ll also definitely keep an eye out for ways we can add additional learning materials for new or existing features - if UMG has an update that makes sense to incorporate, or as new mobile support gets added, there’s a good chance it could pop up in Unreal Match 3. :slight_smile:

We do actually have code that checks if there is at least one match on the board - it’s in Grid.cpp, in the IsUnwinnable function. Hope that helps!

Hi SaviorNT! Use of the UE4 logos and animated splash screens are governed by a separate license which you can find here - Unreal Engine Branding-Richtlinien und Verwendung von Markenzeichen. The one in Unreal Match 3 is a resized version of the Animated UE4 Logo linked on the top right of that page.


Gotcha, it’s not by any stretch of the imagination a big deal, as the logo animations can be replaced / removed. I did have a question though in regards to the c++ classes, and this is probably a very basic question, however, during the migration to a different project, the c++ doesn’t migrate. I can re-do the c++ by just copying/pasting the code in VS, but is there another way of doing that within the engine?

No, the best way is to port the C++ code manually, as you said.

For those who are interested in the technical details of this problem:
The reason that there isn’t a feature to do this automatically is because the problem of porting over just the code you need can be very complicated, and is a general C++ issue as opposed to an Unreal issue. Here’s what would be involved, and what problems would come up:

  1. We can’t just migrate the .cpp and .h source files for your class, because your class could have dependencies. A dependency is any outside class, struct, function, variable, or macro that your C++ class uses. We need to migrate all dependencies or your code won’t work. For example, if you create a game mode called AMyGameMode, and that game mode keeps track of or interacts with a special actor in your level of type AMyActor, then the AMyActor class needs to be migrated. We also need to migrate all of the dependencies that AMyActor introduces, and then the dependencies of those dependencies, etc. This in itself is not a big deal, if we could identify what the dependencies are.
  2. So what happens if you have a dependency that the engine doesn’t know about, such as a struct or class not marked as USTRUCT or UCLASS? This would cause the migration to fail. In fact, even if you use only USTRUCT and UCLASS types, any function call or member variable that isn’t a UPROPERTY or UFUNCTION will be invisible to the engine, and could result in a missed dependency. You could even have something as simple as a macro (written as “#define” in code) that your class uses and that is needed to compile your code, and the engine would have no way of knowing about it without examining the source code directly. In general, anything you do in the body of any function, or anything that isn’t tagged with a reflection macro (UCLASS, UPROPERTY, etc.), will not be visible to the engine, so dependencies could easily be hidden in many ways and in many different places.
  3. Ultimately, dependencies are a property of your C++ code itself and can easily be hidden if analysis of the source code isn’t performed. This type of problem is better addressed by a dedicated, general-purpose C++ tool that analyzes your code, finds all dependencies for the class you want to migrate, and migrates everything you need.

Hope this helps!