Evaluation


Before I started this college year, I decided that my subject specialism would be related to Unreal Engine 4 in some capacity as I had enjoyed the creation of an FPS level in UE4 for a previous assignment, but I was unsure of what exactly I would be doing it, whether it be making a level or scripting the functionality of the game. I had very little experience of scripting in Unreal 4 outside of some basic player tracking AI and player damage scripts. Due to this inexperience I thought it would be best for me to attempt to start learning scripting before the year started so I could get a better sense of what I would be getting myself into if I chose to make an actual game in Unreal 4 for my project.

Unreal 4s blueprint system made the most sense for me to use as I knew from the get-go that the system was easier to learn than learning C++ from scratch. I used a tutorial by a Youtuber called Virtus who had created a series on how to create an action RPG using blueprints. I found blueprinting tricky at first but by the time I got to the years start I felt comfortable in my ability to implementing some form of game mechanics into my project. I had some suspicions that the tutorial series wasn’t exactly ideal as Virtus would make a fair deal of mistakes that he had to correct himself on in a later video and at certain points entire pieces of scripting had to be scrapped and remade since despite the tutorial planning to have multiple player characters a lot of the systems like the HUD and pick-ups only worked with one character and the whole script had to be re-written as a result. These videos also weren’t the best at explaining exactly why I was meant to be doing what I was, some of it eventually made sense as I went along but I sometimes felt like I was just following instructions rather than actually learning how to use the blueprints. I partially documented this process which came in useful as when the assignment began, I already had pre-existing content to upload to my blog. However, I could have done a better job documenting this stuff as I skimmed over a lot of stuff and if I covered everything more thoroughly, I would have a greater amount of documentation than I ended up with.

During this pre year phase I also did some more research into level creation in Unreal, particularly the visual side of things, learning how to enable sun shafts on directional lights, atmospheric fog and post process effects like Ambient Occlusion. I also did some test runs of speed building levels with pre-existing assets and I was happy with the look of these small projects.

When the assignment officially started I had a better grasp of Unreal 4 and was ready to start some sort of project in it but at this point I was still uncertain of what exactly I wanted to create and ultimately get out of the assignment as I was torn between committing to focusing on the scripting or just the visual side of making a level. Ultimately, I settled for a bit of both, but this uncertainty persisted throughout most of the project and split my priorities a little. Whilst I am happy with what I learnt during the project I think that the final product could have been of a higher quality if I focused on just one aspect rather than trying to do multiple things at once.

I decided that for the project I would be making a medieval fantasy style level with the gameplay putting the player in the shoes of a Knight who would work their way through a level, killing various enemies as they went along. I chose this theme and mechanic set because I already had done some work with these ideas in the pre-year period as I had started to model a Knight for practice and the Virtus Unreal 4 blueprint tutorials I had been following were also for an action RPG style game. This was an ambitious project and I wasn’t too certain if I would be able to make it exactly what I wanted it to be for the final product. However, I thought the multi-faceted nature of my project idea would prevent me from getting burnt out and bored of the project as at any time I could switch to a variety of different task varying from scripting, to modelling to level layout and building. In some respects, this was a double-edged sword as I occasionally found myself being spread a bit too thin by the number of potential things I could have been doing for the project at any certain time. My Gantt chart helped in this regard, but I think I could have made additional measures or management systems to ensure that the process went a little more smoothly such as a more detailed timeline. Although I do like freedom, I think being harsher and stricter of when and how I spent my time would have resulted in a better final product.

In December I decided to switch my source of tutorial from Virtus to another source. The Virtus tutorials whilst they got me so far started to make me think like they weren’t the best source of information for my needs. The tutorials were often spending time on mechanics that I wasn’t interested in, which wouldn’t have been an issue if I wasn’t so unsure if I would have missed important information upon skipping videos. The comments section was also filled with a fair number of complaints from users who were claiming that the methods used were not efficient, which planted a seed of doubt in my head. This tutorial series also seemed to end abruptly and did not have the feature set I was looking for, so I moved to a different tutorial series by another person by the username of Moize Opel. This meant that I had to start again but some of the things I learnt from the Virtus tutorial applied to this new tutorial series, meaning that things came along a lot quicker than they would have otherwise. This tutorial was a lot more like what I was looking for with a combo chain mechanic and weapon switching.

