2012/01/31

[unity] これはテトリさないです

最近Unityの黄色い本買ったので
趣味とお勉強に少しずつ進めてます。

↓この本
書籍『Unity入門』 - Top page

チャプターを2/3くらい進めたところで
サンプルソースを参考に作ってみたもの…。

↑こっちはスクリーンショット







ステージ作るよ

Hierarchyタブ → Create → Cube で
作った箱をスケールかけたりしながら背景を作成
wikipedia先生によると本家は縦20、横10ブロックだそうな


物理マテリアルを設定するよ

Projectタブ → Create → Physic Material で
物理用のマテリアルをこさえてさっきのBGオブジェにドラッグ&ドロップ!
摩擦係数や跳ね返る強さもここで設定できます


ブロックも作るよ
上段メニューの GameObject → Create Empty で
空オブジェクトを作り、それの子にCubeを新しく作ってブロックの形に並べる
背景と同じく物理マテリアルも設定しておきます

次に Projectタブ → Create → Prefab でプレハブを作り
そこへブロックオブジェクトをドラッグ&ドロップ!

この工程を全部の形で行います


ブロックにリジッドボディを設定するよ
上段メニューの Compornent → Physics → Rigidbody 
ブロックの親に対して設定します

あと2D的な動きをさせたいなと思ったので
Rigidbodyの設定の Constraints で
Z軸移動と、XY回転にチェックを入れて動かないようにしました

ウインドウ上段にあるプレイボタンを押して落下テストをしてみると面白いです


ブロックを湧き出す仕組みを作るよ
またCreate Emptyして、上の方に配置します
ここがブロック発生ポイントになります


ブロックを生成する処理を作るよ
Projectタブ → Create → Javascript
新規スクリプトを作成し、以下の処理を加えました
// ------------------------------
// ブロック延々生み出す君
// ------------------------------

//いんすぺくたに出しとく変数
var interval  : float;    //ブロックが出てくる間隔
var randRot   : float;    //ブロック出たときのランダムZ回転値
var blockPrefabs : GameObject[] = []; //ブロックプレハブを登録する入れ物

//表に出さなくていい変数
private var timer : float;    //次のブロックを出すまでの残り時間

//ゲーム開始時の処理だよ
function Start () {
 //タイマー0にしてブロック1コ目出しとく
 timer = 0.0;
}

//毎フレーム実行される処理だわさ
function Update () {
 //お時間は減り続ける一方です
 timer -= Time.deltaTime;

 //時間が来たら出てってください
 if (timer < 0.0) {
  //次のブロックをランダムに選ぶよ
  var prefab : GameObject = blockPrefabs[Random.Range(0, blockPrefabs.length)];

  //ランダム回転も与えましょう
  transform.rotation = Quaternion.AngleAxis(Random.Range(randRot * -1, randRot), Vector3(0, 0, 1));

  //インスタンスが巣立ちます
  Instantiate(prefab, transform.position, transform.rotation);

  //次の人のためにタイマーは戻してね
  timer = interval;
 }
}

処理が書けたら、このスクリプトを先ほどの
発生ポイントにドラッグ&ドロップして登録します

Interval はブロックが出る間隔(秒)
RandRot は発生時の向きをランダムで変える値
BlockPrefabs は最初にブロックの総数を入力すると
その下に出来た Element にブロックをひとつずつ登録していきます
ここに登録したブロックがランダムに湧き出てきます


プレイボタン押して、エラーが出なければ完成!(何がだろう)


スクリプト部分は置いといても、
物理挙動して遊ぶものがこんなに簡単だと
いくらでもしょーもないこと出来ますね! ひゃっほう

0 件のコメント:

コメントを投稿