Emil SundmanEnglish

Volatile Frameworks — Spelutveckling

Praktik i Unity/C# inom gameplay-system, prestanda, automation, felsökning, QA och UI, med en självständigt utvecklad gameplay-testbot som huvudbidrag.

Gameplay från Whispering Lights där spelarkaraktären slåss mot en boss i ett skogsområde.

Praktiköversikt

Under min praktik på Volatile Frameworks arbetade jag i Unity och C# med gameplay-system, prestandaoptimering, gameplay-automation, felsökning och release-QA samt UI-implementation. Vid sidan av testboten implementerade eller itererade jag på runtime-system för bland annat fiendespawning, målpositionering, item drops, inventory och tutorials.

Mitt starkaste enskilda bidrag var en gameplay-testbot som jag utvecklade självständigt, men praktiken omfattade också implementation och iteration av flera gameplay- och tekniska system som användes i spelet.

Whispering Lights — Gameplaykontext

Gameplay från Whispering Lights, visat som projektkontext.

Huvudbidrag — automatiserad gameplay-testbot

Jag utvecklade självständigt en gameplay-testbot i Unity och C#. Den spelade spelet automatiskt med simulerad spelarinput och fattade beslut utifrån intern spelstatus. Botten startades normalt manuellt och användes ofta inför liveuppdateringar för bred gameplay-, regressions- och releasetestning.

Problem

Testning inför releaser innebar upprepade genomspelningar. Att utföra dem manuellt var långsammare och svårare att upprepa på ett konsekvent sätt i hela spelet.

Tillvägagångssätt

Botten simulerade spelarinput men fattade beslut utifrån intern spelstatus i stället för att läsa den renderade bilden. En relativt enkel tillståndsbaserad strategi styrde progressionen genom spelet, medan förflyttningen använde spelarkaraktärens befintliga navigation och pathfinding i stället för ett separat pathfinding-system för botten.

Tekniskt värde

Botten gjorde breda gameplay-körningar repeterbara, producerade diagnostiska loggar för felsökning och testade flera spelsystem tillsammans inför liveuppdateringar. Den kompletterade projektets befintliga automatiserade tester och enhetstester i stället för att ersätta dem.

Utvalda gameplay- och tekniska bidrag

  • Kontextmedveten fiendespawning: Jag implementerade ett nytt fiendespawningsystem som knöts till att spelaren gick in i nya områden. Det kunde variera antal och typ av fiender utifrån spelstatus, balanserings- och questinformation och användes i live-spelet. Ett separat system kunde ge information om hur spelaren presterade; det systemet implementerade jag inte.
  • Positionering av huvudberättelsens mål: Jag analyserade den befintliga story-spawning-, positionerings- och save/load-logiken och omarbetade sedan målpositioneringen för att hantera fall där viktiga storypunkter kunde hamna mycket långt från spelaren. Detta var ett rework av ett befintligt proceduralt system, inte ägarskap över hela arkitekturen för den procedurala världen eller storygenereringen.
  • Renderingprestanda: Med Unity Profiler implementerade jag egen visibility- och frustum-baserad culling så att objekt utanför bild kunde undvika rendering och skuggkastning. Det minskade onödigt GPU-arbete och förbättrade bildfrekvensen, särskilt på svagare enheter. Jag utvärderade även occlusion culling, men den lösningen behölls inte eftersom nyttan var begränsad och beteendet blev sämre i vissa fall.
  • Runtime-optimering av item drops: Jag omarbetade item-drop-systemet så att alla drops inte längre skapades samtidigt. Spawning spreds ut över ungefär en sekund och vissa vanliga drop-objekt poolades i stället för att instansieras på nytt varje gång. Den resulterande lösningen användes i live-spelet.

Övriga bidrag

Ytterligare arbete under praktiken omfattade en kontextuell combat-tutorial-iteration, villkorade boss add-waves, inventory-refaktorering, enhetstester i den befintliga Unity-testsviten, arbete med quest/shop/objective-UI samt generell gameplay-felsökning, bug fixing, regressionstestning och release-QA.

Vad jag lärde mig

Praktiken stärkte min förmåga att resonera över sammanhängande gameplay-system, profilera och förbättra runtime-beteende, utforma automation kring verkligt gameplay och felsöka integrationsproblem i en produktionsmiljö. Den förstärkte också värdet av att hålla bred gameplay-validering åtskild från fokuserade automatiserade tester och enhetstester, och att förankra tekniska förändringar i observerbart spelar- och systembeteende.