Thursday, August 11, 2016

Development Shaderlessen

Als artist heb ik de shader lessen gevolgd van de developers en heb daar een aantal manieren geleerd hoe je shaders kan schrijven in code zonder gebruik te maken van ShaderForge. Voor mijn gevoel is het programmeren van shaders veel duidelijker dan het maken van shaders met ShaderForge omdat ik precies weet wat ik doe en eerst een idee moet hebben van de functies die ik gebruik voor ik er iets mee bouw.



We begonnen met het maken van een fixed-function shader, hiermee heb ik een shader gemaakt die tussen twee textures blend. Het blenden van de textures had ik aan de praat voor dat het duidelijk werd dat er ook gewoon gebruik van een lerp functie gemaakt kon worden dus ik heb de code niet aangepast, het zou dus kunnen dat mijn versie veel minder efficient is. Ook word de UV bewogen door de tijd er aan toe te voegen, dit kan bijvoorbeeld toegepast worden bij een water texture (zie laatste shader).





Deze shader maakt gebruik van de screenspace als een UV map voor het object, dit geeft een vreemd effect.




Deze shader vind ik het er het beste uitzien en is ook het meest toepasbaar, ook hier worden de UVs bewogen alleen hier gaat het om 3 verschillende normal maps. 



A* Pathfinding






Ik wilde een game creëren welke gebruik maakt van pathfinding, dit was nadat ik bezig was met m'n 'world generation' dus ik had gehoopt dat het samen kon werken. Ik wist natuurlijk niks van hoe deze pathfinding precies werkte maar ik had een channel gevonden welke veel goede en duidelijke Unity tutorials maakt. deze channel: https://www.youtube.com/user/Cercopithecan/featured. En het gaat om de hierboven getoonde tutorial. 

Terwijl ik de tutorial volgde heb ik behoorlijk veel geleerd, had ik eerder geweten over 2d arrays dan had ik bijvoorbeeld heel anders gekeken naar m'n 'world generation' en het waarschijnlijk veel slimmer in elkaar gezet. Ik vond de tutorial best lastig maar ik had het uiteindelijk wel met moeite aan de praat. De tutorial heb ik tot de helft gevolgd dus ik heb niet gekeken naar de optimalisatie, ik mis nog een bepaalde basiskennis om hier meer van te leren dan te kopiëren.

Wednesday, June 29, 2016

Cells Multiplayer



Cells was vooral een experiment om te kijken hoe je inheritance precies toepast tijdens het programmeren, uiteindelijk heb ik ook een beetje gespeeld met het nieuwe networking van Unity omdat het nu nog gratis was voor max 100 spelers omdat het in beta is.


Hier kun je zien hoe ik gebruik maak van inheritance, het was de bedoeling om het 'entityscript' de functies te geven welke de meeste entities zullen gebruiken zoals bewegen, draaien en schieten. Toen werd het script alleen gebruikt door de player maar je zou bijvoorbeeld enemies hier ook uit kunnen laten inheriten en dezelfde functies gebruiken. Omdat ik de game multiplayer wilde maken ging ik me daar in verdiepen, ik kwam een tutorial tegen welke networking uitlegde dus had ik besloten om het te doen met gebruik van networking.

Het networking gedeelte bleek lastiger dan ik had gehoopt en hierdoor word er weinig gedeeld over het netwerk. Zo kan je in het filmpje zien dat de grootte en rotatie bijvoorbeeld niet worden gedeeld wat er vreemd uit ziet op een ander zijn scherm. De tutorial die ik volgde begon over een manier hoe alles soepeler kon blijven draaien door eigenlijk een soort delay op alle informatie te zetten.



Dit volgende tutorial heb ik gevolgd om me te verdiepen in Unity 5 networking.



Level generation



Een van de irritante dingen aan het maken van games is de lange tijd die je steekt in het creëren van levels. Niet het designen per se, er zit natuurlijk een logica achter hoe een level in elkaar steekt. Hierboven zie je een plaatje met wat ik uiteindelijk heb gemaakt, ik geef een plaatje aan een script welke op de overeenkomende plaatsen objecten plaatst.

Het volgende is het script die ik heb geschreven om de wereld te bouwen;

Zoals je hier kan zien stop ik als eerst alle pixels in een array waarna ik Generate() uitvoer, deze loopt door alle pixels heen en vergelijkt de kleur, de verschillende kleuren komen overeen met andere variabelen waardoor herkend word welk object er op de locatie geplaatst moet worden.

Wanneer het een muur is word er nog een method gecalled, touchingForeign(). Hier word gekeken om de pixel heen of het niet tegen een andere muur staat, als het namelijk niet tegen een andere muur staat betekend het dat er een gat onstaat in het level dus word deze wel gespawned. Dit maakt het script ook iets efficienter omdat niet al het zwart in het design word gevuld met muren.

Op een later moment bedacht ik me dat het heel cool kon zijn als ik real-time om het level heen kon vliegen en muren, vloeren en misschien objecten kon plaatsen. Om deze reden worden alle gespawnede objecten geparent aan een container met spawnBlock(). Het kostte meer moeite dan ik er voor over had om het aan de praat te krijgen dus toen had ik dit project achtergelaten.