About The Project: Football Simulator stands out from other football games on the market such as the Madden NFL series because it has more physics-based gameplay rather than animation-based gameplay. The physics-based system makes for a lot of fun moments such as plastering a player and knocking their helmet off or running into water coolers and refs on the sideline after making a clutch pass. This YouTube video shows off the physics in the game and all the wild things that happen as you play.
Football Simulator has a nostalgic feel to it as well that resembles ESPN NFL 2K5 because the 3D models are slightly low-poly. My role as a video game enginnering intern was to work on a variety of different things, such as integrating better volume settings, adding a kicking meter that controlled how far the ball would go for all the different kick type plays, fixing bugs, and improving upon user interfaces (one of them being the pause menu).
Technology Used: To complete this project the Unity 3D game engine was used. Perforce was the version control software and Shortcut (formerly Clubhouse) was used for planning.
Featured above: Me chilling at the office
Added A Kicking Power Meter: The kicking type plays in the game originally didn’t have a way to control how far you wanted a kick to go, it only had a way to control what direction to kick the ball in. I was tasked with adding this functionality into the game.
This is how the game looked without the kicking meter.
Explanation On How The Kicking Power Meter Works:
Fixed A Levitating Football Bug: The field goal play had a bug where the football would float mid-air before the play began. The holder was supposed to hike the football to the punter but what happened was the football hiked itself in the air to the punter which did not look good.
This shows how the football levitates before being kicked.
This is the If statement I wrote that checks if a field goal play is selected in an update function and tells the football game object to remove its rigidbody constraints. The Y position on the football was not getting updated and it was stuck at the same height after the snap so I removed the condition that saved its transform and rotation information on the football game object at the appropiate time.
Added A Holder Animation For Field Goals: There was a problem where the holder didn’t have an animation to bend down and hold the ball and it looked strange to not have that. I was able to add a kneeling animation that was oriented in the direction of the football.
This shows the kneeling animation I added on the holder player for field goal plays.
This code checks if a field goal play is selected and if it is, it activates the Football FG Hold animation on the holder player. I also added the Football FG Hold animation to the character animator. The default setting is for the holder player to idle so I changed it to the animation I wanted and after that I modified the Body Orientation variable on the animation to be rotated 90 degrees to the left so the holder would face the football.
Added Additional Game Controller Input In Season Mode: There’s a character card menu screen within the season mode where a football team’s roster can be found. I was tasked with making it so the player could rotate their character in a circle with the right stick of the game controller.
This game clip shows when the player uses the right stick to rotate their character. By default, the character rotates in a circle but when the player uses the right stick the character rotates in a circle at a faster rate.
RotateAnimator has a function called RotateRightStick that handles spinning over time. CharacterCardUI has a variable called playerModel (which is the character 3D model) that references the function RotateRightStick in RotateAnimator and it allows playerModel to be able to be spun. The last piece of the puzzle was connecting the code in CharacterCardUI and RotateAnimator to FootballMenu (which controls game controller input). I created a variable called RightStickX that controls the right stick of the game controller and made the necessary references to connect the functionality of all three scripts together.