So after procrastinating for just under weeks, I finally started the process reconstructing my java game using Unity. My basic goal was to place some ground level terrain and add an object representing a person to move around the background. Here is what I came up with: A basic scenario with a person, a rock and some varying terrain. (Note: as with the Java one, these are without a doubt placeholder graphics.)
Early on, I came across tile maps and palettes so the ground layout was easier than I expected. I ended up wasting more time trying to get collisions to work before I realized that two kinematic objects don’t really collide with one another. Good lesson to learn.
The main difficulty I’ve had when learning programming is after a point, it’s hard to find projects to practice programming skills. After a while, coming up with simple application ideas like coin sorting programs becomes boring and unchallenging even when you add fancy GUI components.
I’m a fan of RPG style games. In particular turn based JRPG games like the ones I played in my younger days on the snes. So naturally, I picked A JRPG as a project I where I could both practice coding and challenge myself. I named the project the Weekend RPG. So I buckled down to see how far I could get. For anyone who is interested, I used java with netbeans on a mac. The only non-standard library I used was Gson to make working with json a bit easier. I created all the assets myself and made no effort whatsoever to make them look nice. I only cared they looked like what they represent.
As evident in the screenshot, the results are crude. It’s also doesn’t satisfy the label: “game” since it’s missing a way to progress and win/lose. However, it runs. It takes user input to move around and you can chat with the 3 npcs. There is logic associated with moving. You can’t stand on an NPC, or walk on water (blue tiles). As a first effort I’m happy with it.
It was also a good learning experience. When I first started it, I didn’t realize how cluttered my code would end up. Changing pretty much anything would difficult and I found it extremely useful to generalize my code through abstract classes and inheritance rather than duplicating implementation of common tasks. Lastly I came to accept that I’m likely doing a lot of things in a horribly inefficient way. As an example of that, the tile layout is stored as an external json file, and I found that reading the file and unpacking them as objects gets really slow on larger maps.
I’m confident that I can expand this prototype further with some more work. However, I’m not going to. At least not this java project. Coming up with my own implementations of common tasks like displaying sprites on a screen is going to consume a lot of time for little gain. Instead I’m going to switch to C# and use the Unity engine.
So why did I choose Unity.
- It is free (at least it is for educational purposes)
- It is used commercially by big name development studios
- It doesn’t do all the work for me. Despite offloading a lot of the background tasks, it will still provide a challenge.
So my first task is to replicate my java prototype on unity. Exciting. Lets see how it goes.