My way through the GameDev HQ course

This is a more detailed blog about my experiences through this course. If you want a lean version of my progress, click here.

Why I am studying Unity?

First, for a very deep personal reason, and that’s why I’m very thankful with the company.

Second, because Unity has evolved from a new, innovative and a bit chaotic game engine years ago to a powerful, very well structured simulation engine that has taken the lead in a lot of strategic areas of our society: automotive, filming, architecture and construction, games and others such as health and education.

And the education area is really important, because that is the key to shaping the future.

Now I want to learn Unity and to be a skilled game developer to teach others, especially children and teenagers in my country and in other countries like mine,

because I want them to know how to create videogames and other applications with Unity to help this society and the world to be a better place to live!

Why am I thankful with Unity?

In my family we had been living a difficult situation practically the whole life until my brother Juan Pablo was hired by Unity some years ago. Since then the life in our family changed a lot possitively, a 180 degrees turn. You don’t imagine how much. So Thank you Unity, Thank you so much! I am really thankful with you.

And I want others to learn Unity so they have the opportunity to change their life.

Why I am doing this course?

Because even the time I have been studying Unity (around 3 years) through videos, tutorials, books and so on, I haven’t got the real skill to develop games confidently.

Previous days:

I’ve already received several invitations to GameDevHQ webinars, but I haven’t paid enough attention to it.

I decided to attend one of them. I don’t remember its name, but Jon spoke about the actual importance of Unity and he spoke about Aaron Black’s successful case. This webinar catched my attention immediately, and I decided to take the course. Money? I didn’t have any money, so I would ask my brother for help.

My brother told me: “It seems to be a good course, but it’s a bit expensive for me to pay the monthly payment right now”. So I asked Jon for some help about it, and he helped me.

Thank you very much Jon for a kinda good detail!

Some days later, for some reason, I decided to visit a link about a Game Dev HQ webinar called “Your first line of code”. Before I ignored it because, I said myself, you are about to become an engineer, you have used Unity and C# for some years… But my curiosity won, and I watched its recording.

What would be my surprise when Jon was explaining very carefully how the GetComponent works, and in that moment, inside me, it was like: What? Is that the way to access the GetComponent in the editor? Eureka! Now I understand that process. I mean, I had written that line of code dozens, maybe hundreds of times, but I haven’t realized the way it works in the script and in the editor. It was really fantastic for me.

After some little issues, finally my brother sent the first payment of the course.

Day 1:
Talking with Al about the action plan. I begin to follow the checklist

Day 2:
It has been a hard day for me. I’m stuck when making the Resume and my first blog. For some reason I’ve got a headache, and that’s really, really unusual for me. Although I’ve worked for several hours on the course, I didn’t advance anything.

Day 3:
Finally I sent the blog and made the Resume. Also I finished a MVC tutorial watched on youtube and finished a very simple but complete CRUD implementation in a webpage, everything on the cloud. I’m very happy and really, really satisfied with myself.

Day 4:
I begin the Git crash course and I am working on its blog. I think I’m late, but still trying to keep the pace…
I saw a way to remove username and laptop name from Git Bash editor. I began to find out how to do it, but after some hours, there was no result.

Day 5:
I’m really astonished, amazed when watching how useful are branches in team working, and being more clear about local and remote repositories.
Continue looking for the Git bash editor modification.

Day 6:
Git crash course blog finished. & Unity blog finished. This achievement makes me feel really good. Now I have a very good understanding about Git, and it’s really important for any software developer.

Day 7:
Finally, after 3 days I found the way to modify Git bash Editor as I saw before in the VS Code page. It feels really good this achievement, more than anything to make things work as I want !
It has been a hard week for me, some issues, late for being up to date with the course, but now I know how to make the gifs and the blog. This week will be another hard one and I’m expecting to get back to the pace.

Day 8:
Now I feel I’m getting the pace

Day 9:
Starting to study the create the player and Unity C# survival guide courses

Day 10:
Blogs done

Day 11:
I’m studying the Challenge user input.
As on other occasions since I started watching Jon’s videos, today I became aware of how the Input.GetAxis method works, and it was a great experience!
Also, I decided to make a simple mechanic in which the cube would move by itself and it could be affected if I use the horizontal axis, and after some attempts, it worked! I’m really happy because it’s a simple mechanic, but I could create it by myself, as I wanted the behaviour to behave (XD).

Day 12:
Today I’m finishing the create the player chapter on the 2D game dev course.
I’m really happy to learn the way Jon teaches how to use what I think is pseudo code to be clear what we want to do and later convert it to executable code.

This is what I wrote:

Also I read the Siddhant Thakur blog called Restricting player movement, a wonderful blog.
At the end, he shows the following code:

And I improved it a bit like this:

Really happy about that!

Final code (I think it can be improved, but it’s ok for now):

