ピタゴラ

まずはノースクリプトで動画のようなゲームを作成してみよう!

[作成]
Cubeを配置し名前をFloorとし、transformを下図のようにする。

床のマテリアルを作成しよう。

上の画像をダウンロードしてAssetsにドラッグアンドドロップで配置する。
プロジェクトから新規にマテリアルを作成し、名前をFloorとする。


ShaderをLegacy Shaders/diffuseとしてコンクリ画像を貼り付けた後、Tilingを10,10とする。
FloorマテリアルをFloorに適応する。

CreateEmptyで空要素を作り、名前をSeesawとしてその中でCubeを組み合わせて作成する。
必要であれば下の画像をダウンロードし、表面材質とすること

できたら親要素のSeesawに対してRigidbodyを付与する。
続いて以下のように支点となる部分をCubeを45度回転する。

Rigidbodyを付与したSphereを皿に収まるように配置する。

続いて上方にSphereを配置する、Rigidbodyを付与しMassを調整する。(質量を大きくするほど強く吹き飛ばすことができる)

図のようにCubeにて板を作成し、表面材質を設定し、Rigidbodyを付与したらそれをプレファブ化して、ドミノ倒しの要領で並べる。プレファブ化した一つを配置した後Duplicateしながら並べて行くと楽に配置できる。

位置を調整し実行してみよう。最初の動画のようになれば成功だ。

●応用
スクリプトを利用して、動的にドミノを並べてみよう。

CreateEmptyし、名前をDominoGeneratorとする。
DominoGenerator.cs作成し以下のように記述する。

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

public class DominoGenerator : MonoBehaviour {
	//今画面い並んでいる最後尾のドミノ
	public Transform lastDomino;
	//Instantiateするオブジェクト
	public GameObject prefab;

	void Start () {
		//最後尾の先に新しく作る一つ目の座標
		Vector3 position = lastDomino.position+lastDomino.forward;
		//最後尾のオイラーアングルを取得
		Vector3 rot = lastDomino.eulerAngles;
		for (int i = 0; i < 40; i++) {
			//y軸に8度回転したオイラーアングルを作る
			rot += new Vector3 (0, -8.0f, 0);
			//Instantiate
			GameObject obj=(GameObject)Instantiate (
				//何を
				prefab,
				//どこに
				position,
				//回転(オイラーアングルからクォータにオンに変換)
				Quaternion.Euler(rot)
			);
			//位置情報を更新(前方に1,左に0.2進んだ場所に次のプレファブを置く)
			position += obj.transform.forward + (-obj.transform.right)*0.2f;
		}

	}
}

スクリプトをDominoGeneratorにアタッチして、publicフィールドのlastDominoに画面中にある最後尾のドミノを、prefabにはassetsにあるDominoプレファブを設定する。

実行してみよう。動画のようになれば成功だ。

[完成版パッケージ]
以下からダウンロードし、インポートパッケージすると再現できる。