プログラミング学校の教材。パート16
以前のチュートリアルはここにあります:
この記事では、過去に目を向け、「科学へのステップ」の子供向けプログラミング学校がどのように始まったかを思い出します。プロジェクトの最初のアイデアは、技術的な創造性の輪だけでなく、「なぜ学校に行くのか」という質問に対する子供たちの答えになることでした。
物理学、代数、幾何学が必要なのはなぜですか。宇宙船を設計する予定がない場合、電話に計算機があり、カードで支払うことが多いので、頭の変化を数える必要さえありません。 。
子供の頃、私もそういう推論をしていましたが、両親は「言葉が欲しくない、言葉が必要」という言葉と、やる気のあるベルトを除いて、真実を伝える方法がありませんでした。私は不必要な論争なしにレッスンのために座ります。
年齢とともに、バリケードの反対側に移動し、学校で勉強することが本当に重要であることを子供たちに説明し、見せ、証明したいと思いました!そして、今日分析するゲームプロジェクトは、Unity3Dのゲームを通じて学校の科目を学習するためのクラスのサイクルの1つです。
Unityクロスプラットフォームエンジンは、教師に絶大な機会を提供します。ゲームを作成する魅力的なプロセスを通じて、物理学、幾何学、計算、環境の設計、ストーリーテリング、シナリオ力学の法則を研究します。そしてもちろん、私たちはプログラムします。Unityを他の教育および主題分野に統合するための無数のオプションがあります!
実行順序
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記事へのリンクを同僚、友人、好奇心旺盛な学生と共有します。学校や子供の技術的創造性サークルでレッスンの1つを試して、Unity3Dレッスンがどのように進んだかについてフィードバックをいくつか書いてください。がんばろう!