Material didático para a escola de programação. Parte 16
Tutoriais anteriores podem ser encontrados aqui:
Neste artigo, vamos voltar nossos olhos para o passado e lembrar como a escola de programação infantil Step to Science começou. A ideia inicial do projeto era não ser apenas um círculo de criatividade técnica, mas se tornar uma resposta para as crianças à pergunta "por que ir para a escola?"
Por que precisamos de física, álgebra e geometria, se não planejamos projetar naves espaciais, se temos uma calculadora em nosso telefone para contagem, muitas vezes pagamos com um cartão, então não precisamos nem mesmo contar o troco em nossa cabeça .
Quando criança, também conduzia esse raciocínio, e meus pais não tinham outra forma de me transmitir a verdade, a não ser pela frase “não quero uma palavra, preciso falar uma palavra” e um cinto, que motivava me sentar para as aulas sem polêmicas desnecessárias.
Com a idade, passando para o outro lado das barricadas, percebi que queria explicar, mostrar e provar para as crianças que é muito importante estudar na escola! E o projeto de jogo que vamos analisar hoje faz parte de um ciclo de aulas para o estudo de disciplinas escolares por meio de jogos em Unity 3D.
O motor de plataforma cruzada Unity oferece oportunidades tremendas para o professor: através do fascinante processo de criação de jogos, estudamos as leis da física, geometria, fazemos cálculos, projetamos o ambiente, usamos narrativas, mecânica de cenários. E, claro, nós programamos. Existem inúmeras opções para integrar o Unity em outras áreas educacionais e disciplinares!
Ordem de execução
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 Compartilhe o link do artigo com colegas, amigos e alunos curiosos. Será ótimo se você tentar uma das aulas em sua escola ou círculo de criatividade técnica de seus filhos e escrever algumas palavras de feedback sobre como foi a aula do Unity 3D. Boa sorte!