Pong! : Stap 7

Stap 7 : Score!

Scores en high-scores zijn een groot onderdeel van games. Sommige games hebben een heel uitgebreid score-systeem met nationale en internationale ranglijsten etc. en ook voor Pong zou je zoiets kunnen maken.
Voor nu is een simpel script wat alleen de score bijhoudt en toont goed genoeg.
Dat bijhouden doe je door het score getal op te slaan in een ‘variabel’ en er steeds een punt bij op te tellen als een speler scoort.
Zie een variabel als een doos waar je informatie in kunt stoppen.
(Voor meer informatie over variabelen zie de ExtraUitleg pagina erover in de menu balk van deze blog)

Maak een nieuw script in de Project view met de rechter-muisknop en ‘Create > C# Script’.
Geef het script de naam ‘PongScores’ en open het door erop te dubbelklikken.

Schrijf de speler1Score en speler2Score variabelen boven het ‘Start ()’ gedeelte zoals hieronder:

using UnityEngine;
using System.Collections;

public class PongScores : MonoBehaviour {

    public int speler1Score = 0;
    public int speler2Score = 0;

    // Use this for initialization
    void Start () {
    
    }

Sla het script op met Ctrl + S en keer terug naar Unity.

Klik in de menu balk op GameObject > UI > Canvas om een canvas te maken waarop we de score in beeld kunnen tonen.
Het canvas is een soort glasplaat die voor de game camera wordt geplaatst, waarop je dingen kunt schrijven en plaatjes op kan plakken!

Sleep het PongScore script uit de Project view op het ‘Canvas’ object in de Hierarchy view om het script eraan vast te maken.

Druk daarna met de rechter-muisknop op het Canvas en selecteer UI > Text om een Text object aan het canvas vast te maken.
Doe dit twee keer:

Screen Shot 2016-08-27 at 14.36.53

Text objecten kun je gebruiken voor gewone informatie teksten maar omdat je de tekst die het weergeeft ook via een script kunt programmeren kun je ze ook gebruiken om de score te tonen.

Als je in Scene view heel ver uit-zoomt met je scroll-wieltje zie je dat er een groot vak met witte lijnen is verschenen. Dat zijn de randen van het canvas.
Je ziet ook dat er in het midden ‘New Text’ staat geschreven. Dat is de standaard tekst van een ‘Text’ onderdeel.

Klik op de ‘Text’ objecten in de Hierarchy view en verander in de Inspector view de tekst “New Text” naar het getal 0:

Screen Shot 2016-08-27 at 17.42.43

Je kan de tekst groter maken in door de ‘Font Size’ aan te passen. Zet dan ook ‘Horizontal Overflow’ en ‘Vertical Overflow’ op ‘OverFlow’ of pas de width/height aan in het Rect Transform component om te zorgen dat de tekst in het vakje past.

Om de tekst op de juiste plek te zetten, klik op het bovenste ‘Text’ object in de Hierarchy view en verander in de Inspector view de Rect Transform Pos X en Pos Y getallen naar die van hieronder:

Screen Shot 2016-08-27 at 14.50.43

De Transform van Text twee:

Screen Shot 2016-08-27 at 14.51.00

De tekst staat nu klaar om de score te tonen, en er zijn variabelen gemaakt om de scores in op te slaan:

Screen Shot 2016-08-28 at 12.23.44

Nu moeten die scores nog opgeteld worden tijdens het spel en daarna in beeld vertoond worden.

Open het PongBalGedrag script en schrijf bovenaan in het script de blauwe ‘using UnitiyEngine.UI’ regel om te zorgen dat je makkelijk naar de UI componenten kunt verwijzen:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

Voeg de blauwe regels boven ‘Instantiate’ toe aan het ‘Update ()’ gedeelte:

// Update is called once per frame
void Update () {

    if (transform.position.x > 8)
    {
        int score = GameObject.FindObjectOfType<PongScores>().speler1Score += 1;
        GameObject.Find( "Text" ).GetComponent<Text>().text = "" + score;

        Instantiate(gameObject, new Vector3(0,0.75f,0), Quaternion.identity);
        Destroy(gameObject);
    }

    if (transform.position.x < -8)
    {
        int score = GameObject.FindObjectOfType<PongScores>().speler2Score += 1;
        GameObject.Find( "Text (1)" ).GetComponent<Text>().text = "" + score;

        Instantiate(gameObject, new Vector3(0,0.75f,0), Quaternion.identity);
        Destroy(gameObject);
    }
}

In gewone taal:
“Zoek het PongScores script in het level en tel 1 op bij speler1Score in het script”
en daarna:
“Zoek het object met de naam “Text” en het Text component wat eraan vast zit en verander de tekst in de score van speler 1″

Save het script met Ctrl + S, keer terug naar Unity en test de game.
Scores worden nu netjes opgeteld en getoond in de tekstvelden boven de spelers!

Ga verder naar Stap 8 : Graphics

GreenArrowLeft Stap 6      Stap 8 GreenArrowRight