ピタゴラ
まずはノースクリプトで動画のようなゲームを作成してみよう!
[作成]
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プレファブを設定する。
実行してみよう。動画のようになれば成功だ。
[完成版パッケージ]
以下からダウンロードし、インポートパッケージすると再現できる。
コメント