Pong! : Stap 5

Stap 5: De bal laten bewegen

Klik op de Pong bal in de Hierarchy View om deze te selecteren en daarna op ‘Add Component’ in de Inspector View. 
Klik op ‘Physics > Rigidbody’ om een  Rigidbody component aan de Pong bal vast te maken:


Geef het Rigidbody component dezelfde instellingen als in de afbeelding hieronder dus met Constraints Freeze Position op de Y-as aangevinkt:

Met de ‘Freeze Position Y’ instelling bij Constraints zorg je ervoor dat de bal alleen naar voor/achter, links/rechts kan bewegen op de X en Z assen, en dus niet omlaag kan vallen langs de Y-as.

Maak een nieuw script in de Scripts map in de Project view, geef het script de naam ‘PongBallBehaviour’ (PongBalGedrag) en open het daarna door erop te dubbelklikken:

In principe werkt de bal al dankzij het Rigidbody onderdeel, maar omdat nog geen ander object de bal geraakt heeft blijft hij gewoon stil in de lucht hangen als je op Play drukt.
Om ervoor te zorgen dat de bal bij het starten van het spel begint te bewegen kun je ‘force’ (kracht), erop toepassen door middel van code.
Je kunt hierbij denken aan hoe een voetballer tegen een bal aanschopt waarna de bal begint te bewegen.

Zorg ervoor dat het PongBallBehaviour script er zo uitziet:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PongBallBehaviour : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        transform.Rotate(0, Random.Range(0,360), 0);

        GetComponent<Rigidbody>().AddForce( transform.forward * 500 );
    }

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

Zoals je ziet staat de code deze keer in de Start() functie en niet in de Update() functie.
Dit is omdat deze code alleen één keer bij het starten van de game uitgevoerd hoeft te worden en niet continue de hele tijd tijdens de game. Unity ‘calls’ (roept aan) de Start() functie eenmalig automatisch bij het starten van de game voordat tijdens de game de Update() functie automatisch bij ieder frame wordt aangeroepen. Je kunt de Start() functie dus gebruiken om dingen als het ware ‘klaar te zetten’ voordat het spel begint.

In gewone taal staat hier eigenlijk:
“Draai het object op de Y-as in een willekeurige richting tussen 0 en 360 graden”
en daarna
“Zoek het Rigidbody component wat aan dit object vast zit en voeg kracht eraan toe naar voren”

Het script draait de bal dus eerst in een willekeurige richting, waarna de volgende regel de bal in die richting “duwt”.
Het getal 500 achter ‘transform.forward *’, is de hoeveelheid kracht die wordt toegepast.
Hoe hoger dat getal, hoe sneller de bal gaat.

Sla het script op met Ctrl+S en keer terug naar Unity.
Sleep in Unity het PongBallBehaviour script uit de Hierarchy view naar de Pong bal in de Scene view of in de Hierarchy view, om het aan de bal vast te maken (of gebruik hiervoor weer de Add Component knop in de Inspector view).

Druk op Play om te testen of het script werkt.
De bal wordt bij het starten van de game meteen een random richting op geschoten!:

Er is alleen één probleem,.. de bal stuitert niet echt.
Dit kun je grotendeels oplossen met een ‘Physic Material’.

Klik nogmaals op Play om het spel weer te stoppen.

Klik met je rechter-muisknop in de lege PhysicMaterials map in de Project view en selecteer ‘Create > Physic Material’:

 
Noem het Physic materiaal bijvoorbeeld ‘Bouncy’.
Selecteer het Bouncy Physic Material en geef het de instellingen die je hieronder ziet in de Inspector view en zet ‘Bounce Combine’ op Multiply.
Hierdoor verliest de bal niet zoveel snelheid bij het stuiteren:

Selecteer de bal in de Hierarchy view en sleep het Bouncy Physic Material uit de Project view naar het ‘material‘ vakje van het Collider component in de Inspector view.
Doe daarna hetzelfde voor de twee spelers paddles en de twee muren van het level.

Je kunt ook het Bouncy Physic Material uit de Project view rechtstreeks naar de bal en daarna naar de twee spelers objecten en de twee muren van het level in de Scene view of Hierarchy view slepen, Unity stopt het dan automatisch in het material vakje van de Collider componenten:

Test de game met Play en je zal merken dat de bal al een stuk beter stuitert!

Ga verder naar Stap 6: De Gameplay