The Game
Unity Lyrics


Jump to: Overall Meaning ↴  Line by Line Meaning ↴

Expectations, of things that will be.
Apprehension for what's inside of me.
Infatuation, with things that I cannot see.
Desperation, in knowing the door but having no key.
Always, thinking, of who I am.
Wanting, needing, a place to turn.
Struggling, to search for a way.
Hoping that someday. Ill get my say.
Trying to live my life day by day.
Searching for a path, man.
One that won't lead me astray. Growing, changing, I'm scared in here.
Living loveing the game of life.
Man, all this shit. It brings me down.
Man, all the people laughing from the crowd.
And all their pain, I see through these eyes.
Man, so much fear. Seen in your eyes.




Always thinking of who I am.
Living, loving, the game of life.

Overall Meaning

The lyrics of Unity's song "The Game" convey a sense of uncertainty and apprehension about life and one's place in it. The singer expresses expectations for the future, but also a sense of desperation at being unable to access what they desire. They feel infatuation with things beyond their grasp and struggle to find their identity and purpose in a constantly changing world. The idea of living day by day is repeated throughout the song, suggesting a need to take each moment as it comes and find a path that won't lead them astray.


The singer also acknowledges the difficulties of life, including the pain and fear they see in other people's eyes, and the sense of being weighed down by the struggles and expectations of society. However, despite all of this, there is a sense of resilience and determination, as they continue to live and love the game of life, even when it feels like a struggle.


Line by Line Meaning

Expectations, of things that will be.
anticipating what is yet to come in my life


Apprehension for what's inside of me.
feeling uneasy about the unknown aspects of myself


Infatuation, with things that I cannot see.
being fixated on intangible ideas or concepts


Desperation, in knowing the door but having no key.
feeling hopeless because I understand what I want but lacking the necessary means to achieve it


Always, thinking, of who I am.
constantly reflecting on my true identity


Wanting, needing, a place to turn.
yearning for a reliable source of support


Struggling, to search for a way.
finding it difficult to identify a clear path forward


Hoping that someday. Ill get my say.
holding onto the desire to one day express myself freely


Trying to live my life day by day.
attempting to take one step at a time in my journey


Searching for a path, man.
actively seeking a direction in life


One that won't lead me astray. Growing, changing, I'm scared in here.
seeking a path that won't mislead me, but apprehensive about the unpredictable changes that may come along the way


Living loveing the game of life.
embracing the challenges of life and finding joy in experiencing them


Man, all this shit. It brings me down.
feeling weighed down by the difficulties of life


Man, all the people laughing from the crowd.
observing the laughter of others around me, but feeling disconnected from their joy


And all their pain, I see through these eyes.
empathetically recognizing the struggles of others


Man, so much fear. Seen in your eyes.
noticing a great deal of fear in the eyes of those around me


Always thinking of who I am.
continuously contemplating my true identity


Living, loving, the game of life.
enjoying the journey of life with all its ups and downs




Lyrics © BMG Rights Management, Universal Music Publishing Group, Sony/ATV Music Publishing LLC
Written by: K. CARTER, PATRICK LEONARD

Lyrics Licensed & Provided by LyricFind
To comment on or correct specific content, highlight it

Genre not found
Artist not found
Album not found
Song not found
Most interesting comments from YouTube:

@CodeMonkeyUnity

Really great overview of the basics coupled with the usual excellent editing! Nice!

Some more advanced concepts for anyone who wants to keep learning to the next level:
- Naming Rules: They can be whatever you want, as long as you are consistent. Unity already uses PascalCase for functions so you should write your own functions with PascalCase as well in order to avoid Start, Update with one naming rule and custom functions with another.

- Magic Numbers: Using numbers directly in the code can make it really tricky to remember what they mean when you return to the code after a few weeks.
For example at 12:15, what does that "10" mean? As you are writing the code obviously you know what it means, but you will forget that meaning after some time. So instead of using magic numbers you should always give it a proper descriptive variable name. If you just use the value in that one place you can make it a local variable.
You can see the huge difference with regards to code readability once Mark changes it to a variable, the code is much easier to understand. When you come back to that code 1 month from now there's no need to remember what "10" meant since it uses a proper variable name that clearly explains what it does.
More info on Magic Numbers: https://youtube.com/watch?v=CQ5xHgRZGQo

- Making everything public: When you make something public you are allowing that field to be both read and written to from anywhere in your entire codebase.
For example at 11:08 the Rigidbody is public but you don't want another random class to randomly modify that field. If you had another script that set that field to null while the game was running then everything would break. With the field set as public there is nothing to stop that from happening.
So the better approach is to make it private, that way only that class can read and write to that field, no other class can modify it in any way. Good programming is all about minimizing complexity, the more you limit how accessible something is the easier it is to understand, you don't need to keep in mind your entire codebase since only the code in that class can read or write that field.
So in that case you have two better options, you can make it private, but then you can't drag the reference in the inspector. Since the Rigidbody is on the same object you can grab the reference with GetComponent<Rigidbody>(); that's one approach.
Another approach is make it private but add the attribute [SerializeField] this lets you make a field private so it's not accessible from any other class but it is accessible from the Unity editor. So with that you can drag the reference in the editor directly.
More info on why you should NOT make everything public https://www.youtube.com/watch?v=pD27YuJG3L8

