Unterrichtsmaterialien für die Programmierschule. Teil 16
Frühere Tutorials finden Sie hier:
In diesem Artikel werden wir unsere Augen auf die Vergangenheit richten und uns daran erinnern, wie die Programmierschule für Kinder von Step to Science begann. Die ursprüngliche Idee des Projekts war, nicht nur ein Kreis technischer Kreativität zu sein, sondern eine Antwort für Kinder auf die Frage "Warum zur Schule gehen?" Zu werden.
Warum brauchen wir Physik, Algebra und Geometrie? Wenn wir keine Raumschiffe entwerfen wollen, wenn wir einen Taschenrechner zum Zählen in unserem Telefon haben, zahlen wir oft mit einer Karte, sodass wir nicht einmal Veränderungen in unserem Kopf zählen müssen .
Als Kind habe ich auch solche Überlegungen angestellt, und meine Eltern hatten keine andere Möglichkeit, mir die Wahrheit zu vermitteln, außer dem Satz „Ich will kein Wort, ich muss ein Wort haben“ und einem Gürtel, der motivierte Ich setze mich für den Unterricht ohne unnötige Polemik.
Mit zunehmendem Alter wurde mir klar, dass ich den Kindern erklären, zeigen und beweisen wollte, dass es wirklich wichtig ist, in der Schule zu lernen! Und das Spielprojekt, das wir heute analysieren werden, gehört zu einem Zyklus von Klassen zum Lernen von Schulfächern durch Spiele in Unity 3D.
Die plattformübergreifende Unity-Engine bietet dem Lehrer enorme Möglichkeiten: Durch den faszinierenden Prozess der Erstellung von Spielen studieren wir die Gesetze der Physik, der Geometrie, führen Berechnungen durch, entwerfen die Umgebung, verwenden das Geschichtenerzählen und die Szenariomechanik. Und natürlich programmieren wir. Es gibt unzählige Möglichkeiten, Unity in andere Bildungs- und Fachbereiche zu integrieren!
Ausführungsreihenfolge
2D «», (, , ). . LineRenderer .
!
, «» . , .
, Order in layer . , Circle collider Rigidbody.
Audio Source, .
, , .
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour {
public AudioSource hitSound;
public Rigidbody2D rig;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void FixedUpdate() {
}
private void OnCollisionEnter2D(Collision2D other) {
if (other.relativeVelocity.magnitude > 1f) {
hitSound.Play();
hitSound.volume = Mathf.Clamp01(other.relativeVelocity.magnitude / 10);
rig.velocity *= 0.8f;
}
}
}
Rigidbody, . Play, , . , .
, . , : LineRenderer, .
:
, LineRenderer', :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Arrow : MonoBehaviour {
public Vector3 showVector;
public LineRenderer lrenderer1;
public LineRenderer lrenderer2;
Transform myTransform;
// Use this for initialization
void Start () {
//lrenderer1 = GetComponent<LineRenderer>();
myTransform = transform;
}
// Update is called once per frame
void Update () {
showVector = new Vector3(showVector.x, showVector.y, 0f);
lrenderer1.SetPosition(0, myTransform.position);
lrenderer1.SetPosition(1, myTransform.position + showVector);
if (showVector.magnitude >= 2f) { //
lrenderer2.SetPosition(0, myTransform.position + showVector - showVector.normalized);
} else {
lrenderer2.SetPosition(0, myTransform.position + showVector * 0.5f);
}
lrenderer2.SetPosition(1, myTransform.position + showVector);
if (showVector.magnitude < 0.1f) {
lrenderer1.enabled = lrenderer2.enabled = false;
} else {
lrenderer1.enabled = lrenderer2.enabled = true;
}
}
}
- .
, "" . :
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VectorVelocity : MonoBehaviour {
public Rigidbody2D rig;
public Arrow arrow;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (rig.bodyType == RigidbodyType2D.Dynamic) {
arrow.showVector = rig.velocity / 5f;
}
}
}
, .
. 15 , . , - Trail Renderer .
, . Rigidbody Kinematic .
:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class Spawner : MonoBehaviour {
public Rigidbody2D ball;
public TrailRenderer tr;
Quaternion oldRotation;
Vector3 oldPosition;
public bool readyToShoot = true;
// Use this for initialization
void Start () {
oldPosition = ball.transform.position;
oldRotation = ball.transform.rotation;
}
// Update is called once per frame
public void Respawn () {
ball.transform.position = oldPosition;
ball.transform.rotation = oldRotation;
ball.velocity = Vector3.zero;
ball.angularVelocity = 0;
ball.bodyType = RigidbodyType2D.Kinematic;
readyToShoot = true;
tr.Clear();
}
public void Shoot(Vector3 speed) {
if (!readyToShoot) {
return;
}
ball.bodyType = RigidbodyType2D.Dynamic;
ball.velocity = speed;
readyToShoot = false;
}
}
.
. , . UI -> Panel , TouchPanel.cs , .
( ):
, - , , .
, / , Toggle, - . .
!
PS Teilen Sie den Link zum Artikel mit Kollegen, Freunden und neugierigen Studenten. Es ist großartig, wenn Sie eine der Lektionen in Ihrer Schule oder im Kreis der technischen Kreativität Ihrer Kinder ausprobieren und ein paar Rückmeldungen zum Verlauf der Unity 3D-Lektion schreiben. Viel Glück!