2010-12-07 GameMaker AG-Protokoll

Aus Fachschaft_Informatik
Zur Navigation springen Zur Suche springen

Protokoll der GameMaker AG-Sitzung am 07.12.2010

Anwesende Personen: 10

Beginn: 13:05 Uhr

Ablauf[Bearbeiten]

  • Wir wiederholen noch einmal die Scripts PlayerMovement und FollowCamera
  • PlayerMovement wird gändert, sodass Time.deltaTime darin vorkommt:
var speed : float;

function FixedUpdate()
{
 rigidbody.AddForce(Vector3(Input.GetAxis("Horizontal"),0,Input.GetAxis("Vertical")) * Time.deltaTime * speed);
}
  • Grund dafür ist die Möglichkeit, dass die Framerate auch in FixedUpdate() sinken kann, wenn sich die Physik-Engine irgendwann überfordert fühlt
  • Wir entscheiden uns, die Steuerung und Kamera so abzuändern, dass die Kamera durch die horizontale Input-Achse gedreht sird, und man relativ zur Kamera nur nach vorne bzw. hinten rollen kann.
    • Hierfür entfernen wir den die FollowCam-Komponente von der Kamera,
    • erzeugen eine neues, leeres GameObject, dass wir an den Mittelpunkt des Balles positionieren, namens CameraPivot. Dieser kriegt nun eine FollowCamera-Komponete, die mit Offset 0,0,0 und der Kugel als Target dafür sorgt, dass er im Kugelmittelpunkt bleibt.
    • Die Kamera wird nun dem CameraPivot untergeordnet (Parent-System) und so positioniert und rotiert, wie sie relativ zum Ball sein soll (das läuft ja nicht mehr über die Offset-Eigenschaft!).
    • Jetzt ändern wir das PlayerMovement-Script:
var speed : float;
var pivot : Transform;

function FixedUpdate()
{
 rigidbody.AddForce(pivot.forward * Input.GetAxis("Vertical")) * Time.deltaTime * speed);
}
  • Der Eigenschaft "Pivot" im Inspektor wird nun unser CameraPivot zugewiesen.
    • pivot.forward ist der Vektor, der abhängig von der Drehung des Transforms vom Objekt aus gesehen nach vorne zeigt und ist somit identisch mit pivot.TransformDirection(Vector3.forward).
    • Wir können jetzt nur noch nach vorne und hinten rollen.
    • Um die Kamera zu drehen, erstellen wir ein neues Script namens RotateByInput, das wir dem CameraPivot geben:
var speed : float; //Kamera-Drehgeschwindigkeit

function Update() //Update, da keine Kamera in Abhängigkeit eines targets ist (LateUpdate()) und kein Physikobjekt im Spiel ist (FixedUpdate())
{
 transform.Rotate(0, Input.GetAxis("Horizontal") * Time.deltaTime * speed, 0); //Drehe dein GameObject (und damit die Kamera)!
}
    • Damit haben wir das gesamte Gameplay umgekrempelt :)

Ergebnis[Bearbeiten]

  • Alle sind scriptingtechnisch ungefähr auf dem gleichen Stand.
  • Nach Möglichkeit kann Zuhause an der Scene gebastelt und somit eine Herausforderung erstellt werden.

Nächstes Mal[Bearbeiten]

  • Wir können nun das Spiel nach belieben erwitern: Springen, bewegende Objekte, Spezialeffekte, Sounds, ...
  • Ausserdem schauen wir uns Prefabs an - eine extrem wichtige Sache!

Ansonsten[Bearbeiten]