Ingewikkeldheid: Unity C#
Benodigde Modules: 3D Camera
In deze module ga je de mogelijkheid om te schieten toe te voegen aan je Speler. Dit kan je gebruiken om vijanden te verslaan of om objecten te breken.
Maak eerst in Unity een nieuw Sphere object. Dit wordt het projectiel dat je af gaat schieten. Je kan dit een kleur geven met een Material. Je kan natuurlijk ook een ander 3D model gebruiken als projectiel als je dat hebt. Zorg dat er een Sphere Collider en Rigidbody component aan dit object toegevoegd zijn en geef het een duidelijke naam. Maak er dan een Prefab van door het naar je Assets te slepen en delete het dan weer uit je Scene.
Ga nu naar het script van de Speler. Er zijn een aantal dingen die je als variabele in moet kunnen stellen: het projectiel dat afgeschoten wordt (GameObject), getallen voor de kracht waarmee geschoten wordt en wanneer je kan schieten (float) en de positie waaruit geschoten wordt (Vector3).Ga daarna naar de Update methode. Hier ga je zorgen dat als op de linkermuisknop wordt gedrukt (Input.GetMouseButton(0)) het projectiel wordt gecreëerd (Instantiate()) en afgeschoten in de goede richting. In de Update methode moet je ook de teller die bijhoudt wanneer je weer kan schieten de tijd laten tellen (met Time.deltaTime) en als geschoten wordt moet die weer op 0 gezet worden.
Ga nu terug naar Unity en stel de nieuwe waarden in in het Speler script component van je Speler object. Bij het Projectiel moet je dus het Prefab object instellen dat je eerder gemaakt hebt.
Je zal zien dat het projectiel en de Speler nu nog tegen elkaar aanbotsen. Om dit op te lossen zet je de twee objecten op verschillende Layers. Daarna stel je dan in dat objecten op die Layers niet tegen elkaar aanbotsen. Layers maken doe je rechtsboven in Unity door te klikken op Layers en dan Edit Layers. De Layer instellen doe je rechtsboven in de Inspector van de objecten. Om in te stellen welke Layers wel en niet met elkaar kunnen botsen ga je linksboven naar Edit -> Project Settings -> Physics -> Layer Collision Matrix. Zorg dat daar het vinkje bij de Layers voor het projectiel en die van de Speler uit staat:
Als het goed is kan je nu je projectiel afschieten zonder dat het tegen de Speler botst!
Omdat de projectielen die je afvuurt nu niet verdwijnen krijg je na een tijdje dat er wel heel veel objecten in de Scene komen. Om dat op te lossen kan je het volgende script toevoegen waarin twee manieren zijn om ervoor te zorgen dat de objecten vernietigd worden als ze ergens tegen aanbotsen of na een bepaalde tijd die je in kan stellen.
Je kan hier in de OnCollisionEnter() methode ook instellen wat er gebeurt als het projectiel een vijand raakt of een ander object dat iets moet doen als het geraakt wordt.