Programmeren begint vaak met het schrijven van een variabel.
Een variabel is een naam (of symbool) die staat voor een waarde.
Bijvoorbeeld:
x = 10
of
health = 100
X en health zijn de namen en 10 en 100 de waardes.
Variabelen zijn handig omdat je erdoor flexibel kunt programmeren. De waarde van een variabel kan zoals de naam al doet vermoeden ‘variëren’. Je kan bijvoorbeeld programmeren dat health aan het begin van je game 100 is, maar als de speler tijdens de game geraakt wordt door een vijand dat er van health 10 afgaat.
Hierna is health dus nog maar 90.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerHealth : MonoBehaviour
{
public int health = 100;
void OnCollisionEnter (Collision otherObject)
{
if (otherObject.gameObject.tag == “Enemy“)
{
health -= 10;
}
}
}
De waarde van health is dan onzichtbaar in het geheugen van je computer veranderd maar kan bijvoorbeeld ook in het beeld van de speler (de GUI) getoond worden. Gewoon als getal, in de vorm van hartjes (Zelda) of als een groene levensbalk etc.
Je kan voor het gemak variabelen zien als dozen die informatie bevatten en je hebt verschillende types dozen voor verschillende soorten informatie.
In C en in C# schrijf je een variabel als volgt:
type naam = waarde;
bijvoorbeeld:
int health = 100;
Omdat variabelen en functies op bijna dezelfde manier worden geschreven is het gebruikelijk en een ‘best practice’ om variabelen altijd met een kleine letter te beginnen. Zo kun je zelf en kunnen andere mensen die misschien je code lezen ook makkelijk zien of iets een variabel is of een functie.
Als je variabel naam uit twee of meer woorden bestaat begin je het eerste woord met een kleine letter en ieder 2e of 3e enz. woord met een hoofdletter:
int health = 100;
int playerHealth = 100;
int playerHealthScore = 100;
Er zijn 3 belangrijke types variabelen die het meeste gebruikt worden: Int, float en string.
Int (integer) wordt gebruikt voor hele getallen (dus geen fracties), die positief, negatief of nul kunnen zijn. De nummers 10, 0, -25 en 5023 zijn allen integers.
int levens = 3;
Float (floating point) is voor getallen die ook decimale plaatsen hebben bijvoorbeeld 1.5, 100.223 of -2.66.
float snelheid = 2.5f;
String is voor woorden en namen etc. en wordt altijd tussen aanhalingstekens geschreven. Een string kan ook een hele zin zijn, inclusief leestekens en getallen.
string voorNaam = "Super";
string achterNaam = "Mario";
Een string is eigenlijk een ‘array’ (Engels voor rij of reeks) die bestaat uit een lijst van elementen.
Wat wil zeggen dat een string eigenlijk een lijst is van losse letters en/of nummers.
Ieder element in een array heeft een unieke index waarmee dat element aangeduid kan worden.
Wat wil zeggen dat elk karakter van een string een eigen nummer heeft.
De telling begint bij nul dus het eerste karakter van een string heeft altijd de index 0. Bijvoorbeeld:
string playerName = "Batman";
Als je wilt weten wat de eerste letter is van de string ‘playerName’ dan kun je dat in je script aanduiden met playerName[0]. De tweede letter is dan playerName[1], enzovoorts.
Als je Unity3D gebruikt kan je dit testen door bij de start functie van je script de code hieronder typen.
Als je daarna de game start zal de waarde van playerName[0] in de Console view van Unity geschreven of ‘geprint’ worden met Unity’s eigen print functie genaamd Debug.Log() of met de standaard C# print () functie:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerHealth : MonoBehaviour
{
string playerName = “Batman“;
void Start ()
{
// Gebruikt Unity‘s print functie om de waarde
// van de eerste letter van de string playerName te printen
Debug.Log( playerName[0] );
// Gebruikt de standaard C# print functie om de waarde
// van de tweede letter van playerName te printen
print ( playerName[1] );
}
}
Als je een programma schrijft in C voor de LittleBits Arduino kun je het volgende in je script schrijven om een letter van een string in de serial monitor te printen:
String playerName = "Batman";
void Setup ()
{
Serial.println ( playerName[0] );
}
Nog een veelgebruikt type variabel (Data Type) is de bool (boolean).
Deze kun je vergelijken met een aan/uit schakelaar. Een bool kan alleen True of False, 1 of 0, aan of uit zijn.
Een bool in Unity:
bool gameIsPlaying = false;
void Start ()
{
gameIsPlaying = true;
Debug.Log( gameIsPlaying );
}
Een bool in Arduino:
bool programIsRunning = false;
void setup ()
{
programIsRunning = true;
}
void loop ()
{
Serial.println ( programIsRunning );
delay(1000);
}
Er zijn nog veel meer types variabelen die je kan gebruiken in je scripts (en je kan ook zelf types maken!) maar die zul je in het begin weinig nodig hebben. Waar het op neer komt is dat je met het schrijven van een variabel eigenlijk een bepaald gedeelte van het RAM geheugen van je computer reserveert voor informatie als namen en nummers.
Een beetje alsof je ruimte maakt in je kast voor een nieuwe serie boeken of games.
Een klein simpel getal heeft weinig ruimte nodig en een complex groot getal heeft veel ruimte nodig. Het type variabel geeft aan wat voor soort ruimte je nodig hebt.
Het type ‘int’ in Unity kan bijvoorbeeld geen getallen opslaan die groter zijn dan 2147483647 of kleiner zijn dan −2147483648. Meer dan genoeg dus voor een levensbalk die niet verder dan 100 gaat.
Als je een groter getal op wilt slaan zul je een ander type variabel moeten gebruiken, bijvoorbeeld een ‘double’ of een ‘ulong’, handig als je een universum met astronomische afstanden wilt simuleren!
In Unity kan je het volgende in je script typen om de minimale en maximale waarde van int in de Console view te printen:
void Start ()
{
Debug.Log( int.MinValue );
Debug.Log( int.MaxValue );
}
Veel meer uitgebreide uitleg over variabelen is gemakkelijk op internet te vinden. Bijvoorbeeld op de website van Unity3d waar heel veel uitleg over veel verschillende scripting onderwerpen te vinden is. Vaak inclusief voorbeelden die je naar je eigen script kan copy/pasten.
Zie de filmpjes over ‘Variables and Functions’ en ‘Data Types’ :
http://unity3d.com/learn/tutorials/topics/scripting