Galactic Soccer Complete (With UI)
How to Play
Galactic Soccer is played with 2 Xbox controllers (Microsoft, 2005) by plugging them into the USB ports of your computer. One controller will be used by each player, each with matching controls for their corresponding starship.
Controls:
Right Trigger: Accelerate forwards in the direction the starship is facing.
Left Trigger: Brake rapidly towards stopping, no matter what the direction of motion is.
Left Analog Stick (horizontal): Turns the starship in the corresponding direction (yaw).
Left Analog Stick (vertical): Tilts the starship in the inverse direction (pitch).
Right Analog Stick (horizontal): Rolls the starship in the associated direction.
Start Button (by both players at once): Resets the game.
Back Button (by both players at once): Returns to the main menu.
Left Mouse Click: Select and interact with menus.
Keyboard: Type to interact with selected text fields in menus.
Goal:
Galactic soccer is a game to be played alongside a friend. The goal is to obtain a higher score than your opponent before time is up. Points are scored by pushing the planet towards the black hole which your opponent will be defending, while keeping the planet away from your own black hole.
As the planet approaches the black hole, creatures will start to be sucked off the planet and absorbed into the black hole. Each creature absorbed in this way will award 1 point to the attacking player. The creatures can be stopped if the defending ship hits them with their own ship, or if the planet is to hit them again.
If the planet comes into contact with the black hole, it will award the attacker 20 points and reset the ball to the centre of the field with a velocity in a direction moving towards neither black hole, giving neither player an advantage.
Post Mortem
Galactic Soccer is certainly the best game I have made yet. The controls are nice, responsive, and simple. I have seen classmates pick up a controller and figure out the controls for themselves, flying their ships around without any trouble even though I never even told them the controls. This is most likely due to the control scheme being similar to other flight games using similar controllers. I consider this to be an achievement. I aim to make all my controls easy to figure out in any future games by sticking to well-known conventions for controls (unless the game is radically different from others, in which case I aim to explain the controls within the game).
I completed all of the tasks which I planned to do and met many of the desirables as well. On top of that, I included some extra things that were suggested to me which I hadn’t even considered doing. This includes the particle effects around the camera to convey motion, and putting a bit of a delay on the camera so the ship will turn a bit before the camera does, making it more dynamic and making the camera’s motion a lot smoother. I am perfectly content with how much I have completed so far.
I learned a lot of useful things about Unity and C# while creating Galactic Soccer. One of the most practical things which I learned was how to use Events. An event in game programming is when something happens, and it tells everything else that needs to know what happened that it happened. Sometimes it will pass some additional information on as well. The purpose of this is so that upon calling the event, many things can respond to it, in their own distinct ways from their own scripts, meaning that the rest of the script that triggered the event would not be cluttered with excess code. This also means that if anything that responds to the event is removed, the game will not break because the object won’t actually be looking for something to tell to do anything. An event is something that everything else in the game listens for and responds to. It is important when removing something subscribed to an event from the game, during the game to unsubscribe it from the event, so that the game knows that it won’t listen anymore (because it won’t exist).
Another very important thing which I learned was how to separate the game-critical parts of an object from the visual aspect. The purpose of this is so that the game will essentially play the same no matter how the things within it look. It allows for things such as models to be rotated and scaled to match the aspects important to the game, instead of doing it the other way around and messing things up. For example, the ships in my game were moved and scaled to fit inside an area that they could take up. Although it looks like a ship, the game treats it as though it is a scaled cube. The collision is simplified. This is the same with the creatures, because they are seen as cylinders by the game, although to players they look like creatures. It is important to separate everything because otherwise the visual aspect risks affecting how the game plays.
UI and menus have been implemented to what I consider to be full functionality (with some bonuses). The main menu allows for cosmetic customization options (such as choosing ship colour and your name), as well as functional things. The menu is extra interactive because it allows players to see what their ship looks like before playing. This is the first game I have made to contain an in-game credits/references.
Many aspects of the UI are dynamic, moving to fit many different screen resolutions. If a team is awarded a point, their displayed score will animate in a way that isn’t too distracting, but gives a visual indication that a point was scored without players needing to keep checking whether the score has changed. Once the game ends, a message places itself onto the screen (with an animation) to show who won. At the same time, a message will continuously scroll across the bottom of the screen to tell players how to reset the game or return to the menu. These are the least obvious controls in the game and this ensures that players will know that they are able to do those things.
I learned many useful things during the creation of this project, and I look forward to completing future projects to a similar (or better) standard. I am very happy with how everything turned out in Galactic Soccer.
Bibliography
Ahmad. (2014). Using tikzpicture or pgfplots to draw a uniform grid [Image]. Retrieved from http://tex.stackexchange.com/questions/183629/using-tikzpicture-or-pgfplots-to-draw-a-uniform-grid
Art Force (Art Force). (2015). Low Poly Starship SS01 (Version 1.0) [Unity 4.6.1 or higher]. Available from https://www.assetstore.unity3d.com/en/#!/content/29459
Demigiant (Demigiant). (2015). DOTween (HOTween v2) (Version 1.1.310) [Unity 3.5.7, Unity 4, Unity 5]. Available from https://www.assetstore.unity3d.com/en/#!/content/27676
Game Sound Solutions (Game Sound Solutions). (2014). 8 Bits Elements (Version 1.3.1) [Unity 4.5.2 or higher]. Available from https://www.assetstore.unity3d.com/en/#!/content/16848
Hedgehog Team (Hedgehog Team). (2012). Skybox Volume 2 (Nebula) (Version 1.0) [Unity 3.5.2 or higher]. Available from https://www.assetstore.unity3d.com/en/#!/content/3392
Mikelarg (Mikelarg). (2013). Cracked stone filled with lava (Version 1.2) [Unity 4.1.2 or higher]. Available from https://www.assetstore.unity3d.com/en/#!/content/8294
Sergi Nicolás (Sergi Nicolás). (2014). Feline Gargoyle (Version 1.0c) [Unity 5.3.1 or higher]. Available from https://www.assetstore.unity3d.com/en/#!/content/27106