As one would expect the scripting occasionally yielded bugs that unfortunately always took a long time to resolve. Sometimes animations would bug out. A lot of the issues came from certain player state variables not being updated. Near the end of the project I added a stamina drain system so that attacks would drain stamina and when at 0 the player could no longer attack. However, attacking with 0 stamina would freeze the player in place. It took me a while to figure out when and where I needed the players combo chain and attack states to update when they attempted to attack with no stamina. Small things like this wasted time and were always frustrating but it was always satisfying to resolve them.

One of the early big decisions I had to make was how I was going to approach the animations of the game as a melee-based action game would be nearly impossible without them. I decided early on that adding animating to the number of things I had to do was too much so I decided I would use pre-made animations to lessen the workload. I did briefly consider paying for animation packs from the Unreal Marketplace, but I decided against it. Instead I settled for using Mixamo which had a wide array of different melee combat animations along with medieval fantasy character models. Originally, I planned to put my knight character model through the Mixamo rigging process and then apply the various animations, but the character model was eventually scrapped as I was wasting too much time on it. Dedicating too much time on some aspects that really didn’t need it was a prevalent occurrence and I think I could have done better planning to avoid such issues.

One such thing I spent too much time on was the basic block-out of the level. This initially came along quickly, and I was happy with how it was going but I soon found that geometry brushes in Unreal 4 come with their own set of problems as having too many large brushes in a level starts to decrease the performance of the editor, adding a progressively nasty freeze upon attempting to move and existing brush or creating a new one. This had a big effect on my workflow as I found it unwieldy to make small and quick changes to the level. Ultimately, I found during the project that geometry brushes are less than ideal with the previous issues as well as a performance hit upon playing an exported version of the game. Unfortunately, I didn’t quite realise this until very late on and there are still a few objects in my level made from geometry brushes. In future projects using Unreal 4 I will not make the same mistake and use original static mesh assets made in 3ds Max instead of over relying on the geometry brushes.

Towards the end of the project I started to worry that the visual side of the level was lacking and the current progress of the mechanics were not in a place I wanted them to be in so I had to make the decision to focus on one or the other. At this point I decided that it was best for me to focus on the look of the level rather than the mechanics. I feel that this was the right decision overall, but I wish the mechanics were in a better spot than they were. I had to tone down the size of the level late into production as I soon came to realise that I wouldn’t be able to adequate populate the entirety of the level with assets or unique pathways or layouts. At one point I was considering omitting any sort of enemy to use the attack mechanics on, but I thought this would have been a huge waste of my time and efforts if there wasn’t even the slightest reason to use the mechanics I had created. The assets I created were simple, but I felt that I should be making as many as possible to help bulk out the level and stop it from feeling empty. I ended up making 30 assets in total which was more than I expected but looking at the level I feel it could have done with a bit more to give more life and detail to the level.

Overall, I am a tad disappointed in the performance of the final project as it hovers around 30FPS on my machine at home when I was hoping to achieve around 60FPS. This is likely due to a wide variety of different factors such as the geometry brush issue or perhaps the scripting of the mechanics. However, I am more inclined to believe that it’s related to the lighting, post processing and lack of culling of assets. I did not learn much about optimisation techniques outside of scalability options and I have a large amount of different light sources within the level that are bound to have a performance hit. Researching performance enhancement techniques may have helped in this regard but I didn’t think I would need them throughout most of the project.

I set out to learn a lot more about Unreal 4 during this assignment and to that end I think I have achieved a lot, both in terms of visuals and certainly when it comes to scripting. I learnt about variables, floats, animation blend spaces, animation notifies, animation state machines, wind physics, grass simulation via material, sockets, HUD widgets, custom events, how to use branches, scalability options and more.


However, I do think my ambitions for this project were once again too high like most of the projects I work on. I was hoping to finish with a much more impressive result, but I feel that my hopes were unrealistic. I think the inclusion of some enemy attacks; a dodge and a lock-on mechanic would have helped make the game more mechanically robust. I am happy with the visuals and atmosphere of the level, but I wish I had managed to learn complex materials to give the level a more distinct and professional look. I’m happy with the amount that I have learnt and I look forward to taking everything to the next level in future endeavours.



Comments

Popular posts from this blog

Creation of Minor Assets

Mixamo

AI and AI Damage