- Tags: They are strings and Strings are very error prone so you should really not use them, if you write "logic" instead of "Logic" it will break, if you write "Logic " it will break, "Iogic" "L0gic", etc. Just looking at it they all look correct and the code doesn't give off any errors, but when you run the game everything will break and it will cause you a lot of headaches. Instead of Tags either drag the reference directly or use the Singleton pattern.
More on why you should avoid strings: https://www.youtube.com/watch?v=Q8n1uFTG97s

- Updating UI State: As I mentioned the main goal with good programming is minimizing complexity. In order to do that one of the best concepts is decoupling. You want your scripts to be as separated from everything else as possible, you want to limit interconnections as much as you can.
So for example for updating the UI, 35:35 you should not have the Pipe Logic class tell the UI class what to do, that way the scripts are tightly coupled. If you remove the UI from the project everything will break because the Logic class expects the UI to exist.
One excellent C# feature that really helps solve this are Events. This is how you can define an event, like OnPassedPipe which you could define on the Bird class, and then you fire that event whenever you want. Then some other class, like the UI class, can listen to that event and do whatever logic it wants, like updating the score text.
That way the UI class would be completely decoupled from the Bird class. You could remove the UI and the code would still compile because they are not directly connected.
Same thing for the GameOver logic, the Bird should fire off some kind of OnDead event which the GameOverScreen would listen to and show itself.
Here's some more info on C# Events https://www.youtube.com/watch?v=OuZrhykVytg

- Text: Unity has two Text systems (which itself has two components for both UI and World)
Mark mentioned it at 43:21 how the Text used in the video is the Legacy text which is extremely limited so nowadays you should instead use TextMeshPro
In the code, instead of using UnityEngine.UI; you use using TMPro;
For the field instead of Text you would use TextMeshProUGUI for UI Text and TextMeshPro for World text.

- Input: With regards to Input, the new Input System is indeed much more capable but for learning and quickly making something using the legacy Input Manager is still an excellent option, it's what I use when I'm just making a prototype since it's very easy to use.
If you want to learn more about the new Input System I covered it here https://www.youtube.com/watch?v=Yjee_e4fICc

- Render Pipelines: Mark quickly selected the 2D template and started making the game, this template uses what is called the Built-in Render Pipeline
This is the render pipeline that Unity has had for years, it works great but nowadays you have two other options
HDRP or the High Definition Render Pipeline which is the render pipeline you want to use if your game is pushing visuals to their limit.
URP or the Universal Render Pipeline, this is the option you should probably be using nowadays, you have many more features like 2D lights, Shader Graph, etc.
There are other Templates that you can download which come with the Render Pipeline already set up.
In most cases nowadays you should be using URP, it's what I always use in my videos and its what I'm using in my upcoming Steam game Total World Liberation https://www.youtube.com/watch?v=6DGDWfPdn3w

- Unity Versions: In the beginning Mark downloaded the version that was automatically selected which is indeed the one you should be using, but if you search you might see some more versions, here's how they are organized.
You have TECH, these are the more recent versions, right now it would be 2022.1, you should only use these when you have a specific feature you want to play around with that only exists in this version, or if you're making a game that is 1+ years away from release.
ALPHA, BETA, as the name implies these are the upcoming versions and are not guaranteed to be extremely stable, so only use these when trying something on the bleeding edge.
For 99% of cases you should use the version it automatically selects which is the LTS or Long Term Support version. So right now you should be using 2021.3 LTS, and in about 6 months you can use 2022.3 LTS
More on Unity versions https://www.youtube.com/watch?v=LLYhTWEX2Wc


Great job with the video! I'm sure this will help tons of people on their game dev journey!



@michaelcooper9554

I'm a school teacher that uses Unity for our game dev class. This is possibly the best introductory tutorial I have ever seen. All the fundamentals covered in a short, easy to understand manner that gives a learner a viable end product to show off, and ideas for further development and learning. Amazing work Mark.

EDIT - 06/02/2023 - WIll be using this tutorial as part of a Unity introduction for my game dev class, will report back how the students go with it!

EDIT 12/07/2023
Did a survey with the students at the end of course, asked about this video tutorial, here are the results

Average rating out of 5 (rather unscientific question) - 4.13

What the students said:
It was very fun and exciting to see a game which you coded work.

Straight forward and helpful for clueless beginners.

The tutorial is very clear and easy to follow

Straight forward and very helpful.

It was easy to listen to, no overcomplicated steps and enjoyable to do.

thought I wasn't here for most bit, he could of have been more specific about certain settings and what we were meant to do (not shown in the video)

Nice voice and good for beginners.

Very organized and it a great transcendence

Easy to understand and follow.

Good experience to learn more about game programmings.

It's detail and easy to understand

I think its pace and information is good for beginners for their unfamiliarity with coding

It was pretty good, the only thing that kind of threw me off was his strong accent.

