Project type: Game

Date: 14-02-2022

Status: Work in progress

Software used: Unity, Rider

Language used: C#

Role: Gameplay /shader developer

Team size: 14 developer en 8 artists

Over het project

In dit project heb ik gewerkt met een groot team in een kantoor. We gingen hier 3 dagen in de week heen. Ik kan geen github link geven omdat dit project op private staat en nog in development is.

Ik heb gewerkt aan verschillende systemen in het spel. Tijdens de sprints was er veel tijd om elkaar te helpen.

Ik heb hier veel geleerd over code structuren en over de workflow in een gamestudio. Ik heb hier bijvoorbeeld sprints gepland samen met het team. Ook hebben we samen een tijdsindicatie gegeven aan user stories met story points.

In dit project heb ik gewerkt aan onderstaande onderdelen.

Bounce System

Het bounce systeem is verantwoordelijk voor het stuiteren bij botsingen in de game. Het systeem moet berekenen welke kant het object op moet stuiteren. Wij doen een reflect berekening aan de hand van de velocity en de normal vector. Met het bounce settings script is het mogelijk om op objecten in te stellen hoe hard het moet stuiteren.

Data Oriented Technology Stack

Ik heb uitgebreid onderzoek gedaan naar Unity DOTS. In dit nieuwe systeem is veel performance te winnen door het gebruik van alleen data op game objecten en de mogelijkheid van multithreading. Ook is het makkelijk te zien hoeveel performance verschillende systemen kosten. We hebben onderzocht welke onderdelen in de game we kunnen ombouwen naar DOTS. Als voorbeeld hebben we de bullets omgebouwd. Ook hebben we onderzocht hoe we ons huidige event workflow kunnen behouden.

Water Shader

Ik heb gewerkt aan een 2.5D water shader. De mesh wordt gegeneerd met een script. Tijdens het maken van de shader kwamen we veel complexe problemen tegen, zoals het dubbel renderen van golven over elkaar heen. We hebben dit grotendeels kunnen oplossen met een zwrite. Een andere uitdaging was dat er een lijn gerendered moest kunnen worden aan de voorkant van het water. Dit hebben we opgelost door met de vertex color via de mesh de positie van de lijn te definiëren. Verder is de water shader goed instelbaar met veel eigenschappen om te veranderen.

360 Aiming System

Met het 360 aiming system is het mogelijk op in 360 graden rond om de speler heen te schieten. Als de speler in de buurt komt van een target wordt de richting vast gezet op de target, zodat de speler makkelijker een target kan raken. Ik heb hiervoor een bestaand target selector systeem omgebouwd en extra’s toegevoegd, zoals een instelbare hoek waarin de target gelocked moet worden. Het grijze blokje geeft aan welke kant de speler op richt. Ik gebruik dit blokje, omdat het 3D model van de speler nog niet klaar was om met de arm te richten.

Custom Force Property Drawer

In dit project gebruiken we een eigen force systeem. Om het makkelijker te maken voor developers om te begrijpen welke eigenschappen zij kunnen veranderen heb ik een custom property drawer gemaakt voor de force die instelbare fields weglaat als ze niet kunnen worden gebruikt door een combinatie aan instellingen. Een voorbeeld daarvan is dat als Type continuous is dan zal duration niet meer instelbaar zijn. Ook moet er in de toekomst onderaan uitgelegd worden hoe de type of modifier werkt. Daarnaast is deze custom property drawer makkelijk uit te bereiden met nieuwe combinaties of uitleg tekst.