ピタゴラ
まずはノースクリプトで動画のようなゲームを作成してみよう!
[作成]
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=Instantiate (
//何を
prefab,
//どこに
position,
//回転(オイラーアングルからクォータにオンに変換)
Quaternion.Euler(rot)
);
//位置情報を更新(前方に1,左に0.2進んだ場所に次のプレファブを置く)
position += obj.transform.forward + (-obj.transform.right)*0.2f;
}
}
}
スクリプトをDominoGeneratorにアタッチして、publicフィールドのlastDominoに画面中にある最後尾のドミノを、prefabにはassetsにあるDominoプレファブを設定する。
実行してみよう。動画のようになれば成功だ。
[完成版パッケージ]
以下からダウンロードし、インポートパッケージすると再現できる。


コメント