目次
隕石拾いゲーム
シーン(main.unity)の作成
床を作る
ゲームの盤面作成
プレイヤーの作成
プレイヤーを左右に動かす
スクリプト書くです。Updateファンクションに
1 2 |
var x: float = Input.GetAxis("Horizontal"); transform.Translate(x*0.2,0,0); |
と記述。Input.GetAxisで入力情報を取得。Horizontalは左右キー。
transform.Translate(x*0.2,0,0)で左右に0.2ずつ動く。
敵を作る
直径0.5の立方体(enemy)を作ってRigidbodyを付与。
敵に動きを付ける
1 2 3 4 5 |
var speed:float; function Update () { transform.position.z -= speed; transform.Rotate(1,1,1); } |
speedはGUIから変更する
transform.Rotate(1,1,1)は三軸全て角度を変える。1度ずつ。
敵のPrefab化
沢山enamyを発生させるために。
enamyをHierarchyビューからAssetビューにD&D
敵が出現するポイント(enamybox)を作る
GameObject > Create Empty
敵を発生させるスクリプトを書く
1 2 3 4 |
var prefab:Transform; function Update () { Instantiate(prefab,Vector3(Random.Range(-5.0,5.0),1,8),transform.rotation); } |
prefabインスタンスをx軸-5から5の乱数 y1 z8の座標から発生させる。
ememyboxに作成したjsを付与して、PrefabにPrefab化したenemyオブジェクトを設定。
敵の発生間隔を制御する
上記画像のような発生頻度ではゲームにならないので。
1 2 3 |
if(Time.frameCount%60 == 0) { Instantiate(prefab,Vector3(Random.Range(-5.0,5.0),1,8),transform.rotation); } |
60フレームごとに発生処理。
フレームカウントを60で割って余りが0になるとき、という条件を設定している。
※1秒60フレーム
発生がぬるく緩やかになった。
敵が当たったら消滅させる
1 2 3 4 5 |
function OnCollisionEnter (col:Collision) { if (col.gameObject.name == "enemy(Clone)") { Destroy(col.gameObject); } } |
衝突(Collision)したものが敵(enemy(Clone))だったらオブジェクトcol(enemy(Clone))を消滅(Destroy)する。
ゲームオーバーの作成
File > New Sceneで新しいシーンを作成
GameOver.jsを作り下記のコードを記述。
1 2 3 4 5 6 |
#pragma strict var style : GUIStyle; function OnGUI () { GUI.Label(Rect(10,10,200,50),"GameOver",style); } |
GUIStyleはGUIの描画に必要な情報を提供するクラス。
GUI.Label
表示する文字列を指定する。
第一引数:表示領域
Rect(長方形)
Rect(x, y, 幅, 高さ)
第二引数:表示したい文字列
第三引数:スタイルの名前
JsをMain Cameraに付与。
Gameビューで確認すると文字列が表示されている。
Inspectorに設定が提供されている。
ここから文字列の色やフォントなど各種設定変更が出来るようになった。
GameOver画面の呼び出し
再びmainシーンに戻ってenemy.jsに記述を追加。
1 2 3 |
if (transform.position.z < -12) { Application.LoadLevel("GameOver"); }; |
もしenemyがz-12まで来たら、Application.LoadLevelで引数に指定したシーン(GameOver)を呼び出す。
これだけでは呼び出しエラーになるので、
File > Build SettingsでSceans In Buildの枠内にmainとGameOverをD&Dで追加。main:0,GameOver:1の順番で。
プレイヤーを縮める
敵をキャッチするたびに縮む。
1 2 3 4 5 6 7 8 9 |
function OnCollisionEnter (col:Collision) { if (col.gameObject.name == "enemy(Clone)") { transform.localScale.x -= 1; Destroy(col.gameObject); if(transform.localScale.x < 1) { transform.localScale.x = 1; } } } |
transform.localScaleは相対的なサイズの変更をする。今回はx軸を-1減らす指定。
つまりenemy(Clone)に触るとplayerが1縮む。
1以下にならない(消滅しない)ようにx < 1の場合は1に固定する条件をつけた。
スコアをつける
テキスト表示
HierarcyビューからCreate > GUI Text
Inspectorで配置を調整する。
AnchorやらPixel Offsetを調節して表示したい位置に持っていく。
二次元なのでGameビューを見ながら調節する。
スコア表示
Score.jsを作る。
1 2 3 4 5 6 7 8 9 10 |
#pragma strict static var scorePoint : int; function Start () { scorePoint=0; } function Update () { guiText.text = "Score:" + scorePoint.ToString(); } |
GUI textにScore: と scorePointの文字列を表示させる。
GUI textに付与する。
カウントアップするために、player.jsのCollision判定にScore.scorePoint++;のインクリメントを足してememyを拾うたびに加算するようにする。
GameOver.jsの記述を書き換えてGameOver時にスコアが出るようにする。
1 2 3 4 5 6 |
#pragma strict var style : GUIStyle; function OnGUI () { GUI.Label(Rect(10,10,200,50),"GameOver\nScore:" + Score.scorePoint.ToString(),style); } |
背景をつける
敵に糸引かせる(いかがわしい
ememyにAdd Component > Effects > Trail Renderer
糸引いた
ゲームを出力する
File > Build & Runで出力したいPlatformを選んでBuild&runする
完成!
出来上がったのがこちら
いかがわしいブロックキャッチ
10秒に一回いかがわしくないブロックが出るよ。ボーナスだよ。
コメント
No Trackbacks.