The skills each new project has taught me

I thought it might be a good idea to look back on my first full year using Unity and actually finishing projects as opposed to my time in college where it was all XNA and I never finished anything off, let alone publish them on app stores.

Wrongcoming Traffic skills:

  • First practical use of 3D modelling
  • First introduction to Unity in general
  • How to write C# scripts in unity
  • Gameobject spawning
  • Movement and Input

This time a year ago I was still living in Sligo while working on Wrongcoming Traffic as both my first completed game and first time ever using Unity. Initially of the 3 of us, I had agreed to take on the 3D modelling aspect of things, which I did. I worked on the car alone for 2 weeks and I still have nightmares about it today, ESPECIALLY the first car I attempted, it was AWFUL.

A large reason of why it turned out so horribly was the fact that the only way I knew how to model was by making cuts in a box, scaling them to the shape then moving on from that

Although it was absolutely horrifying, it did start me off and gave people things to criticize which ultimately helped me improve.

After asking for criticism and critique and getting endless amounts of it from /3/, the 3D modelling board of 4chan, I scrapped that version entirely and started again (So if anyone tells you that 4chan is nothing but a “trolling” cesspit, tell them go on /3/ and /diy/ and have their preconcieved notions destroyed).

This time I followed their advice and worked exclusively from reference images (that car above was meant to be a BMW M3), started by creating a spline cage then extruding a plane gradually along it.

The spline cage and reference images

This technique would have worked well for me IF I had known what kind of capabilities mobile devices actually had in terms of vertex counts. Because I had been constantly bombarded with the advice “Keep polycounts low for mobile devices”, I made a point to keep it below 1000 tris at all costs, which I now know was quite restrictive for a non-stylized car.

This was one of the suggestions from a friendly person at /3/

This was one of the suggestions from a friendly person at /3/

The extruding begins.

The extruding begins.

Finished, horrible product.

Finished, horrible product.

So here it is in all its glory, no subdivisions, missing details, badly made wheels and rubbish windows.

 

The following is a heavily abridged version of what I originally wrote, lost due to me thinking highlighting what you wanted to put in a “Read More” tag is how the tag works. It isn’t, it deletes your words if you do it that way.

As for the code, I had to end up doing the vast majority of the code myself, besides a single script written by a teammate (that makes textures move to make it look like the car is moving)

This was my first introduction to Unity’s style of scripting after being an exclusive XNA user from college. It took days of watching tutorials just to learn the basics, after which I began to apply my general XNA knowledge to unity.

The UI was all done Pre 4.6 (so all done though code), but I later went back and added in 4.6’s system when releasing on Windows Phone. The biggest change is the main menu, which used to just be a black screen with 2 lines of text.

I have more footage of development of the game, but now that I live in Achill with no fixed internet connection it’s too big to upload. i’m not sure if this was recorded in college or at home, but I think it was home

https://www.youtube.com/watch?v=NjtrGgjYP0g

 

BONUS TRIVIA: I had actually done an animation of the car swerving between lanes but I didn’t know how to use Unity’s animation system properly until 2 months ago (May 2015, I made the animations in June 2014) so they never got used.


 

Clank Tanks skills:

  • Unity’s terrain system
  • Unity’s Physics system
  • Extremely basic AI
  • JUNE 2015 REVISION: Introduction to Navmeshes

The level you play on in clank tanks is a Unity Terrain in the form of an Island in the middle of a body of water (you mostly can’t see the water due to the way the camera is set up) and although it server as an introduction, in retrospect it wasn’t the right choice for the game, owing to the fact the sand texture I wanted to use looked horrible when it was applied.

The missile I used was the first true introduction to rigibodies and colliders (I used colliders in Wrongcoming traffic to end the game if an object hit the car). Due to Unity’s decision to use Y as the vertical axis as opposed to Blender using Z I had a horrible time getting the physics set up initially as the missile would fly off in a random direction entirely, and the tank would fly straight up instead of moving forward (as shown here)

https://www.youtube.com/watch?v=6-XUCBKYw2Q

As for the AI, it’s very simple in that all that happens is the turret constantly face the tank and fires a missile of its own every few seconds.

When I learned what navmeshes were in June of 2015 I immediately set out to implement them into Clank tanks as that was the original plan, to have moving AI tanks. The functionality they now have is incredibly basic, as all they do is follow the player,

Untitled

But if I ever get around to it I will make them partol between waypoints (that are conveniently already in the game) and attack the player if they come into sight.

(Also, I upgraded to Unity 5’s new standard PBR shader, dropping the original toon shading)


Shield Yield skills:

  • Unity’s 2D mode
  • 2D physics
  • External API integration (Gamejolt)
  • PlayerPrefs (High score storage)
  • Multiplatform builds & deployment
  • App store publishing
  • Creating settings menus
  • Considerations for mobile control schemes

Shield Yield was a HUGELY important game in the timeline of my Development career. It was the first game I actually felt happy with, the first game I released to the public and the first game I considered “fully” complete upon launch, as no new assets have been added since its September 2014 release. From such humble origins in a game jam, it went on to be the game of which I am most proud.

It was the first introduction I had to using 2D sprites in Unity, and due to the simple style I created it didn’t take long to create every visual asset in the game (Under 2 hours)

I used Edge Colliders and 2D rigibodies for the first time in this game

This was the first time I kept track of high scores using the Playerprefs dictionary, and after using this when making the game in September I went on to add online Leaderboards and achievements when I released the game on Gamejolt one month later using Gamejolt’s API

Shield Yield was released on multiple platforms, including itch.io and Gamejolt (Webplayer AND executables for Windows), Windows Store as a Win8 app, and Windows Phone, as well as being deployed to a few Android devices, but never released as I don’t have a Google play developer license

