素人がUnityでブロック崩し作ってみた - ⑤
色々妥協しているけどなんとかできた
3時間ほど前に、ブロック崩しに追加要素加えるよ!と目標立ててやってみたけど
なんとか形になった。笑
ひとつ前の記事で追加要素としてあげたもの
追加要素は以下の通り
- ブロックの色によって当たったときに消える回数を変える
- 段々とボールが早くなる
- とにもかくにもスコア表示
- ゲームオーバー画面ぐらい作ろう
- ついでにスタート画面も用意してみる?
出来上がったアプリがこちら
以下で作ったときの詳細説明していくよ。
1.ブロックの当たった回数制御追加
これに関しては、オブジェクトにEnemyLifeを追加した。
いわゆる、ライフですね。体力。
で、そのEnemyLifeがボールに当たるたびに減って、0になったときだけオブジェクト消そうね。
とソースを書き換えた。
こんな感じ。
画面
ソースコード
public class TitleEnemyBlockScript : MonoBehaviour {
public int enemyLife; //消滅するまでの回数
void OnCollisionEnter(Collision obj)
{
if (obj.gameObject.name == "Ball")
{
// 衝突時にブロックのライフを減らす
enemyLife--;
if (enemyLife == 0)
{
GameObject.Destroy(this.gameObject);
}
}
}
}
2. ブロックに当たるたびにボールの速度をランダムに早くする
これに関しては、あたり判定のイベントOnCollisionEnter内で、Speedを変更するソース書いただけ
speed = speed + Random.Range(0.1f,0.5f);
3. スコア表示
3D オブジェクトの3D Textを追加して、値を表示する処理をソースに書いた。
■ボールがブロックに当たったとき
- 当たったブロックのライフを表示
- ボールのスピードを表示
■ブロックが消えたとき
- トータルスコアを表示
といった具合に書いてます。
トータルスコアには、Unity標準で備わっているセーブ機能のPlayerPrefsというものを使ってみた。
PlayerPrefs.SetInt("intTotalScore", 0); // intTotalScoreに0を入れる
int x = PlayerPrefs.GetInt("intTotalScore", 0); // intTotalScoreの値をxに格納
こんな感じで、GetとSetで使えるからセーブにはみんな最初これを使うはず。
4. ゲームオーバ画面を作ろう
これは、Sceneを別の名前で保存して、ゲーム画面に表示したいようにオブジェクトを変えてみた。笑
息抜きに笑いに走り、気づいたらエガちゃんが背景にいた。一瞬の出来事で少し戸惑ったけど、勝手に使ってすんません。そのうち変えます。
5.スタート画面用意してみた
これも別の名前でSceneを保存して中身を変えて作ってみた。
オブジェクトを触ったときに、処理を行う部分が少し厄介で、
マウスクリック時にRaycastと言われるもの(見えない)を飛ばして、当たったオブジェクトの名前がStartBtnだったら画面遷移
といったプログラムを書いた。
以下を参考にした