unity game vol. 3 - mentoring 2019 · unity game vol. 3 mentoring 2019 diane hanke, toni wirth,...
TRANSCRIPT
Unity Game Vol. 3Mentoring 2019
Diane Hanke, Toni Wirth, Sönke Schmidt & Thushan SatkunanathanFreie Universität Berlin
10. Mai 2019
Inhalt
Programm
GUI gestalten
Kampfsystem
Bildschirmausgabe
Soundeinbindung
Feinschliff
,
FU Berlin, Unity Game, 10. Mai 2019 2
Inhalt
Programm
GUI gestalten
Kampfsystem
Bildschirmausgabe
Soundeinbindung
Feinschliff
,
FU Berlin, Unity Game, 10. Mai 2019 3
Programm
1. Blockkurs
2. Blockkurs
3. Blockkurs
Die erste Welt war schon ganz nett!Aber jetzt wird es richtig fancy!É GUI gestaltenÉ KampfsystemÉ BildschirmausgabeÉ SoundeinbindungÉ Feinschliff
,
FU Berlin, Unity Game, 10. Mai 2019 4
Inhalt
Programm
GUI gestalten
Kampfsystem
Bildschirmausgabe
Soundeinbindung
Feinschliff
,
FU Berlin, Unity Game, 10. Mai 2019 5
Fancy Munitionsanzeige
,
FU Berlin, Unity Game, 10. Mai 2019 6
Canvas erzeugen
É Hauptobjekt desUI Systems
É Alle UI-ElementemüssenKind-Objekt vomCanvas sein
É GameObject → UI→ Canvas
,
FU Berlin, Unity Game, 10. Mai 2019 7
Image zuweisen
É Image demCanvashinzufügen
É Rechtsklick aufdasCanvas-Objekt inUI
,
FU Berlin, Unity Game, 10. Mai 2019 8
Bild dem Image zuweisen
É Bild in SourceImage ziehen
,
FU Berlin, Unity Game, 10. Mai 2019 9
Bild positionieren
É Innerhalb desRechteckespositionieren
É Man stelle sichdas ganzeRechteck alsBildschirm vor derKamera vor
,
FU Berlin, Unity Game, 10. Mai 2019 10
Inhalt
Programm
GUI gestalten
Kampfsystem
Bildschirmausgabe
Soundeinbindung
Feinschliff
,
FU Berlin, Unity Game, 10. Mai 2019 11
Pinguin Bomben...waaaaas?
É Spheren-Objekterstellen
É Dient als Kugel
,
FU Berlin, Unity Game, 10. Mai 2019 12
Size does matter!
É Größe der Kugelanpassen
,
FU Berlin, Unity Game, 10. Mai 2019 13
Physik braucht die Kugel, Physik
É Rigidbody überden Inspectorhinzufügen
,
FU Berlin, Unity Game, 10. Mai 2019 14
Da guckste, wa?
É Texture per Dragn Drop reinziehen
,
FU Berlin, Unity Game, 10. Mai 2019 15
Prefab
É Objekt aus derHierachy in denAsset-Ordnerziehen
É Damit werden alleEinstellungenübernommen
,
FU Berlin, Unity Game, 10. Mai 2019 16
SpawnObjekt erstellen
É SpawnObjekt inden Player in derHierachy ziehen
É Positionieren
,
FU Berlin, Unity Game, 10. Mai 2019 17
Schon wieder ein Prefab
É Das Prefab für die Kugel des Enemy erzeugenÉ SpawnObjekt erstellen und platzierenÉ Tipp: Genauso wie beim Bullet vom Player :)
,
FU Berlin, Unity Game, 10. Mai 2019 18
Inhalt
Programm
GUI gestalten
Kampfsystem
Bildschirmausgabe
Soundeinbindung
Feinschliff
,
FU Berlin, Unity Game, 10. Mai 2019 19
Bildschirmausgabe
,
FU Berlin, Unity Game, 10. Mai 2019 20
Lose-& Win-Bildschirm
GameObject > UI > Canvas
É Wähle Bilder, die angezeigtwerden sollen
É Füge die Bilder den Assets hinzuÉ Erzeuge neues Canvas-ObjektÉ Füge dem Canvas in der
Hierarchy per Rechtsklick einKind-Objekt vom Typ Raw Imagehinzu
,
FU Berlin, Unity Game, 10. Mai 2019 21
Lose-& Win-Bildschirm
É Bild in dasTexture-Fensterziehen
É Bildgrößeanpassen
É Prefab erzeugen:in denAsset-Ordnerverschieben
Erzeuge auf diese Weise einen Lose- und einen Win-Canvas. Löscheabschließend die beiden Canvas aus der Hierarchy.
,
FU Berlin, Unity Game, 10. Mai 2019 22
Game Manager
GameObject > Create Empty
É Empty GameObjecterzeugen
É Umbenennen zu:Gamemanager
É Skript erstellen:GameManager
É Lose- und Win-Prefab inden Inspector desGameManager ziehen
,
FU Berlin, Unity Game, 10. Mai 2019 23
Game Manager - Skript
1 using System.Collections;2 using System.Collections.Generic;3 using UnityEngine;4 //muss importiert werden; beinhaltet alle Komponenten, die zur Verwaltung5 //der Scene benötigt werden6 using UnityEngine.SceneManagement;7 public class GameManager : MonoBehaviour {
9 bool hasEnded = false;10 public GameObject win;11 public GameObject lose;
13 public void LoseGame()14 {15 //Boolean hasEnded wird abgefragt, damit Spiel nur einmal beendet wird16 if (!hasEnded)17 {18 //erzeugen lose-Prefab, in dessen Position, mit identischen Winkeln19 Instantiate(lose, lose.transform.position, Quaternion.identity);20 //Invoke startet die Funktion restart um 3 Sekunden verzögert21 Invoke("Restart", 3f);22 }23 }
,
FU Berlin, Unity Game, 10. Mai 2019 24
Game Manager - Skript
1 public void WinGame()2 {3 //gleiches Prinzip wie bei lose, nur wird ein win-Prefab erstellt4 if (!hasEnded)5 {6 Instantiate(win, win.transform.position, Quaternion.identity);7 Invoke("Restart", 3f);8 }9 }
11 void Restart()12 {13 //sagen dem SceneManager, dass er die aktuelle scene reloaden soll14 SceneManager.LoadScene(SceneManager.GetActiveScene().name);15 }16 }
,
FU Berlin, Unity Game, 10. Mai 2019 25
Anpassen von PlayerHealth Skript
1 using System.Collections;2 using System.Collections.Generic;3 using UnityEngine;4 using UnityEngine.UI;
6 public class PlayerHealth : MonoBehaviour {
8 //aktuelles Leben9 int currentHealth = 100;
11 public void TakeDmg(int amount)12 {13 //ziehen amount vom Leben ab14 currentHealth −= amount;15 //Fragen, ob der Spieler tot ist16 if (currentHealth <= 0)17 {18 currentHealth = 0;19 //Dianes Idee20 Debug.Log("HaHa Kackn008...Du bist tot.");21 //Zerstoerung des Spielers22 Destroy(this.gameObject);23 }24 }
,
FU Berlin, Unity Game, 10. Mai 2019 26
Anpassen von PlayerHealth Skript
2 //wird zusätzlich zu Update frameweise aufgerufen3 private void OnCollisionEnter(Collision collision)4 {5 //wenn das Objekt mit dem Tag Enemy kollidiert, dann rufe TakeDmg mit
100 Dmg auf6 if (collision.gameObject.tag == "Enemy")7 {8 TakeDmg(100);
10 /////////////////////////////DAS IST NEU///////////////////////////711 FindObjectOfType<GameManager>().LoseGame();12 ///////////////////////////////////////////////////////////////////713 }
15 }
17 }
,
FU Berlin, Unity Game, 10. Mai 2019 27
Interaktionsobjekt Schlüssel
Add Component > Physics > Capsule Collider
É Asset in der Welt platzierenÉ Capsule Collider hinzufügenÉ Capsule Collider an das Asset anpassenÉ Skript hinzufügen
Achtung: Spieler benötigt den Tag "Player"!
,
FU Berlin, Unity Game, 10. Mai 2019 28
Schlüssel - Skript
1 using System.Collections;2 using System.Collections.Generic;3 using UnityEngine;
5 public class schluessel : MonoBehaviour {
8 private void OnCollisionEnter(Collision collision)9 {
10 //Kam eine Collision mit dem Tag Bullet zustande?11 if (collision.gameObject.tag == "Player")12 {13 //suchen unser GameObject und rufen die Funktion winGame() auf14 FindObjectOfType<GameManager>().WinGame();15 }
17 }18 }
,
FU Berlin, Unity Game, 10. Mai 2019 29
Inhalt
Programm
GUI gestalten
Kampfsystem
Bildschirmausgabe
Soundeinbindung
Feinschliff
,
FU Berlin, Unity Game, 10. Mai 2019 30
Soundeinbindung
,
FU Berlin, Unity Game, 10. Mai 2019 31
Hintergrundmusik
É Add Component >Audio > AudioSource
É Ordner für Soundserstellen
É Sound-Dateienimportieren
É add AudioClipÉ activate LoopÉ activate Play On
Awake
,
FU Berlin, Unity Game, 10. Mai 2019 32
Ereignis Sound
1 using System.Collections;2 using System.Collections.Generic;3 using UnityEngine;
5 [RequireComponent(typeof(AudioSource))]
7 public class MoveSounds : MonoBehaviour8 {9 public AudioClip jump;
10 public AudioClip walk;11 public AudioClip drehen;12 public AudioClip randomSound;13 AudioSource audioSource;
15 public static MoveSounds instance = null;
17 static private bool NochKeinSoundAbgespielt;18 static private float volumeZwischenspeichern;
20 void Start()21 {22 audioSource = GetComponent<AudioSource>();23 NochKeinSoundAbgespielt = true;
25 }
,
FU Berlin, Unity Game, 10. Mai 2019 33
Ereignis Sound
1 void Awake()2 {3 if (instance == null)4 instance = this;5 else if (instance != this)6 Destroy(gameObject);
8 DontDestroyOnLoad(gameObject);9 }
11 public void SoundAbspielen(string aktion)12 {13 if (NochKeinSoundAbgespielt)14 {15 volumeZwischenspeichern = audioSource.volume;16 audioSource.volume = 0.3f;
18 NochKeinSoundAbgespielt = false;19 switch (aktion)20 {21 case "jump":22 audioSource.PlayOneShot(jump, 1F);23 Invoke("audioFinished", jump.length);24 break;
,
FU Berlin, Unity Game, 10. Mai 2019 34
Ereignis Sound
1 case "walk":2 audioSource.PlayOneShot(walk, 1F);3 Invoke("audioFinished", walk.length);4 break;5 case "drehen":6 audioSource.PlayOneShot(drehen, 1F);7 Invoke("audioFinished", drehen.length);8 break;9 case "random":
10 audioSource.PlayOneShot(randomSound, 1F);11 Invoke("audioFinished", randomSound.length);12 break;13 default:14 break;15 }16 }17 }
19 IEnumerator Example()20 {21 yield return new WaitForSeconds(1);22 NochKeinSoundAbgespielt = true;23 audioSource.volume = volumeZwischenspeichern;24 }
,
FU Berlin, Unity Game, 10. Mai 2019 35
Ereignis Sound
1 void audioFinished()2 {3 Debug.Log("Audio Finished");4 StartCoroutine(Example());5 }
7 void Update()8 {9 if (Input.GetKeyDown(KeyCode.Space))
10 {11 SoundAbspielen("jump");12 }13 }14 }
,
FU Berlin, Unity Game, 10. Mai 2019 36
Aufruf eines Soundes, egal von wo
1 FindObjectOfType<MoveSounds>().SoundAbspielen("variablenName");2 //variablenName muss natürlich in switch vorhanden sein.
,
FU Berlin, Unity Game, 10. Mai 2019 37
Inhalt
Programm
GUI gestalten
Kampfsystem
Bildschirmausgabe
Soundeinbindung
Feinschliff
,
FU Berlin, Unity Game, 10. Mai 2019 38
Partikelsystem
Partikelsystem: Zur Realisierung von Effekten in Spielen, z.B. Regenoder Rauch eines Feuers.
Partikel: Image-Dateien oder Meshes, die in großer Anzahlzusammengefügt werden.
Meshes: Ein Netz bestehend aus Dreiecken, die im 3D-Raum angeordnetsind, um den Eindruck eines festen Objekts zu erzeugen.
,
FU Berlin, Unity Game, 10. Mai 2019 39
Partikelsystem hinzufügen
GameObject > Effects > Particle System
An die gewünschte Stelle bewegen und Einstellungen übernehmen:É Duration auf 5.00É Haken bei LoopÉ Start Delay auf 0É Start Lifetime auf 5É Start Speed auf 5É Start Size auf 1É Simulation Speed auf 1É Haken bei Play On AwakeÉ Max Particles auf 25É Haken bei Auto Random SeedÉ Haken bei Emission
É Rate over Time auf 10É Rate over Distance auf 0
É Haken bei Shape
,
FU Berlin, Unity Game, 10. Mai 2019 40
Partikelsystem mit eigener Textur
É gewünschtes Asset-Paket importierenÉ Partikelsystem in Hierarchy auswählenÉ Haken setzen bei RendererÉ im Feld Material gewünschtes Asset hinzufügen
,
FU Berlin, Unity Game, 10. Mai 2019 41
Partikelsystem mit eigenem Material
É gewünschtes Material importieren (z.B. Bilddatei)É Rechtsklick in der Project-View: Create > MaterialÉ Partikelsystem erzeugen, Haken bei Renderer, Material bei Material
auswählenÉ Material eine Textur zuweisen: Shader anpassen
É Legacy Shaders/Particles/Alpha Blended
,
FU Berlin, Unity Game, 10. Mai 2019 42
Smooth animations
É Animationen laufen aktuell nicht flüssigÉ Grund sind Verzögerungen bis die nächste Animation abgespielt
werden kannÉ Dazu müssen wir folgende Schritte machen
,
FU Berlin, Unity Game, 10. Mai 2019 43
Smooth animations
É 1. In den Animationcontroller reingehen
,
FU Berlin, Unity Game, 10. Mai 2019 44
Smooth animations
É 2. Die Transitionspfeile anklickenÉ Bei jedem einzelnen folgende Einstellung übernehmenÉ Has Exit Time darf kein Hacken habenÉ Transiton Duration auf 0 setzen
,
FU Berlin, Unity Game, 10. Mai 2019 45
Smooth animations
É Unser Einstellungen muss in jeder Transition wie folgt aussehen
,
FU Berlin, Unity Game, 10. Mai 2019 46