Mécanique de jeu en cours de géométrie ou vecteurs dans Unity 3D

Matériel pédagogique pour l'école de programmation. Partie 16

Les tutoriels précédents peuvent être trouvés ici:
  1. Vaisseau spatial





  2. Dominos





  3. Oiseau Flappy





  4. Salle de gravité





  5. Plateforme





  6. Arbres (plugin SpeedTree)





  7. Modélisation d'une maison dans SketchUp





  8. Maison dans les bois





  9. Effet pluie. Particules





  10. Billard





  11. Caractère liquide





  12. Coller et travailler avec le système d'événements





  13. Synthétiseur 3D Unity





  14. Aéroglisseur





  15. Ragdolls sur Unity 3D





Dans cet article, nous tournerons notre regard vers le passé et nous nous souviendrons comment l'école de programmation pour enfants Step to Science a commencé. L'idée initiale du projet n'était pas seulement d'être un cercle de créativité technique, mais de devenir une réponse pour les enfants à la question "pourquoi aller à l'école?"





Pourquoi avons-nous besoin de physique, d'algèbre et de géométrie, si nous ne prévoyons pas de concevoir des vaisseaux spatiaux, si nous avons une calculatrice dans notre téléphone pour compter, nous payons souvent avec une carte, donc nous n'avons même pas besoin de compter le changement dans notre tête .

En tant qu'enfant, j'ai également mené un tel raisonnement, et mes parents n'avaient pas d'autre moyen de me transmettre la vérité, à l'exception de la phrase «Je ne veux pas un mot, je dois avoir un mot» et une ceinture, ce qui a motivé moi de m'asseoir pour des leçons sans polémiques inutiles.





Avec l'âge, en passant de l'autre côté des barricades, je me suis rendu compte que je voulais expliquer, montrer et prouver aux enfants qu'il est vraiment important d'étudier à l'école! Et le projet de jeu que nous allons analyser aujourd'hui fait partie d'un cycle de cours pour étudier les matières scolaires à travers des jeux dans Unity 3D.





Le moteur multiplateforme Unity offre d'énormes opportunités pour l'enseignant: à travers le processus fascinant de création de jeux, nous étudions les lois de la physique, de la géométrie, faisons des calculs, concevons l'environnement, utilisons la narration, la mécanique des scénarios. Et, bien sûr, nous programmons. Il existe d'innombrables options pour intégrer Unity dans d'autres domaines éducatifs et thématiques!





Ordre d'exécution

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





!





PS Partagez le lien vers l'article avec des collègues, des amis et des étudiants curieux. Ce sera formidable si vous essayez l'une des leçons de votre école ou du cercle de créativité technique des enfants, et écrivez quelques mots de commentaires sur le déroulement de la leçon Unity 3D. Bonne chance!








All Articles