Excellent pacing which gave the time for you to work on it, and took the time to explain the purpose of each function

straight forward and easy to understand and complete

It very gud

it was simple and good

It was good for a starting tutorial for flappy bird.

the tutorial was good, but there was a lot that had to be explained outside it.

Should have more explaining on the code.

It's long but it helps you understand a lot of stuff



@MacandShiv

Thank you for this. I had zero game dev or programming experience and I already feel like it's clicked after this one tutorial. For anyone who's working on the 'next steps', I'd like to share some of the things I did and how I did them:

First, I realized there were a bunch of things I wanted to do when the game over screen shows. Aside from making it so that the user can no longer control the bird (which was covered in the tutorial), I wanted:

- The pipes to stop spawning
- The pipes that had already spawned to stop moving
- The score to stop counting up if the bird accidentally fell through a middle pipe when the game was over

Plus a few other things. To make this easier, I thought it would be smart to make a new bool in the logic script that I could reference from all the other scripts that needed to change. This bool would tell the other script whether or not the game over screen was active.

So, I made a public bool in the Logic Script and called it gameIsOver. I set it as ==false as default at the top of the script. Then, in the existing gameOver function in the logic script, I added a line of code to change it to true (gameIsOver=true).

This would make it so that gameIsOver = true when the gameover screen is active, and back to = false when the game is restarted.

All I had to do then was set gameIsOver==false as an extra condition for the pipes to spawn in the PipeSpawnerScript, and as an extra condition for the pipes to move in the PipeMoveScript, and as an extra condition for the addScore function to run in the MiddleScript. This is relatively easy, but I won't tell you exactly how to do it so you can try yourself (hint: you need to use double ampersands '&&').

The cool thing about doing it this way is that you always have the gameIsOver bool to reference whenever you want to do something specifically when the GameOver screen is active, so it feels future proof.

If anyone has any feedback or thinks I could have done this in a better way, let me know. I'm eager to learn :)



@Lugmillord

An addition to this fantastic tutorial:
There are two different methods for initialization. Awake and Start
Use Awake so the script can initialize its own values that are independent from other objects / scripts. Use Start so the script can get stuff from other components.
Awake is called for all scripts first and then Start is called for all scripts. However, you do not know the order in which the scripts run. This can be an issue if you reference another object during initialization and that other object happens to not have called Start yet. I had some mean bugs because of it.

Example:
The car script has a name and a reference to tires. The tire script has a diameter.
The car script sets a name during Initialization and collects the tires' diameters. The tire script sets a diameter value during initialization. Now, it could happen that the car asks the tires what their diameters are before they had actually done their setup and so the car has wrong values. To avoid that, Car.Awake sets the name, Tire.Awake sets the diameter and Car.Start gets the diameters from the tires.

I wished I had known about that years ago.



All comments from YouTube:

@GMTK

If Visual Studio is not automatically suggesting code for Unity, please follow these steps:

In Unity, go to Edit - Preferences.
Under External Tools, pick Visual Studio from the "External Script Editor" dropdown. 
Then completely shut Visual Studio, and open it again by double clicking a script in Unity.

It should now suggest code as you type!

@purty9028

I will try this now, thank you :)

@purty9028

I know you are probably mad busy so apologies in advance, but I tried both varients and even replaced the O with a 0 just in case it was a zero for some obscure reason, I think the problem may be that when I downloaded visual studio it wasn't the same as when you did it in your video, I think they might have changed something because visial studio isn't optional now and also where you said tick game development with unity, that option wasnt there at all, that screen didn't happen when installing at all for me, also neither was the tick box to get unity hub (I already have it so that's not so important), so yeah I think something has changed, probably not a massive deal if you are a seasoned game dev but I'm just starting out and i don't even know how to find the words to describe what I don't know aha, so thank you for being patient and helpful, and again sorry if this is at all vague, I'm trying to be as specific as possible

@purty9028

The script didn't change the birds name even when I type it exactly the same as you did, also there is a drop down menu as I type but with none of the things on it that yours show and as soon as I put a . on the end the list dissapears alltogether, again, apologies if you are super busy, I don't really know who to tak to, so maybe if you know of a good forum or somewhere I could research/ask?

@lolnein7216

I really wish there was such a tutorial for adobe premiere or whatever you use for making your videos

@hoangminhnguyen9571

The 3rd will show error if you do gameObject.FindGameObjectWithTag and not GameObject.FindGameObjectWithTag

GameObject with capital G

161 More Replies...

@felikowski

I rarely give a comment on videos, but as a programmer (for about ~10 years) with no experience in game development yet, i must say: it was really nice to watch how you entered the challenge of rebuilding flappy bird. You just engineered the different requirements troughout the video, which is just what a programmer will do! Also, the hints on how to organize the code and so on where really on point! Great work!

@gewroo

+1 to this, exactly the same feeling. Well said.

@stuntfax9004

@Hookedup Joe it isnt letting me import an asset im pressing import nothing hppened

@vt-bv4lw

Hello, I see that you understand how everything works more or less, could you help me with something small? When I write code in visual studio, I don't see many options to complete the code. Do you know how to fix it?

More Comments

More Versions