Course: Let's Make a Game! - Brick Breakers

I have very good news for anyone attempting to build Brick Breakers using this tutorial. Although it’s a real mess and very difficult to follow, you can prevail and produce a fun game.

Even though I praise Sam for giving us this tutorial and opportunity to make a really cool little game with no C++ coding, this is a really, really poor way to recruit people into using Unreal Engine 5.

Because of this, I decided to build this game a 2nd time, but this time I stream my game development, live on Twitch (then re-running & storing them on YouTube). By the time I’m finished, there should be about 5 streams total (I just streamed the 2nd one yesterday). In the streams I cut through the mistakes and errors in the tutorial (and solve my own goofs, hah).

If anyone would like to start skimming through the streams, here’s the growing playlist for Brick Breakers. Also, yes I might criticize the author a lot, but just ignore it. It’s all in good humor:

Game Development streams of Brick Breakers: (start with Tiny Game #3 streams)

6 Likes

This is an optional feature for anyone who has finished this tutorial: I noticed that the ball can often get “stuck” bouncing nearly horizontally, essentially messing up the game. I spent a whole day making a fix, and here’s what I attached to the BP_Ball’s Event Hit node. It checks if the ball’s vertical movement is below a certain threshold, then it swaps the X and Z velocity and tosses in a touch of randomness too. It works really well, even if it looks slightly odd when it triggers. Feel free to replicate this in your ball’s event hit logic:

Add two public variables too:

  1. horizontal_movement_trigger , I set it to 400
  2. deflect_randomizer, I set it to 375

2 Likes

Hi brickbreakers… well I finally completed my version of Brick Breakers, and I released it! Not only is it available publicly, but I also have all of the code/files checked into GitHub publicly too.

Here it is. Building the levels was a lot of fun and a learning experience. There are rotating bricks, embedded bricks, and the chaos/destruction system, which bugs out often unfortunately.

I used UE 5.0.3 for this, and I hear some of the chaos-related crashes have been identified and solved in 5.1.

Please download it and let me know what you think!

1 Like

I agree with most people here; this “tutorial” has been very hard to follow, not because it’s introducing advanced concepts or whatever but because everything is either inconsistent or too vague. There are naming inconsistencies, what it tells me to do and what it shows are almost always different. Most of the time I’m not sure where I need to put the code so I need to read the sentence 20 times and then toss a coin. It’s a real pain to follow through, I wish it was prepared better because i really liked the project.

Another “I agree with everything that’s been said” response. I’ve been a technical artist for 28 years, and this is the furthest thing I’ve ever seen from a “beginner” tutorial in context of incomplete/error-ridden execution and a lack of proper & thorough explanation. If you’re going to pitch a learning resource to new devs then it needs to be as methodical and as near to perfectly precise as possible. It also needs to provide background and basis for fairly abstract concepts, e.g. interfaces, and also not introduce concepts (data persistence) and implement code for said concept without follow-through (nowhere was the actual creation of the interface elements which utilized the persistent data covered).

Also, don’t bait-and-switch polished visuals where properly prototype-quality asset instances should exist as part of the explanation up to that point. Oh yes, and for true beginners, things like basic setup of game levels such that the emissive materials glow (post process volume) and how to achieve the stylized background in the game (manipulation of atmospheric elements and exponential height fog) is also important. Don’t show stuff like that unless it’s explicitly explained, or links to resources which detail how to do it are provided.

This could be a brilliant intermediate-level, fully-fledged game implementation tutorial in a familiar and fun genre. However, as it stands, I think it’s gets people excited and then, almost universally, frustrates the hell out of them because they think this it is “beginner level”, and the full scope of this game implementation is absolutely not. At least not in context of its target audience.

2 Likes

Excellent contribution! I’ll watch all of this.
Part of the issue (this is my first tutorial) is that I cannot find the video you are following. I see nothing but a text description in the Epic Dev Community which is even harder to get right.
(Currently, my spline move is sort of working, but the paddle is perpendicular to the spline when moving… even though it isn’t in the blueprint. Hope to sort that out.)

Hi every-one. I’m trying to do this course using the new Enhanced input system.
I can move the mouse cursor, but the Set Play Rate is … weird and looks really buggy. Any one tried and succeeded to have proper movement with the Enhanced Input mapping?

Hey,

I appreciate its a bit late based on when you posted, but I thought I’d offer what I did using the Enhanced Input System, perhaps it will help the next person who follows along…

I’m currently using version 5.3.2.

First, we’ll create our InputAction

  • Create an InputAction, I named mine IA_MoveHorizontally
  • Set the Value Type to Axis 2D
  • Leave the Triggers and Modifiers empty
  • Save

Next we create our InputMappingContext;

  • Create an InputMappingContext, I named mine IMC_Default
  • Click the Add Mapping icon (+)
  • Select IA_MoveHorizontally
  • Click the Add a Control Binding icon (+)
  • Change the type to the mouse, and select Mouse XY 2D-Axis
  • Save

I also added keyboard support;

  • Add entries for keys A and D
  • For the A key entry I added a Negate modifier for the X axis

  • Open the PlayerController asset you created, I named mine BP_PlayerController
  • Add the BeginPlay event
  • Add the following nodes to add the InputMappingContext asset you created above

We need to add our InputMappingContext (IMC_Default) to the EnhancedInputLocalPlayerSubsystem;

  • Check you’ve set the Mapping Context property in the Add Mapping Context node
  • Click Compile
  • Save

Next we respond to our InputAction event;

  • Right-click on the graph and type IA_MoveHorizontally
  • Select the item under Enhanced Action Events

image

Here, you can add the nodes as per the course where the original Input system was used.

I did however make one addition, which was to call the Paddle’s StopMoving function from the Completed execution pin on the event;

At this stage, the mouse moves as you would expect. Additionally, I have the keyboard support, although be aware that the maximum speeds of mouse vs keyboard will differ. One approach to resolve this would be to clamp the mouse movement at the maximum keyboard value (e.g. axis value 1 * PaddleSpeedMultiplier).

Hope this helps :slight_smile: