2011-01-11 GameMaker AG-Protokoll

Aus Fachschaft_Informatik
Version vom 8. Juni 2012, 16:01 Uhr von 1steenfa (Diskussion | Beiträge) (Bot: Kosmetische Änderungen)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

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.