Day 13:
Today I began to study the If-then logic chapter. I’ve just learned how to control an action to be executed in Update. Awesome!

After some explanation videos, I wanted to show only 1 message and only if point >= 50. After some attempts (some failed), I could create the desired result. This increased my self confidence to write code,

and it feels wonderful!

I’ve got a question from a long time ago:
Why is it necessary to use else if?

With the help of a search on internet, I made my own answer:

In the first part, the points value will be evaluated 4 times, no matter if any previous value was true or false

In the second part, if any value is true, the other lines of code won’t be evaluated (with exception of the last line of code). It is a code optimization

More self confidence to write code!

When trying to complete a challenge, I found a bug while executing this code

For example, the letter A was displayed and later the F in each frame.

After some time, I figured out how to fix it

I finished 2 blogs: instantiating and the cooldown system. Hard work this week, but the results are awesome: 7 blogs posted + 2 personal ones.

Today I learned in a really, really simple way how the cooldown system works, and it was great because I studied it several months ago, and I couldn’t understand it, until now.

Day 14:
I found a way to use the var keyword

Also after all the time I’ve been studying Unity, I learned in easy words one of the reasons about null reference exception in Unity:
You are trying to access a component that doesn’t exist

Day 15:
Applying the check if null good coding practice in

Day 16:
Polishing game assets.

The game isn’t finished yet, but now that I see a spaceship that can shoot lasers and destroy enemies, I feel something new in myself, maybe this is what you feel when you begin to create games…

When watching the Challenge Triple Shot Behavior video, it was good to understand that there are no mechanics implemented by default, that Unity and C# give to the developer the tools to create them.

After being tinkering with the code for around 1 hour

I figured out the following:

  • How to check if this gameobject has a parent
  • Destroy a transform (Destroy(transform.parent)) is not allowed, because only gameobjects can be destroyed.
  • When the gameobject (laser) is destroyed, it destroys the parent
  • If the parent is destroyed, the children within it will do as well
  • The order doesn’t matter if Destroy(gameObject) is placed up or down because all the code within the if statement is executed before exiting

Also, when executing the Powerup Coroutine, I figured out that something wasn’t working well.
At first, I tried to check out the code, I reviewed the videos like 3 times and all was ok, so I began to debug and I found that when the player collects powerups quicker than 5 seconds, other coroutines are started and they become difficult to handle. Other than that, all is ok.

Day 17
Today I woke up thinking about the coroutines …

I remembered that there I needed to stop one of them

So, I could create a bool flag to start and stop them…

Also I learned how to implement a shield powerup, and I was really happy because I used some knowledge I already had and I was able to get it work properly in my own way before watching the challenge solution… awesome!

Day 18
Today I learned something by myself really quickly, the difference between enable and setActive with GameOver Text in Canvas

Above lines keep the gameobject active, and deactivate the Text component

The GAME OVER text is not visible in the game

Using SetActive( ), the gameobject is deactivated in Start( ), and the Text is not visible in the game as well

Day 19
Today I have been working a lot on testing animation behaviours, specially in enemy animation, and it has been a great learning experience because I could make the game behave as I wanted, for example, after being touched by a laser or player, enemy seemed to stay freezed for around 1 second and later it showed the destroy anim. I removed some of the first frames of the animation, and after any trigger, the explosion was displayed. Also I had to set the speed to zero as shown in the course video for a better user experience.

Also, after working on the space shooter game, I found a bug

Code in Enemy script

The condition to destroy the player is to be touched 3 times by an enemy

It happened because the enemy’s destroy animation was activated, but the enemy was still in the scene

So, I found a quick solution: to deactivate the game object when entered on trigger with laser or player

Result:

Fixing a bug above
As I mentioned before, I did this:
Deactivate the game object when entered on trigger with laser or player

But that produced a bug: the trigger for activating the enemy explosion animation stopped working

It took me almost 3 hours to get the reason, and it was this line of code: gameObject.SetActive(false);

I couldn’t find the reason, but after checking out the animation, animator, searching on internet, and many other things, nothing worked until I removed that line of code. Now the game is working fine again

I changed that line of code for this one:
gameObject.GetComponent<BoxCollider2D>().isTrigger = false;

--

--

--

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Cli with Ruby — My first App

FlutterForce — #Week 55

Insert a Node at the Tail of a Linked List. HackerRank Exercise

Artisan Command in Laravel.

The danger of using getSimpleName() as TAG for Fragment

Ray for Laravel/WordPress/PHP Applications

Tool Based Behavioral Code Analysis

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Hernando Nieto Jaramillo

Hernando Nieto Jaramillo

Unity developer

More from Medium

5 “Overstated” Coding Tips You Should Actually Take Seriously (Beginner Dev Edition)

Spawn stopping

Is that an <H1> in your pocket or are you just pleased to see me?