Unity3Dのジオメトリレッスンまたはベクトルのゲームの仕組み

プログラミング学校の教材。パート16

以前のチュートリアルはここにあります:
  1. 宇宙船





  2. ドミノ





  3. ゆるい鳥





  4. 重力室





  5. プラットフォーマー





  6. ツリー(プラグインSpeedTree)





  7. SketchUpで家をモデリングする





  8. 森の中の家





  9. 雨の影響。粒子





  10. ビリヤード





  11. リキッドキャラクター





  12. イベントシステムに固執して作業する





  13. Unity3Dシンセサイザー





  14. ホバークラフト





  15. Unity3Dのラグドール





この記事では、過去に目を向け、「科学へのステップ」の子供向けプログラミング学校がどのように始まったかを思い出します。プロジェクトの最初のアイデアは、技術的な創造性の輪だけでなく、「なぜ学校に行くのか」という質問に対する子供たちの答えになることでした。





物理学、代数、幾何学が必要なのはなぜですか。宇宙船を設計する予定がない場合、電話に計算機があり、カードで支払うことが多いので、頭の変化を数える必要さえありません。 。

子供の頃、私もそういう推論をしていましたが、両親は「言葉が欲しくない、言葉が必要」という言葉と、やる気のあるベルトを除いて、真実を伝える方法がありませんでした。私は不必要な論争なしにレッスンのために座ります。





年齢とともに、バリケードの反対側に移動し、学校で勉強することが本当に重要であることを子供たちに説明し、見せ、証明したいと思いました!そして、今日分析するゲームプロジェクトは、Unity3Dのゲームを通じて学校の科目を学習するためのクラスのサイクルの1つです。





Unityクロスプラットフォームエンジンは、教師に絶大な機会を提供します。ゲームを作成する魅力的なプロセスを通じて、物理学、幾何学、計算、環境の設計、ストーリーテリング、シナリオ力学の法則を研究します。そしてもちろん、私たちはプログラムします。Unityを他の教育および主題分野に統合するための無数のオプションがあります!





実行順序

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記事へのリンクを同僚、友人、好奇心旺盛な学生と共有します。学校や子供の技術的創造性サークルでレッスンの1つを試して、Unity3Dレッスンがどのように進んだかについてフィードバックをいくつか書いてください。がんばろう!








All Articles