Dit is een blog waar ik bijhoud wat ik geleerd heb in mijn 38 uur zelfstudie. In de link op de volgende regel houdt ik bij hoelang ik overal mee bezig ben geweest.
Urenbesteding: http://bit.ly/1ZR0cAv
Elke tutorial beschijf ik los in een blogpost, wanneer het een tutorial reeks is komt het in de zelfde blog. De losse filmpjes (hoofdstukken) worden dan onder kopjes verdeeld.
Unity zelfstudie blog
zaterdag 14 april 2018
dinsdag 8 december 2015
IMAGE EFFECTS: OVERVIEW
Link
Waarom deze tutorial?
In deze tutorial wordt van alles uitgelegd over image effect zoals bloom, screen space abient occlusion, global fog en aberration. Ik heb geen idee wat dit allemaal betekend dus ik hoop dat de tutorial me daarover kan uitleggen.
Wat heb ik er van geleerd?
Image effects komen pas nadat de frames gerendered zijn, dus het is wel wat zwaar om te gebruiken.
In component - image effects - rendering ; zitten allerlij image effects. Dit maakt een script aan op je object.
Met de screen space ambient occlusion kan je de occlusion intensity aanpassen om donkere plekken in de scene donkerder maken. Met blur kan je danaangeven hoe veel zachter de image moet worden. Hoe meer blur hoe zachter het word. Rond 2 is mooi, hoe meer je dit doet hoe zwaarder het voor de pc.
Het verschil tussen de normale fog en de global fog is dat je de hoogte van de fog aanpassen.
Met normale fog kan je de kleur aanpassen om zo water effecten te creeeren.
Component - image effect - bloom and glow; hierin staan 3 opties: Bloom is de normale, BloomAndFlares is alleen voor oudere projecten en Bloom(optimized) is handig voor mobile devices.
Bloom legt een extra laag op het beeld dat alleen de lichtste punten blurred. Dus bijvoorbeeld licht, zo geef je een beetje het glow effect op lichte gedeeltes. Met de treshold kan de de sterkte aanpassen.
Vignette and chromatic aberration maakt een mask aan over het scherm dat de randen van de camera ietsje donkerder maakt. Je kan ook de randen blurren om een depth of field achtig effect te krijgen.
Met Chromatic Aberration geef je nog een effectje aan de camera wat niet echt uitgelegd wordt.
Met depth of field zorg je ervoor de hoe verder weg, hoe meer blurred het plaatje word. Dit geeft een beetje het idee van iets wat ver weg is, is niet scherp te zien.
In component - image effects - rendering ; zitten allerlij image effects. Dit maakt een script aan op je object.
Met de screen space ambient occlusion kan je de occlusion intensity aanpassen om donkere plekken in de scene donkerder maken. Met blur kan je danaangeven hoe veel zachter de image moet worden. Hoe meer blur hoe zachter het word. Rond 2 is mooi, hoe meer je dit doet hoe zwaarder het voor de pc.
Het verschil tussen de normale fog en de global fog is dat je de hoogte van de fog aanpassen.
Met normale fog kan je de kleur aanpassen om zo water effecten te creeeren.
Component - image effect - bloom and glow; hierin staan 3 opties: Bloom is de normale, BloomAndFlares is alleen voor oudere projecten en Bloom(optimized) is handig voor mobile devices.
Bloom legt een extra laag op het beeld dat alleen de lichtste punten blurred. Dus bijvoorbeeld licht, zo geef je een beetje het glow effect op lichte gedeeltes. Met de treshold kan de de sterkte aanpassen.
Vignette and chromatic aberration maakt een mask aan over het scherm dat de randen van de camera ietsje donkerder maakt. Je kan ook de randen blurren om een depth of field achtig effect te krijgen.
Met Chromatic Aberration geef je nog een effectje aan de camera wat niet echt uitgelegd wordt.
Met depth of field zorg je ervoor de hoe verder weg, hoe meer blurred het plaatje word. Dit geeft een beetje het idee van iets wat ver weg is, is niet scherp te zien.
2D PHYSICS
Link
Waarom deze tutorial?
Ik weet hoe physics werken in 3D, maar hoe werken ze in 3D? Is dat heel anders? Ik ga er achter komen in deze tutorial reeks.
Wat heb ik er van geleerd?
2D Physics Overview
Ze bewegen bijna hetzelfde als in 3d maar inplaats van rigidbody is het rigidbody 2D.
2D en 3D physics kunnen samen in een scene zitten maar ze zullen niet met elkaar colliden.
Je kan alles aanpassen aan 2D physics in het menu.
Er zijn verschillende colliders, die je verschillend moet gebruiken, zoals een bal zou een ronde collider zijn maar een doos een vierkante.
Rigidbody 2D
Rigidbody 2D's moeten ook een colider hebben om te kunnen interacteren met andere objecten.
Met liniear en angular drag kan je een object snelheid of een draaisnelheid meegeven.
Wanneer een object stil ligt kan je hem laten slapen totdat hij weer collision krijgt, handig om geheugen te besparen voor objecten die niet veel bewegen.
Collider 2D
Er zijn verschillende colliders, maar bij de polygon collider kan je een sprite pixel perfect op collision checken.
Met een polygon collider kan je ook vertexes aanmaken en veranderen om je eigen apparte colliders te maken.
Het is handig om een object dat niet beweegt te verzien van alleen een collider 2D en niet een rigidbody zoals de bewegende objecten.
Hinge Joint 2D
Met hingejoints kan je een object om een punt laten draaien, dit kan je ook op een object doen zodat je een ketting krijgt.
Door de anchor position aan te passen zorg je er voor dat de joint daar om draait.
Met use motor draait het object automatisch met een maximale druk kracht.
Door angle limits te gebruiken zorg je dat het object een maximale draai kan maken.
Area Effector 2D
Een area effector is een object dat kracht kan uitoefenen op een rigidbody2D. Zoals wind of iets dergelijks.
Om een erea effector te gebruiken moet je een collider op trigger zetten, anders werkt het (niet) goed.
Je kan dan een erea effector 2D component toevoegen.
Distance Joint 2D
Met distance joints kan je twee objecten aan elkaar koppelen, ze blijven dan aan elkaar hangen (of aan de wereld)
Met collider connecter kan je kiezen of de objecten elkaar aan kunnen raken of niet.
Wanneer de twee objecten verder uit elkaar verweiderd zijn dan dat je officieel hebt aangegeven dat ze mogen, schieten ze naar elkaar.
Point Effector 2D
Point effectors kunnen dingen doen zoals expolosions. Ze geven dus vanuit een punt effecten.
Met een collider mask kan je kiezen welke objecten wel of niet aangetast moeten worden.
Door de force magnitude negatief te maken zorg je dat een object naar de point effector wordt gezogen.
Bouncing & Sliding in 2D
Met physics material kan je aangeven of een object moet stuiteren of glijden.
Beginner Unity Basics #5 - Hotkeys
Link
Waarom deze tutorial?
Het lijkt mij erg handig om alle shortcuts te weten in de editor van unity, zodat ik nog sneller kan werken.
Wat heb ik er van geleerd?
Met de q toets krijg je het hand icoontje. W is bewegen, E draaien en R scalen maar dat wist ik al.
Met V verander je de pivot scale.
Met X verander je van local naar global.
Wanner je V inhoud kan je een object met een vertext verslepen en dan snapt het.
Met ctrl-shift-N maak je een nieuw leeg game object aan.
Ctrl-alt-F beweegt een object in je view.
Met crtl + cijfer, ga je door verschillende windows. Wanneer een venster niet open is maakt het programma deze open.
Ctrl - Y is redo.
zaterdag 5 december 2015
UNITY TIPS AND TRICKS GRAB BAG
Link
Waarom deze tutorial?
Veel dingen in unity kunnen makkelijker, sneller of georganiseerder dan dat ik het nu doe. Ik hoop dat deze tutorial mijn kennis kan verrijken in dit gebied.
Wat heb ik er van geleerd?
Wanneer je een package importeerd uit de asset store komt het allemaal in de assets folder, dus wanneer je veel assets importeerd komen ze allemaal door elkaar.
Wanneer je op het balkje boven de preview van het model klikt in een prefab krijg je een grote window waar het het model beter kan bekijken.
Rechtermuisknop op een prefab en dan export package exporteerd een pakketje van de prefab. In het scherm wat je dan ziet zie je ook dat er veel meer geexporteerd wordt dan je denkt nodig te hebbben, dit is alles wat het object nodig heeft.
http://www.adamtuliper.com/2015/06/open-unity-5-project-with-right-click.html - met dit programmatje kan je folders openen in unity door er met de rechtermuisknop op te klikken.
Wanneer je in de inspector van normal naar debug mode gaat kan je ook de private veriables zien.
Met de carve optie in navmesh kan je live obstacles de navmash aan laten passen. Dus wanneer er een steen in de weg staat gaat de character omlopen totdat je de steen weg haalt. Dit is wel redelijk zwaar voor het programma dus gebruik het niet te veel.
Wanneer je een navmesh hebt kan je een lijn tekenen van de character naar zijn doel dat update met welke obstakels er tussen staat.
Inplaats van 1400 objecten te maken kan je ook particles gebruiken. Normaal gesproken zou je bijvoorbeeld een muntje kunnen op pakken. Door particles te verkleden als objecten kan je net alsof doen.
Door physics te gebruiken wordt een spel snel zwaar. Wanneer 1400 muntjes stuiteren op de grond zorgt dit voor enorm veel lag. Gebruik particles om precies dezelfde effecten te krijgen.
donderdag 3 december 2015
CREATING A CASUAL JEWEL MINING GAME
Link
Waarom deze tutorial?
Dit spel was vroeger altijd al een van mijn favoriete games. Het lijkt me erg interessant om te zien hoe dit in unity is gemaakt. Hopelijk leer ik wat meer over C# en unity interface.
Wat heb ik er mee gedaan?
De tutorial heb ik mee gevolgd en ook gemaakt in unity, daarna heb ik alles goed terug gekeken en bekeken hoe het werkt. Als laatste heb ik toegevoegd dat de snelheid van de grijper aangepast is op basis van welke steen je pakt. hoe groter de steen hoe langzamer deze binnen wordt gehaald.
Download de game hier: https://drive.google.com/file/d/0B8_31sYIdjjob1hYSFoyRl9oY1k/view?usp=sharing
Wat heb ik er van geleerd?
Door op add emty gameobject child te klikken maak je een gameobject aan als child van een object.
Door de animationspeed op 0 te zetten pauzeer je de animatie. Daarna kan je de speed weer op 0 zetten om verder te gaan.
Door een linerenderer te gebruiken kan je een soort touw maken dat vanuit een punt schiet. Dit is dus eigenlijk een raycast die controleerd of hij iets raak maar er uitziet als een touw.
Door invoke te gebruiken kan je erg gemakkelijk een timer maken.
Met compareTag kan je tags vergelijken. Als het object dat je raakt de tag heeft gebeurt er iets.
Door de animationspeed op 0 te zetten pauzeer je de animatie. Daarna kan je de speed weer op 0 zetten om verder te gaan.
Door een linerenderer te gebruiken kan je een soort touw maken dat vanuit een punt schiet. Dit is dus eigenlijk een raycast die controleerd of hij iets raak maar er uitziet als een touw.
Door invoke te gebruiken kan je erg gemakkelijk een timer maken.
Met compareTag kan je tags vergelijken. Als het object dat je raakt de tag heeft gebeurt er iets.
woensdag 2 december 2015
Scriptable Objects
Link
Waarom deze tutorial?
Scriptable objects zijn een data container. Ze hoeven niet in de scene te staan maar zijn opgeslagen als assets. Het lijkt me interessant om te kijken wat hiermee allemaal kan.
Wat heb ik er van geleerd?
Scriptable obects zijn parralel aan monobehaviour. Ze hoeven niet aan een gameobject te zitten. Ze kunnen als assets worden opgeslagen, ze moeten gemaakt worden met code.
Ze worden voornamelijk gebruikt om data op te slaan tijdens een edition sessie en om data op te slaan als asset. Daarnaast hoef je ook geen xml, json of text files te maken buiten unity.
Serialization betekend dat je data encode voor opslag (op een disk of in een file).
Private fields moeten eerst serialized worden om zichtbaar te worden in de editor.
Je kan public fields ook niet sirializen door [nonSerialized] ervoor te zetten.
In een script om een gameobject maak je een referentie naar een script die niet op een object zit. Om dat te doen moet je een instance maken van dat script.
Met [menuitem("Assets/create/myscriptableobject")] maak je een nieuwe knop aan in de editor. Dan kan je een asset aanmaken met AssetDatabase. De asset geef je dan aan dat het, het script is.
Door een scriptable object te maken kan je ook data opslaan zonder xml te gebruiken of een ander programma van een 3rd party.
Unite 2014 - New Unity Networking in 5.x
Link
Waarom deze tutorial?
Ik heb zelf alleen nog maar offline games gemaakt, wel met 2 spelers op een computer maar nog nooit via lan of wifi. Ik hoop dat deze tutorial wat meer uitleg geeft hierover.
Wat heb ik er van geleerd?
Instantiate maakt een nieuw gameobject aan en Spawn voegt hem toe aan de server (netwerk). Dan zit hij in de spawning system. Alle nieuwe spelers die binnenkomen krijgen dan dat object in zijn huidige staat.
Door een nieuw game object te maken met een network manager component er op maak je een network manager. Hier kan je dan alles aan passen.
Met offline scene en online scene kan je aangeven waar de speler heen moet wanneer hij offline en online is (gaat).
Dan kan je spawnable objecten in de network manager gooien om aan te geven welke objecten er gespawned kunnen worden.
Met de network manager hud component krijg je simpele buttons waarmee je de network dingen kan aanpassen. (inplaats van een losse scene waar je die buttons intergreerd).
Door isLocalPlayer te gebruiken kan je kijken of iets alleen moet gebeuren bij een client of op de hele server. Zoals bewegen van je character moet alleen gebeuren bij de speler die beweegt.
Om met andere computers te verbinden moet je een ip adress invullen inplaats van lokaal verbinden. Dit kan je ook in de network manager aangeven.
Door een nieuw game object te maken met een network manager component er op maak je een network manager. Hier kan je dan alles aan passen.
Met offline scene en online scene kan je aangeven waar de speler heen moet wanneer hij offline en online is (gaat).
Dan kan je spawnable objecten in de network manager gooien om aan te geven welke objecten er gespawned kunnen worden.
Met de network manager hud component krijg je simpele buttons waarmee je de network dingen kan aanpassen. (inplaats van een losse scene waar je die buttons intergreerd).
Door isLocalPlayer te gebruiken kan je kijken of iets alleen moet gebeuren bij een client of op de hele server. Zoals bewegen van je character moet alleen gebeuren bij de speler die beweegt.
Om met andere computers te verbinden moet je een ip adress invullen inplaats van lokaal verbinden. Dit kan je ook in de network manager aangeven.
dinsdag 1 december 2015
Procedural Cave Generation tutorial
Link
Waarom deze tutorial?
Deze tutorial legt uit hoe je een random grot maakt. Het lijkt me interessant om te zien hoe je nou daadwerkelijk meshes kan maken met script en hoe je gangen kan maken die op elkaar door lopen.
Wat heb ik er van geleerd?
Cellular AutomataDoor int[,] map; te typen maak je een grid aan van int's.
Door [Range(0,100)] neer te zetten voor een in kan die int niet grooter of kleiner worden dan die je aangeeft.
Door de tijd (Time.time) te gebruiken voor random, krijg je een semi random getal omdat de tijd altijd veranderd.
Door een seed te gebruiken met randomize kan je het random maken maar ook controle houden door een seed te geven die elke keer dezelfde randomize geeft.
Marching Squares
Door Gizmos.DrawCube te gebruiken kan je een kubus tekenen op het scherm.
In deze tutorial worden kubussen getekend om zo een grot te maken. De randen van deze kubussen worden afgeschaaft om zo zachte randen te krijgen. Elke kubus krijgt nu een binear getal mee om aan te geven welke randen afgeschaaft moeten worden.
Verder wordt er veel code getypt maar niet echt goed uitgelegd wat er mee wordt bedoeld, ik heb zo goed mogelijk er naar gekeken.
Creating Meshes
Tijdens deze tutorial kwam ik er achter dat deze tutorial-reeks net iets te hoog gegrepen is voor mij. Ik kan niet echt goed volgen wat hij aan het doen is en probeer nu een andere tutorial te vinden die beter bij mij past.
maandag 30 november 2015
Tanks, a two player game Official unity tutorial
Link
Waarom deze tutorial?
Tot nu toe heb ik alleen nog maar tutorials gekeken over single player games. Het lijkt me ook leuk om me te verdiepen in hoe je nou een twee speler spel maakt.
Wat heb ik er van geleerd?
Scene Setup
Door de slider onderaan de file manager te slepen kan je instellen hoe groot de icoontjes moeten zijn op het scherm, handig om meer overzicht te krijgen dus.
In de lighting tab kan je onderaan auto uitzetten als de belichting in een scene al gemaakt is zodat het niet nog een keer hoeft te laten. Of het manual te doen.
Een scene wordt standaard geladen om snel iets te bekijken zoals een model. Dit betekend dat niet alles op de goede plek staat wanneer je begint omdat het puur gemaakt is om snel te kijken of je model goed is.
Tank Creation & Control
Een model of prefab zonder transform word op 0,0,0 gezet, tenzijj je dus een transport heb meegegeven aan de prefab.
Door inplaats van een mesh colider te gebruiken op elk object in de scene een box collider of capsule collider te gebruiken bespaar je veel rekenkracht omdat hij niet elke polygon hoeft te controleren.
Een box collider kan je aanpassen met de edit collider button of in cijfers aangeven daaronder.
Door een prefab aan te passen in de hierachy (dus in de scene) en hem daarna op de slaan door op apply te klikken, sla je hem ook op in de prefab in de project folder.
Door bij een particle de simulation space op world te zetten en de emission op distance inplaats van time, kan je particles maken op basis van hoe ver het object gaat (rijdt).
Wanneer je physics gebruikt betekend kinematic of je force op een rigidbody uitvoert of niet. Handig voor bijvoorbeeld een pinball flipper, dan schiet je de bal er mee weg maar wordt de flipper niet benadeeld door gravity etc.
Mathf.abl is de absolute waarde dus als je een float hebt van 0.6 zou het 1 worden, heb je 0.4 dan wordt het 0.
Wat je in de inspector aanpast override wat er in het script staat.
Door een kleine pitch verandering toe te voegen aan het geluid, zou je tegengaan dat wanneer er twee spelers allebij een geluid afspelen het elkaar in de weg gaat zitten. Dit heet phasing.
Wanneer je in de prefab in een scene iets aanpast in de inspector wordt de text voor de nummer (bijvoorbeeld Speed) dikgedrukt, dit betekend dat het alleen in dit object nog aangepast is. Zou je dit opslaan in de prefab door op apply te klikken bovenaan de inspector, dan veranderd dit in alle prefabs.
Camera Control
Wanneer je een object als een child toevoegt aan een object neemt het de rotatie van dat object over. De positie van de child is local van de parent.
Een frustum is de camera view. Je kan zoomen met een ortographic camera door de size aan te passen.
Met [HideInInspector] kan je een public variable niet in de inspector laten zien.
Met GetComponentInChildren kan je een component opvragen in een child van het object. Dit vind de eerste child en de eerste component daarvan dus let er mee op.
Wanneer je een camera hebt die een physiscs object volgt moet deze ook in fixedupdate aangezien het anders buiten sync loopt.
Met Vector3.SmoothDamp kan je van een plek naar de andere gaan met een damping.
Met continue; in een forloop stop je de loop en ga je door met de volgende i.
Je kan in een array in de inspector gewoon een object of transform er op gooien, dan maakt hij automatish de array langer.
Tank Health
Met een worldspace canvan kan je een canvas in de scene maken.
Met sliders kan je verticle en horizontal input geven. Dit staat standaard op horizontal en verticle, dezelfde als in de input manager dus het is slim deze een andere naam te geven.
Met een slider kan je ook een healthbar maken.
Door de canvas op worldspace te zetten en als child van een object te maken kan je een ui element aan een object koppelen zoals een healthbar die mee moet bewegen.
Shell Creation
Door een trigger colider te gebruiken is de collider niet meer solid. Er kan dus niets meer tegen aan komen.
Wanneer je een object kapot maakt gaan alle childs ook kapot. Om iets kapot te maken maar de childs niet maar je de childs eerst los door .parent = null; te zeggen.
Wanneer je een component op een variable in de inspector moet slepen bijvoorbeeld: audio source. Kan je het gameobject met de audio source component er in zijn geheel op slepen. Dan weet unity welk object je bedoelt.
Firing Shells
Om te kunnen schieten met een loop (zoals een tank) kan je beter een gameobject maken en die steeds op het punt waar je een kogel wil laten verschijnen plaatsen. Zo kan je makkelijk zeggen; hier moet een kogel komen wanneer er geschoten wordt.
Wanneer je as rigidbody achter een instantiate zet maak je hem aan als rigidbody.
Game Managers
Door losse gameobjects te maken kan je makkelijk in de scene een punt aangeven waar iets moet komen (zoals spawnpoints).
Door naar 2d te veranderen in de camera view kan je gemakklijk een canvas aanpassen.
Best fit scaled de text naar de grootte dat het mag. Je kan dan een min en max aangeven.
Wanneer je zelf een class maakt die niet van monobehavior inharit, moet je zelf zeggen dat hij sirializible is (dus zichtbaar in inspector).
Door while loops te gebruiken in een courotine, kan je ies laten wachten totdat iets klaar is. Bijvoorbeeld wacht tot iemand bij finish is. Of iets dat controleerd hoeveel spelers er nog level, wanneer de laatste dood is moet er iets gebeuren.
Om een message text te legen type je string.empty (dus een lege string) hetzelfde dus als "".
Audio Mixing
In de project folder kan je een audio mixer maken.
In een audio mixer kan je dan verschillende groepen maken waar geluid in kan, die geluiden worden dan naar de master gestuurd die het laat horen aan de speler.
Bij een audio source kan je dan een output selecteren. Bijvoorbeeld het motergeluid bij een auto zou je kunnen sturen naar de auto groep.
Met een Duck effect kan je een geluid (zoals background music) zachter laten worden tijdens een hard geluid.
donderdag 26 november 2015
Official Unity 3d C# Tutorial Beginner
Link
Waarom deze tutorial?
Deze tutorials gaan over C# in unity en zijn ook gemaakt door de makers van unity. Ze zullen me vast veel inzicht geven in hoe het werkt. Ook al ken ik veel van de beginners code al, is het toch handig om het nog een keer te horen van een andere tutorial en het wordt hier erg goed uitgelegd.
Wat heb ik er van geleerd?
Scripts as Behaviour Components
Je kan scripts zien als een gedrag onderdeel van een object. Alle dingen die je op een gameobject zet zijn eigenlijk componenten.
Je kan scripten in javascript en C# en Boo maar Boo wordt niet vaak gebruikt.
Variables and Functions
Het eerst gedeelte van een variable opzetten is een decleration en het geven van een waarde hieraan heet initialization.
Start() gebeurt wanneer een object de scene in komt.
Een void functie geeft niets terug maar een int functie kan dat wel doen. Zo kan je een lastige rekensom in een functie stoppen om het zo georganiseerd te houden.
Conventions and Syntax
een punt tussen twee woorden in code heet dot opperator. Met deze functie kun je in een groep zoeken, bijvoorbeeld de groep Debug en dan Log. Dus Debug.Log is log in de groep Debug.
Door indenting te gebruiken houd je de code overzichtelijk. Dit betekend tabs gebruikem tussen { en }.
C# vs JS syntax
In javascript schrijf je direct in de class inplaats van bij C# waar je dat zelf moet aangeven.
In javascript geef je na de naam aan wat voor file het is inplaats van ervoor zoals bij C#
In javascript start je met function voor een functie en geef je daarna aan wat het voor functie is. In C# doe je dat er voor.
IF Statements
Deze informatie kende ik al en heb hier dus niets van geleerd.
Loops
Looping heet vaak itterating.
Met while kan je net zo lang iets doen totdat het niet meer zo is. Het is ook handig om het te gebruiken om iets maar een keer te doen met een bool.
Met foreach kan je door een array lopen en elke array iets laten doen.
Scope and Access Modifiers
Een scope is waar een code gebruikt wordt. Ze kunnen dus niet buiten hun scope komen.
Een acces modifier is public of private.
Awake and Start
Awake kan het best gebruikt worden voor referenties tussen scripts en initialisatie.
Start kan het best gebruikt worden om iets pas dan te laten gebeuren. Met awake geef je hem bevoorbeeld kogels maar bij start kan hij pas schieten. Start gebeurt ook maar een keer in het spel.
Update and FixedUpdate
Update is wordt een keer per frame gevraagd. Het is dus verschillend elke keer en niet vast.
Met Fixedupdate wordt het op een vast tempo gedaan. Handig voor dingen die gelijkmatig moeten verplaatsen zoals physics.
Vector Maths
De lengte van een vector is de magnitude.
Met je linker hand kan je de Axes onthouden. Je duim is dan X, je wijsvinger Y en je middelvinger Z.
Met dot product, magnitute en cross product kan je twee vectoren combineren.
Enabling and Disabling Components
Met de functie Enabled kun je een component uitzetten, zoals bijvoorbeeld en licht.
Door een vraagten voor een bool te zetten zeg je: zet deze variable naar wat hij nu niet is. Handig voor switches dus.
Activating GameObjects
Met setactive zet je een object aan of uit in de scene. Je kan een child van een object nonactief maken door de parent van het object nonactief te maken. Door de parent dan weer terug te veranderen maak je de child niet direct actief.
Translate and Rotate
door een time.deltatime toe te voegen aan een translate of rotate gaat het evensnel als de tijd inplaats van even snel als de frames.
Vector3.up en alle zoals deze gebruiken local transform en draaien dus mee met het object.
Look At
Er wordt uitgelegd hoe je een object kan volgen maar dat wist ik al.
Linear Interpolation
Lerp wordt gebruikt om de waarde tussen twee waardes te krijgen en kan dus gebruikt worden voor smooth moving maar ook om te kijken wat de tussenwaarde is.
Destroy
Met destroy kan je objecten verwijderen uit het spel maar ook alleen een component van een object af halen zoals bijvoorbeeld een licht o.i.d.
GetButton and GetKey
Get getbutton kan je de input manager gebruiken en met getkey specefieke keys zoals space. Dit kan je gebruiken als je wilt dat mensen hun keys niet mogen aanpassen.
GetAxis
Het veschil tussen getaxis en getbutton is dat getbutton een bool terug geeft maar met een axis krijg je meer.
Het is een float.
Met Gravity zeg je hoe snel het getal weer terug naar nul moet gaan vanuit -1 of 1.
Met deadzone kan je een minimaal punt stellen waar de joystick overheen moet om te zorgen dat de joystick niet te gevoelig wordt.
OnMouseDown
Met onmousedown kan je kijken of er op een object geklikt is.
GetComponent
In deze tutorial ging het over getcomponent, hier snapte ik alles al van. Wat wel handig was om te weten is dat get component erg zwaar is om te gebruiken dus gebruik het niet vaak.
Delta Time
Time.DeltaTime is de tijd tussen twee frames, het kan dus gebruikt worden om bewegingen te laten 'smoothen'.
Data Types
Value types zijn variabelen die echt iets bevatten, references kijken ergens naar en gebruikt dat.
Values zijn: Int, float, double, bool, char en structs. Refereces zijn: Classes zoals tranform en gameojects.
Classes
Een script moet de zelfde naam hebben als de class er in.
Classes moeten eigenlijk maar een taak hebben.
Gebruik meer losse scripts om overzicht te houden.
Instantiate
Met instantiate kan je een prefab in de scene clonen. Handig voor schieten o.i.d.
Je kan ook iets inladen als een soort. Bijvoorbleed: As rigidbody.
Arrays
je kan een array ook aanmaken door de waardes er in de initialisation in te gooien. De hoeveelheid waardes die je er daar in gooit bepaald dan hoe lang de array is.
Invoke
Hiermee kan je iets uitvoeren na een bepaalde tijd.
Invoke("IETS",2); zegt het zelfde als IETS(): maar dan met een timer.
Enumerations
Enums hebben maar een bepaalde aantal waardes. Het is dus een variable die bijvoorbeeld maar 4 waardes heeft zoals noord, oost, zuid en west. Deze kan je dan later weer opvragen.
Switch Statements
Met switch kan je eigenlijk een variable bekijken en dingen laten doen wanneer die variable die waarde heeft.
Het zijn eigenlijk een boel if statements maar dan netjes georganiseerd.
Official Unity 3d C# Tutorial Intermediate
Link
https://unity3d.com/learn/tutorials/modules/intermediate/scripting/properties?playlist=17117
Waarom deze tutorial?
Deze tutorials gaan over C# in unity en zijn ook gemaakt door de makers van unity. Ze zullen me vast veel inzicht geven in hoe het werkt. Ook al ken ik veel van de beginners code al, is het toch handig om het nog een keer te horen van een andere tutorial en het wordt hier erg goed uitgelegd.
Wat heb ik er van geleerd?
Properties
Met properties krijg je meer controle over je variables. Je kan hem dur read only of write only maken.
Daarnaast kan je in properties meer code stoppen. Dus extra code in een variable.
Ternary Operator
Dit is een kleinere if or else statement. Hiermee kan je bijvoorbeeld in een lijn code vragen of een bool false of true is en daar een antwoord op geven, allemaal in een regel.
Statics
Een static variable is een variable die alleen tot de classe hoort waar hij gemaakt is. Het veranderd alleen hier en niet ergens anders. Handig om variables te vragen van andere scripts.
Door statics te gebruiken hoef je een classe niet te instantiaten.
Method Overloading
Door overloading te gebruiken kan je een method maken, maar die op twee manieren gebruiken.
Je kan dan iets naar de method sturen, De method gaat dan kijken welke waardes je hebt meegegeven en voert de method uit die het beste lijkt op de info die je hebt meegegeven.
Generics
Dit is een method die eigenlijk vrij losjes werkt. Je kan op deze manier een type meesturen met de method, dan krijgt de method de type mee. Je kan ook bepaalde types uitsluiten.
Inheritance
Met inheritance kan je in een child van een parant de zelfde functies gebruiken als de parent. Private dingen kan je niet accessen in de child..
Met base class krijg je de informatie uit de base class, dus het eerste object uit dehieracy.
Polymorphism
Door bijvoorbeeld een script te maken die verteld hoe een character beweegd kan je daarnaa losse scripts maken die inheritten van de beweeg class en daar losse characters van maken zoals vijanden
Een child class is een parent class maar een parent class is geen child class.
Member Hiding
Om een variable te verstoppen van de parent class gebruik je New (variable). Anders pakt hij de variable van de parant.
Dit is handig om iets in een child aan te maken zonder dat alles meekomt van de parent.
Overriding
Met overiding kan je in een class van een class van een parent zeggen dat je een method in de base class wil aanspreken maar wel iets wil aanpassen en dus 'overriding'.
Zo kan je bijvoorbeeld zeggen dat elke enemy een animatie en geluid moet afspelen bij 'Yell( )'
Dan krijgen alle clilds van dat object dezelfde functie, dan kan je zeggen ik wil die funcie doen maar met dit erbij. Dus overriding.
Interfaces
Door iets in de interface te stoppen moet alles wat je er in zet aan een soort controct voldoen.
Class B van class A kan inheritten maar met interfaces kan Class B Interface A implementeren
Interfaces start je met een I zoals Ikillable
Extension Methods
Door een losse class te maken met extension methods kan je methods maken zoals de tranform, die je niet kan aanpassen maar alleen kan oproepen.
De code komt dan ook te staan achter hetgene waar je een extension method voor maakt, bijvoorbeeld: transform.ResetTransForm();
Het stukje code zit dus nu een soort van in de transform.
Namespaces
Namespaces zijn de stukjes code aan het begin van het document. Deze bevatten stukjes code die je kan gebruiken in je script. Deze kan je ook zelf maken.
Lists and Dictionaries
Een list is een dynamishe array. Deze kan je dus tijdens het spel aanpassen. Handig voor inventories.
Dictornaries zijn een soort van lists, deze kan je dan aanvragen met keys.
Coroutines
Dit is een functie uitgevoerd in gedeeltes. Je kan iets iets laten doen totdat iets gedaan is. Bijvoorbeeld; naar een target laten lopen elke seconde.
Quaternions
Een transform rotation is opgeslagen als quaternions. Hierdoor heb je geen gimblelock. Dat is dat het object niet goed draait om local axis.
Lerp: Liniear inerpolatie over tijd. Dus 0 tot 1 gaat even snel.
Slerp: Spherical interpolatie over tijd. Dus 0 tot 1 gaan steeds sneller tot 0.5 en dan weer langzaam.
Delegates
Dit is een container voor functies die dan gebruikt kunnen worden.
Je kan dan vanuit andere scripts de functies opvragen. Dan kan je alles hierin uitvoeren of maar een paar dingen.
Attributes
Met attributes kan je bijvoorbeeld een range geven aan een variable. Zo kan je bijvoorbeeld een maximale snelheid geven aan een auto. In de inspector krijg je dan ook een balkje inplaats van een invul vlak om de variable aan te passen.
Met executeineditmode voer je de code uit in de editor zonder de scene te laten lopen.
Events
Met events kun je bijhouden wanneer iets gebeurt, dus bijvoorbeeld je drukt op een knop. Zo houd je ook alles netjes bij elkaar en zorg je ervoor dat je alles vanuit een event kan managen.
maandag 23 november 2015
Stealh Tutorial from unity3d.com
Link
Waarom deze tutorial?
Deze tutorial is van unity zelf en moet dus heel goed zijn. Ik denk dat ik hier veel van kan leren aangezien het meerdere aspecten aanpakt.
Wat heb ik er van geleerd?
Stealth: Project Overview
Dit was de intro. Hier heb ik niet veel van geleerd.
Game Setup and Lightning
Gebruik een los object om de mesh collider aan te geven inplaats van de echte scene. Hierdoor gaat neit elke poloygon van de echte scene mechcolider worden maar gewoon de simpele versie.
Door je licht in de scene te "bakken" bespaar je veel performance.
In het quality menu kan je aanpassen wat elke graphic setting aangeeft. Je kan de lichten bijvoorbeeld beter maken in bepaalde settings. Je kan ook aangeven wat de standaard is voor elk platform.
Bij schaduwen is Bias de afstand tot waar een schadus start. Softness is hoe zacht de rand is en softness fade is hoe ver weg de shades soft worden inplaats van hard.
Alarm Lights
Met Mathf.Abs krijg je de absolute waarde van wat je er in stopt.
Tag Management
Je kan een script aanmaken genaamt 'Tags' om tags op te slaan als een constant string. Zo kan je hem gemakkelijk op roepen door Tags.(tag naam) te typen.
Screen Fader
Door een plaatje dat je in je beeld wil gaan zetten (zoals een ui of gewoon zwart scherm) helemaal links onderin en klein te maken scheel je veel iritatie doordat je game scherm niet gelijk al vol zit met zwart of met ui elementen.
Game Controller
Door een game object aan te maken met een muziekje en daarna nog een game object aan te maken als child met een spannender muziekje kan je tussen de twee 'faden' wanneer het spannend wordt inplaats van te wisselen van audio.
Mathf.lerp kan je goed gebruiken om smooth tussen twee waardes te wisselen. Dit kan met bijna alles, volumes, transforms etc. Dat is handig om te weten, ik dacht dat dat alleen met transform kon.
CCTV Cameras
Door use light propes te gebruiken kan je sommige objecten wel of juist niet op laten lichten door het licht.
Je kan ook licht toevoegen aan een object als een component zodat hij daar aan te passen is en meewerkt met wat je veranderd in het object. Je kan hem dan ook veranderen in code.
Gebruik een model om een mesh collider te krijgen. Je kan daarna de mesh renderen uitzetten om alleen de collider te houden.
Laser grids
Door time.deltatime te gebruiken kan je heel makkelijk een timer maken. : Timer += Time.deltatime.
Door aan te geven dat een object static is kan je veel performance winnen. Het is dus geen interactief object.
Je kan een object tijdens het spel van material laten veranderen, dit is handig voor bijvoorbeeld switches o.i.d.
Player Setup
Omdat je met een bewegend model werkt dat collision heeft, moet je persee rigidbody gebruiken.
Player Animator Controller
Je kan wisselen tussen animatie gebaseerd op de waarde van een float. Erg handig voor het gebruik van rennen en lopen.
Je kan ook zeggen dat de animatie naar van idle naar lopen moet gaan wanneer de snelheid hoger dan X is. En natuurlijk andersom.
Met Any State kan je vanuit elke state naar een andere animation overlopen. Handig voor bijvoorbeeld doodgaan.
De animator is erg handig en overzichtelijk maar kan wel onoverzichtelijk worden met veel animations. Daar kan je layers voor gebruiken.
Hash IDs
Inplaats van een string op te vragen in de animator kan je beter een Hash ID Gebruiken, deze zijn minder zwaar.
Door een object op te slaan in de folder (er dus een prefab van maken) kan je hem overal veranderen. Wanneer je een prefab veranderd in de hierarchy moet je wel op apply klikken.
Player Movement
Physics objects kan je het best in de fixed update method zetten.
Met LookRotation kan je een object naar een target laten kijken.
Met PlayClipAtPoint kan je tijdelijk een object aanmaken dat geluid maakt en dan verweiderd wordt.
Door de speed in de animator aan te passen kan je heel gemakkelijk de snelheid aanpassen en daarmee de snelheid en de animatie aan passen.
Player Health
Je kan een float maken dat de tijd tussen het dood gaan en de scene opnieuw laden aangeeft. Zodat je niet gelijk opnieuw begint, en de animatie niet ziet van het doodgaan.
Inplaats van het level opniew te laden, kan je ook gewoon alle objecten terug zetten op hun plek.
Camera Movement
Je kan de camera in de scene de view van de editor laten aannemen met 'align with view'.
Omdat de camera een physics object volgt moet de update in fixedupdate
Door te raycasten vanuit de camera kan je kijken of er een object in de weg staat en dan de camera daarop aan te passen.
Picking up the key
Gebruik losse scripts voor losse dingen zoals of je een keycard hebt opgepakt, zo houd je overzicht.
Inplaats van gewoon een animatie op een object te gooien kan je beter een animator gebruiken zodat je de snelheid kan aanpassen en eventueel laten iets er mee kan doen in code.
Sla het op als een prefab om hem gemakklijk nog een keer te gebruiken.
Single Doors
Met de 'Is' keyword kan je kijken of iets - iets is. Bijvoorbeeld: "Other is CapsuleCollider".
met Mathf.max kan je een max stellen. bijvoorbeeld: max is 0 dan kan het niet lager dan 0
Maak je code zo, zodat je het op meerdere verschillende objecten kan gebruiken.
Double Doors
Deze tutorial was bijna hetzelfde als de vorige tutorial en heb hier dus niet veel van geleerd.
The lift
Deze tutorial gebruikte alleen code's die ik al begreep. Ik heb er dus niet veel van geleerd. Er werd uitgelegd hoe jet het einde van het level maakt, dus een zwart scherm en alles laten verdwijnen.
Enemy setup
Een enemy moet kinematic zijn als het een rigidbody is, anders bots hij tegen de muren aan.
Je kan een systeem maken zodat de enemies weten waar ze kunnen lopen, hierdoor krijg je een NavMash.
Enemy Animator Controller
Unity heeft een interne AI waar je sommge variables van kan gebruiken om de snelheid van de animaties aan te passen.
Wanneer je een humanoid animation gebruikt kan je automatisch berekenen welke animatie wanneer moet gebeuren, handig voor dingen zoals AI.
Binnen unity kan je een humanoid animatie nog aanpassen, zoals een shooting animation kan je in unity een andere kant op laten schieten met human IK's.
Door een mask te gebruiken kan je bepaalde delen van een animatie uitzetten.
Enemy Sight
Door navmesh te gebruiken kan je niet alleen een pathfinder maken maar ook controleren hoe ver het van een punt naar een ander punt is om te lopen.
Animator setup
Met damping kun je snelle onverwachte beweginen tegengaan door het iets slomer te laten verlopen. Zoals plotseling om te draaien.
Met setfloat kan je een damping toevoegen.
Enemy Animation
Om van degrees naar radians te veranderen gebruik je mathf.deg2rad.
Enemy Shooting
Je kan goed lazers maken en andere effecten met een line renderer.
Je kan components opvragen van de children van objecten met getcomponentinchildren.
Enemy AI
Het is handig om hiervoor een state machine te maken. Door te controleren welke states de speler in is in de update functie en dan door te sturen naar losse functions houd je het script schoon en duidelijk.
Door een icoon toe te voegen aan gameobjects zie je het in de editor. Klik op een gameobject icon, dan kan je het aangeven. Het heet Gizmo.
vrijdag 20 november 2015
Audio via script
Link
Waarom deze tutorial?
Ik wilde graag weten hoe je in een script een audio aanmaakt en kan afspelen.
Wat heb ik er mee gedaan?
Wat heb ik er van geleerd?
Ik kan nu audio inladen via alleen code. In het voorbeeld hierboven ziet u wat hoe ik het heb aangepakt.dinsdag 17 november 2015
Modern GUI Development in Unity 4.6 - #9: Main Menu System
Link
Waarom deze tutorial?
Het leek me interessant om te kijken hoe je nou echt een goede main menu maakt.
Wat heb ik er mee gedaan?
Ik heb voor deze tutorials geen eigen project gemaakt.
Wat heb ik er van geleerd?
Je kan een canvas aanpassen zodat hij precies in de camera valt. Dan is hij niet zo groot als normaal.Door een sorting layer toe te voegen kan je objecten eerder of later laden. Dat kan handig zijn wanneer je iets boven iets anders wil laten zien.
Wanneer je in screen space camera mode zit maak het niet uit of je de canvas een child maakt van de camera of niet.
Bij de button sprites kan je aangeven wat de randen zijn zodat je de buttons kan scalen zonder dat de randen uit gaan rekken.
Je kan de ancher van de buttons veranderen zodat hij alleen scaled in horizontaal of verticaal. Hierdoor stretch de rand niet mee wanneer je een button scaled.
Bekijk goed waar je de pivot and padding op zet. Je kan beter de pivot point goed hebben dan de text in een andere allign zetten. Op die manier kan je de hele ui aanpassen maar toch alles op een (redelijk) goede plek houden inplaats van dat alles veranderd.
Met vertical layout groups kan je automatisch buttons laten allignen. Met de spacing kan je dan de buttons die je maakt automatisch spacing geven eraan.
Je kan animaties geven aan buttons door animaties op te nemen.
Je kan beter de pivot animeren dan de position omdat je dan niet in problemen komt met verschillende screen sizes.
zaterdag 14 november 2015
Unity 5 Tutorial - Animation Control
Link
Waarom deze tutorial?
Het is voor mij erg onduidelijk hoe je animations in unity kan aansturen. Daarom ga ik een tutorial kijken hoe dit kan.
Wat heb ik er mee gedaan?
Ik heb voor deze tutorials geen eigen project gemaakt.
Wat heb ik er van geleerd?
De Animator van unity kan veel meer dan dat ik dacht. Het is een soort blueprint schema voor al je animaties. Wanneer je er een op gooit kan je hem koppelen met een andere en aansturen.Je kan bijvoorbeeld ook een idle animatie (stilstaan) maken en een animatie van dat het poppetje springt. Deze kan je dan weer terug linken naar het stilstaan zodat wanneer het character klaar is met springen hij weer terug gaat naar idle.
Hiernaast kan je ook nog een systeem bouwen zodat op basis van je input het character een verschillende animatie doet. Dit kan je ook in elkaar laten over gaan met een blend tree. Hierin kan je waardes stoppen die de animator dan zien en om zet in een mooi grafiekje.
Op het scherm zie je presies waar de animatie in over blend. Erg handig als je veel animaties hebt op een character maar wel overzicht wil behouden. Het blijft overzichtelijk doordat je ook verschillende lagen kan toepassen, zoals lopen, rennen etc.
Als laatste kan je animaties in elkaar laten overvloeien in een tabel. Dus hiermee kan je precies aangeven hoelang de overgang moet zijn en wanneer die moet gebeuren.
Je hebt dus enorm veel controle over de animaties.
c# Unity3D Tutorial Series (miscellaneous)
Link
Waarom deze tutorial?
Na het kijken van de intermediate en advanced reeks van de tutorials werd ik erg gemotiveerd. Ik heb veel nieuwe dingen geleerd. Om mijn basis kennis van unity nog meer te verbeteren ga ik ook de overige lijst kijken. Het bestaad uit een lijst van belangerijke informatie.
Het is een lijst van tutorials die ik hieronder los ga behandelen.
Wat heb ik er mee gedaan?
Time.timescale (4e tutorial uit dit lijstje) wilde in graag in mijn spel verwerken. Hier is een stuk code die laat zien wat het doet.
Wat heb ik er van geleerd?
Player movement
Het meeste in de tutorial kende ik al wel, maar er zaten toch een paar dingen in die simpel lijken maar die je toch snel vergeet. Hij legde bijvoorbeeld uit waarom je Time.Deltatime in een translate gebruikt. Normaal deed ik dat gewoon maar ik snap nu waarom, het is omdat dat de echte tijd is op dit moment, in secondes en niet afhankelijk van de update snelheid van je pc.
Gui friendly
Deze tutorial sla ik over omdat het veranderd is in de nieuwe unity 5 die ik gebruik.
Ray casting
De basis van raycasting was ik al bekend mee, maar opfrissen in nooit slecht. Daarnaast heb ik ook een aantal nieuwe dingen geleerd zoals dat meeste mensen voor een ray: 'Ray ray' typen, terwijl dit de ray orgin is, dus de plek waar de ray vandaan wordt gestuurd. Het is beter om die dus rayorgin te noemen aangezien dat minder verwarring brengt.
Ook een handige manier om code uit te typen wordt uitgelegd in deze tutorial, hij schrijft eerst op wat hij wil programmeren in normale taal en vervangt het daarna met c#. Handig om uit te plannen wat je wil programmeren.
Pausing your game
Door Time.timeScale te gebruiken kan je een spel pauseren of een slow motion effect creeren. Dit heb ik ook geprobeert te intergreren in mijn spel voor de unity les. Je kan dit zien in het kopje: 'Wat heb ik er mee gedaan?'
De timescale past de dingen aan die bewegen. In mijn unity spel gebeurt dit wanneer de bal de grond raakt, de speler is dan af. De ball remt af tot hij helemaal stil staat en dan laad het level opnieuw.
GetComponent
In deze tutorial wordt GetComponent uitgelegd, Wat het doet wist ik al wel maar door deze tutorial kon ik het toch wat beter begrijpen. Ik wist bijvoorbeeld nog niet dat de onderdelen van een gameobject components waren.
Enemy Spawn Manager (part 1 and 2)
De manier hoe de tutorial uitlegd om enemies te spawnen is door Time.time te gebruiken. Dat is de tijd sins het spel is begonnen. Door elke 5 seconden van die tijd een nieuwe enemy te spawnen. Dat is een manier om het te doen.
Het kan ook met coroutines. Wanneer je een coroutine maakt maak je een object met ienumerator dat niet elke frame loopt. Deze kan je gebruiken om een stuk code tijdelijk te stoppen en dan weer door te laten gaan.
In deze manier gebruikt hij een yield waitforseconds om om de 5 seconden iets te spawnen. Coroutines gebruiken niet veel geheugen dus kan veel gebruikt worden.
Universal health system
In deze tutorial legt hij uit hoe je health maakt voor een object en dat dan vanuit een ander script omlaag kan halen.
Hij maakt in een object een aantal variabelen aan; healh en maxhealth. En maakt dan een method die zorgt dat er levens af gaan. Die stuurt hij dan aan.
Het basis concept kende ik al vanuit game maker, nu heb ik het gezien in unity en het is best gemakkelijk.
LayerMask
Een layermask gebruikt een int om flags te maken. Wanneer een flag aangaat wordt dat de huidige layer.
Het wordt vaak gebruikt voor enemies zodat je kan checken of iets geraakt wordt, is dat zo dan check je de layer, is het de goede layer dan moet het object kapot.
Waarom zijn er maar 32 layers? Dat komt omdat het met bits werkt. Er zijn 32 nullen en een-en. Elke nul en een kan aan of uitgezet worden, dat representeerd een laag.
Je kan dan ook controleren met een raycast wat voor layer op een object zit en sommige negeren. In dit geval moet je het bit nummer invullen en niet de naam van de layer.
Daarnaast kan je ook een layermask aanmaken. Hierdoor hoef je niet 'bitshift' te gebruiken.
Monedevelop settings
In deze tutorial legt hij uit hoe je in monodevelop kan aanpassen hoe je code automatisch aanvult. Daarnaast kan je ook goedgeschreven code automatisch een kleur geven wanneer het goed is.
Object pooling
Elke keer wanneer je NEW gebruikt moet de garbage collector het schoon maken. Vaak als je lag hebt komt dat door de garbage collector. Door object pool te gebruiken laat je het systeem schoon.
Je kan bijvoorbeeld bullets maken in het begin van het spel. Dan is het slim om ze als child van de PoolManager te maken (waarin je ze creeert).
Daarna kan je ze actief zetten, wanneer dat gebeurt worden ze actief en doen ze hun ding. Daarna resetten ze weer nog nonactief.
Op die manier hoef je niet steeds te laden en garbage te verwijderen.
woensdag 11 november 2015
Unity C# Advance
Link
Waarom deze tutorial?
Na het kijken van de intermediate tutorials was het natuurlijk passend om ook de advanced tutorials te bekijken.
Het is een lijst van tutorials die ik hieronder los ga behandelen.
Wat heb ik er mee gedaan?
Ik heb voor deze tutorials geen eigen project gemaakt.
Wat heb ik er van geleerd?
Lists
Het verschil tussen lists en arrays is dat een list eigenlijk een dynamische array is. Je kan met een list tijdens het spel nog dingen aanpassen, terwijl een array vast staat. arrays worden vaak gebruikt om vaste slots aan te geven en lists vaak voor items, aangezien dat tijdens het spel meer kan worden.
Met lists kan je ook tijdens het speler dingen toevoegen.
Enums
Je kan met Enums states aangeven aan dingen. Het wordt vaak gebruikt in state machines.
Een voorbeeld is een character dat drie states heeft; zoeken, aanvallen en dood. Nu kan je hiertussen wisselen door een andere waarde te geven hieraan. Erg handig voor AI of iets dergelijks. Je kan het ook random maken (dus eentje willekeurig uitzoeken).
Structs and Classes V2
Een structs is bijna hetzelfde als een class maar een struct kan niet 'inharitance' gebruiken. Een struct wordt vaak gebruikt voor lichte opdrachten. Structs kunnen alles hebben wat classes ook hebben.
Met inharitance kan je bepaalde informatie bepalen voor bijvoorbeeld een wapen, maar omdat het ook een item is kan je alle informatie van items ook gebruiken. Dit is dus inharitance en kan alleen in classes.
Om een struct te maken verander je gewoon waar normaal 'class' staat in 'struct'.
Nullible types
Er zijn value types en reference types variables. Alles wat een waarde kan hebben kan geen Null zijn, maar een string bijvoorbeeld wel. Hij kan dan leeg zijn.
Wanneer je een vraagteken achter int,bool of string zet en dan een variable aangeeft kan de variable ook een Null zijn.
Null types kan je goed gebruiken om te kijken of er bijvoorbeeld al een character is aangemaakt.
Daarnaast kan je ook nog een variable doorgeven aan een method(function) en daarin checken of het een null is en wanneer dat zo is geeft hij de variable een waarde mee zodat hij nooit null kan zijn.
Interfaces
Met een interface kan je dynamischer werken. Het zijn componenten die je in je project kan plakken.
Je kan meer interfaces in een script houden dus het is handig om alles in een script te houden.
Interfaces maak je aan met: public interface (naam).
De naam is het beste om zo te noemen: I(naam van interface)able, bijvoorbeeld Iwalkable of IShootable.
Alles in een function is private.
Een class kan de interface implementeren door naast of in plaats van monobehavior de naam van de interface te zetten: public class (Classname) : Monobehavior, Iwalkable
In interfaces kan je types doorgeven zodat je hetzelfde stuk code kan gebruiken voor een andere type. Bijvoorbeeld een player andere damage geven dan een player.
maandag 9 november 2015
C# unity intermediate programming
Link
Waarom deze tutorial?
Het leek me erg handig om voordat ik met de eindopdracht game verder te gaan me eerst wat beter te verdiepen in wat er allemaal kan met C#. Daarom ga ik deze intermediate tutorial volgen en daarna de advanced tutorial.
Het is een lijst van tutorials die ik hieronder los ga behandelen.
Wat heb ik er mee gedaan?
Ik heb de laatste video meegedaan in unity, deze vat alle lessen uit de reeks samen.
Door mee te doen met deze tutorial kon ik nog beter begrijpen wat er bedoeld werd met alles. Daarnaast heb ik nog wat extra's toegevoegd. De tutorial liet text alleen in de debug zien, ik heb toegevoegd dat hij deze naar een text op het beeldscherm door stuurt. Op deze manier kan je in de .exe ook zien wat het resultaat is naast de project file.
Door mee te doen met deze tutorial kon ik nog beter begrijpen wat er bedoeld werd met alles. Daarnaast heb ik nog wat extra's toegevoegd. De tutorial liet text alleen in de debug zien, ik heb toegevoegd dat hij deze naar een text op het beeldscherm door stuurt. Op deze manier kan je in de .exe ook zien wat het resultaat is naast de project file.
Wat heb ik er van geleerd?
Voor deze tutorial dacht ik dat functions of methods heel erg verschilde van variabelen, wat dus niet zo is. Een functie is gewoon een uitgebreidere variable die je van ergens anders kan oproepen en aanpassen.
Functions en methods zijn eigenlijk het zelfde maar worden voornamelijk gebruikt om de update function schoon te houden zodat deze niet helemaal vol komt met van alles en nog wat.
Met een void kan je iets laten doen zonder dat je iets terug verwacht, maar je kan ook een int uitsturen en iets terug verwachten, dit is handig.
Classes
Wat classes zijn had ik al een beetje geleerd van de eerste tutorial die ik gekeken heb, maar deze persoon legt het op een andere manier uit. Hij geeft als voorbeeld dat je classes kan gebruiken om items te bewaren, in plaats van dat je een script hebt met 100 stukken van 10 regels om elk item uit te leggen, je het een keer kan maken met een class en dan kan invullen in de inspector (of via script).
Deze manier van het gebruik van classes had ik nog niet bedacht.
Constructors
Met constructors kan je waardes geven aan een class. Op deze manier kan je items maken met een class en dan elke item invullen doormiddel van constructors.
In plaats van dat je dus heel veel keer dezelfde code gebruikt om een item te maken houd je het heel compact. Je kan dan in code zeggen wat voor waardes de items moeten hebben. Daar zijn constructors voor.
Static types
Je kan elke variable static maken, dit betekend dat je hem kan aanspreken van elk ander script. Dit is handig maar daarnaast is de static gevult voor de rest van de game en kan dus niet meer gebruikt worden. Ook is het redelijk zwaar. Het wordt vaak gebruikt door luie mensen omdat het niet vereist om alles door te linken.
Properties
Met properties kan je zorgen dat een variable aangepast of alleen bekeken kan worden wanneer jij dat wilt. Je kan zelfs een private variable maken in een script en die een public get en set geven zodat hij in een ander script aangepast of bekeken kan worden.
Private variables zijn ook beter om te gebruiken dan public, dus gebruik veel properties.
Singleton manager
In deze tutorial wordt verteld wat een singleton is en hoe je hem gebruikt door middel van een game manager. Een singleton is iets wat maar een keer voorkomt en wordt dus gebruikt door dingen die maar een keer in de game voor komen, zoals een game manager of een spawner.
De singleton die uitgelegd werd in de video was het gameobject die controleerde of hij al bestond, waneer dit niet zo was maakte hij zichzelf aan.
Namespaces
Namespaces zijn een soort library waar je dingen vandaan kan halen, in deze tutorial legt hij uit hoe je een library kan maken.
Met een library kan je eigenlijk gewoon een stukje code maken die je in elk script kan inladen. Je moet wel elke keer 'usign' en dan de naam intypen om hem te gebruiken. Dus om dit goed te kunnen gebruiken zou je het vaak moeten nodig hebben.
Practical
In deze tutorial worden alle onderdelen die hierboven behandeld zijn in de praktijk gebracht. Ik heb met deze tutorial meegedaan en kon hierdoor alle bovenstaande punten in de praktijk aan het werk zien wat erg interessant was, ik heb hierdoor veel geleerd.
zondag 8 november 2015
Creating a 2D Platformer
Link
Waarom deze tutorial?
Ik heb in unity alleen nog maar met 3D gewerkt. Het leek me daarom goed om een tutorial te pakken die in 2D een game maakt. Deze tutorial legt uit hoe je een platformer maakt met raycasting in plaats van rigidbody. Dat leek me ook interessant en heb daarom voor deze tutorial gekozen.
Wat heb ik er mee gedaan?
Voor deze tutorial heb ik geen eigen project gemaakt.
Wat heb ik er van geleerd?
Ik dacht altijd dat het maken van een 2D game heel veel verschilde met een 3D game, maar eigenlijk is het alleen maar makkelijker. Je hoeft ook geen rekening te houden met diepte en zo.
Deze tutorial is wel vrij lastig voor iemand die nog nooit unity heeft aangeraakt. Ik kon het redelijk volgen maar moest af en toe wel even pauzeren en terug kijken om het te begrijpen. Hij nam van je aan dat je bepaalde dingen al wist.
Naast het belangerijkste punt van deze tutorial waar ik in de volgende alinia over ga vertellen heeft deze tutorial me ook een aantal nieuwe 'keywords' geleerd. Zoals 'ref' dat een referentie maakt naar een variable in een andere class en die ook aan past wanneer nodig, clamp (houd het getal binnen een gebied), const (houd een getal hetzelfde nadat hij is aangemaakt).
Het meest interessant van deze tutorial is het feit dat deze man geen rigidbody gebruikt om een platformer te maken maar juist checkt met raycast. Dit geeft meer controle over wat je character doet aangezien het niet gebaseert is op physics maar gewoon op harde feiten. Ook kan je hiermee controleren welke kan van de speler een grond aanraakt en daar mee spelen. Je controlereerd ook alleen maar aan de zijkant waar het character heen gaat, om rekenkracht te besparen. Erg interessant.
Deze tutorial is wel vrij lastig voor iemand die nog nooit unity heeft aangeraakt. Ik kon het redelijk volgen maar moest af en toe wel even pauzeren en terug kijken om het te begrijpen. Hij nam van je aan dat je bepaalde dingen al wist.
Naast het belangerijkste punt van deze tutorial waar ik in de volgende alinia over ga vertellen heeft deze tutorial me ook een aantal nieuwe 'keywords' geleerd. Zoals 'ref' dat een referentie maakt naar een variable in een andere class en die ook aan past wanneer nodig, clamp (houd het getal binnen een gebied), const (houd een getal hetzelfde nadat hij is aangemaakt).
Het meest interessant van deze tutorial is het feit dat deze man geen rigidbody gebruikt om een platformer te maken maar juist checkt met raycast. Dit geeft meer controle over wat je character doet aangezien het niet gebaseert is op physics maar gewoon op harde feiten. Ook kan je hiermee controleren welke kan van de speler een grond aanraakt en daar mee spelen. Je controlereerd ook alleen maar aan de zijkant waar het character heen gaat, om rekenkracht te besparen. Erg interessant.
dinsdag 3 november 2015
Classes and constructors
Link
Ik snap het concept van classes nog niet helemaal. Het is mij nog een beetje onduidelijk wat het nou precies doet. Daarom ga ik deze tutorial kijken zodat het hopelijk wat duidelijker wordt.
Wat heb ik er mee gedaan?
*Click op plaatje om te vergroten*
MainScript - zit op object
ClassScript - Niet op object, wordt aangestuurd door MainScript
Wat heb ik er van geleerd?
Na het kijken van de video snapte ik een stuk meer van classes en zelfs wat constructors zijn. Dat monobehevior de standaard functies aanstuurd van unity wist ik nog niet. Het was ook erg interessant om te leren dat je vanuit een script dat op een object zit een ander script kan aansturen die niet op een object zit. En dat je een script zonder monobehevior niet op een object kan plakken. Daarna heb ik zelf nog wat gepruts in unity om te kijken of ik het goed snapte.
Ik heb zelf ook even geprobeert om een script op de camera te gooien en daarmee een lostaand script aan te sturen. Dit heb ik gedaan om even te kijken of ik weet hoe ik het nu zelf moet doen.
Abonneren op:
Posts (Atom)





