2010-12-07 GameMaker AG-Protokoll
Protokoll der GameMaker AG-Sitzung am 07.12.2010
Anwesende Personen: 10
Beginn: 13:05 Uhr
Ablauf
- Wir wiederholen noch einmal die Scripts PlayerMovement und FollowCamera
- PlayerMovement wird gändert, sodass Time.deltaTime darin vorkommt:
var speed : float;
function FixedUpdate()
{
//In Unitys JavaScript braucht man kein "new". Einfach den Konstruktor aufrufen, wie hier Vector3
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
- 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
- Wir können nun das Spiel nach belieben erwitern: Springen, bewegende Objekte, Spezialeffekte, Sounds, ...
- Ausserdem schauen wir uns Prefabs an - eine extrem wichtige Sache!