BallCatch

[作成手順]
1.CubeでStageを作成する。

2.左と右に壁を作成する。(右は複製してxの-をとる)

3.新規3DオブジェクトからCylinderを作成し、表面材質を設定、Cylinderというタグを設定した後プレファブ化する。

4.CreateEmptyからCylinderGeneratorを作成し、CylinderGenerator.csを以下のように作成する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CylinderGenerator : MonoBehaviour {
	public GameObject prefab;

	void Start () {
		for (int i = 0; i < 300; i++) {
			Instantiate (
				prefab,
				new Vector3(Random.Range(-8.0f,8.0f),Random.Range(-4.0f,4.0f),-2.0f),
				Quaternion.Euler(new Vector3(90.0f,0,0))
			);
		}	
	}
}

5.インスペクターからCylinderプレファブを登録し、実行してみよう。

5.Directionnal LightのShadowType をNo Shadowsにする
6.カメラの設定をしよう。ProjectionをOrthographicにしてパースを無くし、Sizeで画面を調節する。

設定後

7.SphereからBallを作成する。transformを以下のように設定した後,Ballタグを付与し、Regidbodyをつける。その後適当に表面材質を設定する。

8.BallにBallController.csを付与する。Sylinderに堰き止められて停止してしまったら、そのSylinderを消去する動きをつけている。magnitudeで速度ベクトルの大きさを求められる。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallController : MonoBehaviour {
	
	Rigidbody rb;

	// Use this for initialization
	void Start () {
		rb = GetComponent<Rigidbody> ();
	}

	void OnCollisionStay(Collision coll){
		if (coll.gameObject.tag == "Cylinder") {
			if (rb.velocity.magnitude < 0.005) {
				Destroy (coll.gameObject);
			}

		}
	}

}

8.CreateEmptyからBallGeneratorを作成し、BallGenerator.csを以下のように作成する。
インスペクターからballプレファブを登録。100フレームごとにボールをX軸ランダムに生成する処理だ。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallGenerator : MonoBehaviour {
	public GameObject prefab;

	void Update () {
		if (Time.frameCount % 100 == 0) {
			Instantiate (
				prefab,
				new Vector3(Random.Range(-7.0f,7.0f),4.5f,-2.5f),
				Quaternion.identity

			);
		}
		
	}
}

9.CubeからPlayerを作成する。下図のようにtransformを設定し、表面材質を設定し、Playerタグをつける。

10.PlayerのコライダーのisTriggerにチェックを入れる。

11.PlayerにPlayerController.csを付与する。pubicでGUIStyleを宣言するとインスペクターからフォントサイズなどの設定ができるようになる。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerController : MonoBehaviour {
	public GUIStyle style;
	int score=0;
	
	// Update is called once per frame
	void Update () {
		float x = Input.GetAxis ("Horizontal");
		Vector3 vec = transform.position;
		vec.x += x * 0.5f;
		if (vec.x > 6.0f) {
			vec.x = 6.0f;
		}
		if (vec.x < -6.0f) {
			vec.x = -6.0f;
		}
		transform.position = vec;
		
	}
	void OnTriggerEnter(Collider coll){
		if (coll.gameObject.tag == "Ball") {
			Destroy (coll.gameObject);
			score++;

		}

	}
	void OnGUI(){
		GUI.Label (new Rect (10, 10, 300, 50), score + "", style);

	}

}

12.最後にGameOver判定をするデスゾーンを作成しよう。CreateEmptyからDeathzoneを作成し、下図のようにトランスフォームを設定をする。設定が終わったらAddComponetよりphysics->Box Colliderを付与する。
そしてisTriggerにチェックを入れる。

13.DeathzoneにDeathzoneController.csを付与する。一つでも捕まえ損ねるとゲームオーバーとなり処理を停止する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class DeathzoneController : MonoBehaviour {
	public GUIStyle style;
	string str="";
	bool isPlay=true;

	void OnTriggerEnter(Collider coll){
		str = "GameOver";

		//全ての動き停止
		Time.timeScale = 0f;
		//Update関数にも終了を報告する。
		isPlay = false;

	}
	public bool GetIsPlay(){
		return isPlay;
	}
	void OnGUI(){
		GUI.Label (new Rect (Screen.width / 2 - 160, Screen.height / 2 - 25, 320, 50), str, style);

	}
}


14.BallGenerator.csでボールの生成を止めるように以下のように変更する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BallGenerator : MonoBehaviour {
	public GameObject prefab;
	public DeathzoneController dc;

	void Update () {
		if (Time.frameCount % 100 == 0 && dc.GetIsPlay()) {
			Instantiate (
				prefab,
				new Vector3(Random.Range(-7.0f,7.0f),4.5f,-2.5f),
				Quaternion.identity

			);
		}
		
	}
}

[完成版]
以下からパッケージをダウンロードできる。