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
Post a Comment