2011-01-11 GameMaker AG-Protokoll
Version vom 8. Juni 2012, 16:01 Uhr von 1steenfa (Diskussion | Beiträge) (Bot: Kosmetische Änderungen)
Protokoll der GameMaker AG-Sitzung am 11.01.2011
Anwesende Personen: 5-6
Beginn: 13:05 Uhr
Ablauf[Bearbeiten]
Wir basteln mit dem CharacterController herum.
- Der CharacterController ist für alle Arten von Humanoiden Figuren im Spiel gedacht, aber wer damit rumexperimentiert, wird feststellen, dass auch andere Anwendungen möglich sind.
- Die Komponente lässt ein Objekt nicht der Physikberechnung unterliegen, dennoch hat sie Kollisionsabfrage
- Wir merken uns unsere CharacterController-Komponente, um nicht in jedem Frame die zu meidende GetComponent()-Funktion zu benutzen:
private var controller : CharacterController; function Awake() { controller = GetComponent(CharacterController); }
- Die Funktion für Bewegung mit Kollisionsabfrage ist:
controller.Move();
- Wir benutzen einen auf Maximallänge 1 gekürzten Input-Vektor:
var dir : Vector3 = Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis(Input.GetAxis("Vertical"))); dir = dir.normalized * Mathf.Min(dir.magnitude, 1); //Maximallänge 1 gegen schnelleres schräg laufen
- Das multiplizieren wir jetzt noch mit einer Variable speed:
dir *= speed;
- Da ein CharacterController nicht von alleine runter fällt, benötigen wir eine globale Variable zum speichern der aktuellen vertikalen Geschwindigkeit:
private var ySpeed : float = 0;
- Diesen Wert benutzen wir als y-Wert von dir, aber erst nach der Auf-1-kürzung (rate mal wieso):
dir.y = ySpeed;
- Vorher berechnen wir diesen Wert aber noch einmal neu:
if(controller.isGrounded) //Standen wir im letzen Frame auf dem Boden? Der controller weiß es! { ySpeed = jumpSpeed; } else { ySpeed = Mathf.Max(ySpeed -= gravity, minYSpeed); }
- jumpSpeed, gravity und minYSpeed können durch Zahlenwerte ersetzt werden, sollten aber Variablen sein.
- Zuletzt wenden wir das ganze noch an:
contoller.Move(dir * Time.deltaTime);
- Und das alles in Update() (nicht FixedUpdate(), da kein Rigidbody!)
Ein bisschen Blender-modellierung am Schluss - nicht unbedingt inhaltlich nennenswert.
Ergebnis[Bearbeiten]
- Wir können mit CharacterControllern Humanoide erstellen, die eine Kollisionsabfrage haben und runter fallen können.
- Das Bewegen in Blickrichtung der Kamera ließe sich jetzt aus den Scripts mit dem Ball und der drehenden Kamera ableiten. Fertig ist das 3rd-Person Game.