Mecánica de juego en lección de geometría o vectores en Unity 3D

Materiales didácticos para la escuela de programación. Parte 16

Los tutoriales anteriores se pueden encontrar aquí:
  1. Astronave





  2. Dominó





  3. Pájaro flappy





  4. Sala de gravedad





  5. Platformer





  6. Árboles (complemento SpeedTree)





  7. Modelando una casa en SketchUp





  8. Casa en el bosque





  9. Efecto lluvia. Partículas





  10. Billar





  11. Carácter líquido





  12. Cumplir y trabajar con el sistema de eventos





  13. Sintetizador Unity 3D





  14. Aerodeslizador





  15. Ragdolls en Unity 3D





En este artículo, volveremos la mirada al pasado y recordaremos cómo comenzó la escuela de programación infantil Step to Science. La idea inicial del proyecto era no ser solo un círculo de creatividad técnica, sino convertirse en una respuesta para los niños a la pregunta "¿por qué ir a la escuela?"





¿Por qué necesitamos física, álgebra y geometría, si no planeamos diseñar naves espaciales, si tenemos una calculadora en nuestro teléfono para contar, a menudo pagamos con una tarjeta, por lo que ni siquiera necesitamos contar el cambio en nuestra cabeza? .

Cuando era niño, también conducía ese razonamiento, y mis padres no tenían otras formas de transmitirme la verdad, a excepción de la frase "No quiero una palabra, tengo que tener una palabra" y un cinturón, que motivó que me sentara a recibir lecciones sin polémicas innecesarias.





Con la edad, moviéndome al otro lado de las barricadas, me di cuenta de que quería explicar, mostrar y demostrar a los niños que es muy importante estudiar en la escuela. Y el proyecto de juego que analizaremos hoy es el de un ciclo de clases para estudiar materias escolares a través de juegos en Unity 3D.





El motor multiplataforma de Unity ofrece enormes oportunidades para el profesor: a través del fascinante proceso de crear juegos, estudiamos las leyes de la física, la geometría, hacemos cálculos, diseñamos el entorno, usamos la narración, la mecánica de escenarios. Y, por supuesto, programamos. ¡Hay innumerables opciones para integrar Unity en otras áreas educativas y temáticas!





Orden de ejecución

2D «», (, , ). . LineRenderer .





!





.

, 2D .





, «» . , .





, 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, - . .





!





PD: Comparta el enlace del artículo con colegas, amigos y estudiantes curiosos. Será fantástico si prueba una de las lecciones de su escuela o el círculo de creatividad técnica de sus hijos y escribe algunas palabras de comentarios sobre cómo fue la lección de Unity 3D. ¡Buena suerte!








All Articles