Justin Mosiman talked about UFPS and the advantages of this all-in-one FPS kit for Unity.
My name is Justin Mosiman and I’m based out of Raleigh, North Carolina in the US. There are two of us at Opsive, I’m on the programming side and my partner is on the art side of things. Most of our projects are the ones that we have listed on the Asset Store, though when we were first getting started we created a couple of iOS games. Our first iOS game was made in 2009 using Torque 2D. We then wanted to create a 3D game and saw that Unity was one of the only engines that supported iOS so we switched to that. Our 3D game flopped but we thought that we could polish up and list some of the smaller techniques that we used on the Asset Store. Ever since then we’ve slowly grown the Asset Store and it’s been an incredible ride. We’ve been full-time Asset Store publishers for about 5 years now.
We actually aren’t the original developers of UFPS, that credit goes to Vision Punk. In 2016 Vision Punk was decided to focus on their own VR games and we were approached by them to see if we wanted to acquire UFPS. At that point, our two main assets were our AI tool, Behavior Designer, and our character controller, the Third Person Controller. Before we acquired UFPS we received some requests for a first-person view within the Third Person Controller and we said at that time that we didn’t want to compete against UFPS. It’s kind of funny how it all worked out and just happened to be the perfect fit for us.
UFPS was an early asset on the Asset Store and when it was first released it only contained a first-person camera. It slowly evolved to include more shooter mechanics and was steadily updated by the original publisher for about four years. When we acquired it we then had a choice: patch UFPS and the Third Person Controller so they can work together or start from an empty project and combining the best parts of UFPS and the Third Person Controller. We decided on the latter approach which took us about two years to complete, but we believe it was the right decision as there was a lot that wouldn’t have been possible in a patched version 1.
Version 2 contains its own locomotion and collision system which makes it very flexible and allows you to do some really neat things. One of the coolest things is the dynamic gravity feature where up doesn’t always have to equal Vector3.up. A great example of this is in the outside area of the demo scene where there are two spheres that you can walk around. One sphere also has a higher gravity force which allows you to jump from one sphere to the other.
Another neat feature of version 2 is the new weapon system that allows you to dual wield any two items. This was an extremely popular request for version 1 and we wanted to make sure we included it out of the box for version 2.
What Are The Advantages?
Where do I start? I believe that there are many distinguishing features for version 2 not found in any other first or third person controller on the Asset Store. One of the major features is that UFPS uses a deterministic, kinematic locomotion controller which gives you a lot more control over something like using a Rigidbody for the character controller. Built on top of that is an ability system which allows you to basically take complete control of the character without having to edit any of the core locomotion scripts. Most of the character features within UFPS are an ability: jumping, falling, firing a weapon, reloading, etc. At a higher level, you can do a lot of customization with just the editor inspector and we made sure to pack a lot into it. There is almost too much customization, but you never know when a user might change a particular value. There is a learning curve since this is a large asset, but we have extensive documentation and videos explaining the process.
In a first-person view there are three different types of motion:
- The character’s motion based on acceleration and dampening values
- The arms motion based on a spring
- Animations on the arms and weapons
UFPS then contains a state and preset system which allows you to change the individual field values based on different states. As an example, if you have a rocket launcher you may want to move the character more slowly than if the character is wielding a knife. You can set a state that is enabled when the character has a rocket launcher that decreases the acceleration values of the character. This state can then be disabled when the character has the knife so the character moves at normal speed again. All of this is done for you without any coding and allows for really dynamic situations.
Probably the best advice that I can give is to integrate with as many assets as possible. When users are purchasing your asset they aren’t going to be using just your asset and expect things to work together. In the very first version of Behavior Designer, I made sure it was integrated with Playmaker so you could combine behavior trees with a finite state machine which opens up a lot of doors for people who do have a coding background. We’ve slowly been adding integrations with UFPS since the initial 2.0 release and we have the majority of the popular assets covered now.