After releasing first on PCs I had to devise a new control scheme for touch devices for performance reasons


 Ski Don’t skills:

  • Time management & Working under pressure / to a deadline
  • Blending 2D and 3D in one game
  • More advanced 2D physics

Ski Don’t was the first time I had to work to an extreme time deadline for a game, having to take from concept to release in only 1 weekend because it was for an online game jam. Unlike previous games that I had limited time to make (Only one month for Clank Tanks, 3 for Wrongcoming traffic), this time around I was well versed enough in Unity to make a coherent game alone, and the difference in pressure was extreme.

The game served as a good test bed for me to see if I could mix the 2 modes by placing 2D sprites in a 3D environment

The character was comprised of many interconnected hinge joints, all with different limits, further increasing my knowledge and familiarity with the 2D physics system in Unity


 

Hexane skills:

  • Increasing difficulty

Hexane is my only (currently released) game that gets harder as time goes by


 

AreWeCursed? Skills:

  • Working within a team
  • Delegation of work
  • More time management
  • Version control

I lost the entirety of this and the last section again, this time due to saving a draft while my phone had no signal, so instead of saving everything it discarded it all.

Once more, this and the next section are heavily abridged

This was the 1st time since July 2014 that I was working in a team on a game (This was in Jan 2015), and was the first time that I had other people working on the art instead of me so I could focus on the programming and gameplay.

This was also the first time I wasn’t the only programmer at one time, so we delegated the tasks between us

With similar constraints as Ski Don’t, this gave me a taste of managing time expectations and constraints when working with other people.


Skills gained from unfinished/unreleased games:

Unnamed Space endless runner (current project):

  • Animation
  • Collectable Gameplay modifiers (or, “pickups/powerups” in English)
  • Image effects (AKA Pixel Shaders, from here out I’ll just be referring them as shaders)
  • Planned Feature: Networked multiplayer
  • Planned Feature: Monetisation

So this is the first major use of animation in a game I made. When the level starts, the camera swings in, the ship bobs up and down while flying and it tilts left/right when turning

https://www.youtube.com/watch?v=8x31fPDlyFI

Note that this is just a demonstration of the animations and does not represent the state of the game today. The obstacles move, and the shaders are active

This is the first time I’ve made a pickup in a game despite the fact that I’ve been involved in game development for 4 years now when I started college. The idea for the first pickup I made was to slow down time, and this would have been easy to do if I simply modified the Time.timeScale property in Unity, but that wasn’t an option since I wanted to make this a multiplayer game and changing that would make the game slow down for ALL the players rather than on a player-by-player basis. What I had to do instead was half the speed that the obstacles moved at and that the texture on the “road” moved by. One final touch was to increase the Field of View of the camera, but this would have been better used if the pickup made things faster admittedly.

I don’t know whether or not they were available in the free version of Unity 4 (I think they weren’t, because I tried using them in an older side-project but found I couldn’t), but now that I’ve found them in Unity 5 I immediately added the Bloom shader to make the game look closer to the aesthetic I wanted it to have in the concept stages. As for writing shaders themselves? It’s not my cup of tea. We had a dedicated Graphics Programming class in college but I didn’t understand all too much of it. I didn’t do terribly in the exams for that subject, mind you (53%).

There was also an option for a motion blur shader, but I've disabled it by default as I'm unsure how much of a performance hit it will cause on mobile devices. I will add it in as a graphics option when I get a menu system in the game for the PC versions

There was also an option for a motion blur shader, but I’ve disabled it by default as I’m unsure how much of a performance hit it will cause on mobile devices. I will add it in as a graphics option when I get a menu system in the game for the PC versions

As for the 2 features I listed as planned, They’re subject to inclusion in the game based on whether or not I can/want to learn how to do them before releasing the game. I’d like to at least put advertising in the game as that would be the easiest way to do monetisation, and I’m interested in learning how to do networked multiplayer.

But I don’t know how to do either of these things yet, so only time will tell.


Unnamed prototype turn based strategy game:

  • Proper use of navmeshes

This prototype was made to see if it would be feasible to try and make a 3D Turn-Based Strategy game like XCOM: Enemy Unknown. The level was thrown together in about 20 minutes in blender to emulate the layout of the levels found In XCOM, and I brought in premade asset packages that ship with unity for the sake of time.

The Agent moves to the empty gameobject (yellow) provided it is in a different position that it used to be, checked a couple of times per second (which is why it sometimes doesn’t move as I didn’t bother refining the script)

https://www.youtube.com/watch?v=owXD9vxgoqM

 

This video shows the entire process of going from nothing to fully working inside unity in 7 minutes (but not showing the making of the level in blender)

WARNING: I messed this up and my mic is VERY loud in this, might want to put the volume to low. Also, I made a swear or two in this.

https://www.youtube.com/watch?v=ZrUqDNhKQ4U

The main inspiration for making this was an Idea that I had for a game based on similar mechanics, but I’m not going to go into it in detail because A) I want to protect it from plaigerism if I DO decide to make it, and B) Am currently unlikely to make it without a dedicated Level designer, environment artist, animator and 3D artist.

It’s my planned Magnum Opus


 

Pool game:

  • Advanced 3D modelling – High Poly baking

The cue used in this game was the starting point for me learning how to (successfully) bake normal maps and other such details from High poly models to more primitive ones in Blender.

Shortly after my success with the Cue, I tried it on something where the baked details would play a MUCH higher role in the detail the captured, namely, on a sword

 




That just about covers it. There are some other things I’ve learned with unfinished games, but they’re either not significant enough to list here, or are unlikely to ever see the light of day so there’s no point showing them.

Thanks for reading,

James

\
www.000webhost.com