にゃんたのUnityゲーム開発覚え書き

Unityのゲーム開発についてあれやこれや書いていきます。

素人がUnityでブロック崩し作ってみた - ⑤

色々妥協しているけどなんとかできた

3時間ほど前に、ブロック崩しに追加要素加えるよ!と目標立ててやってみたけど

なんとか形になった。笑

a-zero.hatenablog.com

 

 

 

ひとつ前の記事で追加要素としてあげたもの

追加要素は以下の通り

  1. ブロックの色によって当たったときに消える回数を変える
  2. 段々とボールが早くなる
  3. とにもかくにもスコア表示
  4. ゲームオーバー画面ぐらい作ろう
  5. ついでにスタート画面も用意してみる?

出来上がったアプリがこちら

youtu.be

 以下で作ったときの詳細説明していくよ。

 

1.ブロックの当たった回数制御追加

これに関しては、オブジェクトにEnemyLifeを追加した。

いわゆる、ライフですね。体力。

で、そのEnemyLifeがボールに当たるたびに減って、0になったときだけオブジェクト消そうね。

とソースを書き換えた。

こんな感じ。

画面

f:id:sirosiro346:20170912235529p:plain

ソースコード

f:id:sirosiro346:20170912235638p:plain

 

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を別の名前で保存して、ゲーム画面に表示したいようにオブジェクトを変えてみた。笑

息抜きに笑いに走り、気づいたらエガちゃんが背景にいた。一瞬の出来事で少し戸惑ったけど、勝手に使ってすんません。そのうち変えます。

f:id:sirosiro346:20170913000853p:plain

 

5.スタート画面用意してみた

これも別の名前でSceneを保存して中身を変えて作ってみた。

オブジェクトを触ったときに、処理を行う部分が少し厄介で、

マウスクリック時にRaycastと言われるもの(見えない)を飛ばして、当たったオブジェクトの名前がStartBtnだったら画面遷移

といったプログラムを書いた。

以下を参考にした

qiita.com