『Unity5ゲーム開発レシピ』「Part01 基本編 Chapter10 シーンを遷移させる」 学習記録

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

序文

『Unity5ゲーム開発レシピ』14日目。

起きようと思った瞬間ふくらはぎがつって起きられなくて、そのまま二度寝して午前中つぶしました。

GitHub

github.com

進捗

  • Part01 基本編
    • Chapter10 シーンを遷移させる

(学習時間:2時間)

コード実装部分

\Chapter1\Assets\Scripts\BattleManager.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class BattleManager : MonoBehaviour
{
  int battleStatus;

  const int BATTLE_START = 0;
  const int BATTLE_PLAY = 1;
  const int BATTLE_END = 2;

  float timer;

  public Image messageStart;
  public Image messageWin;
  public Image messageLose;

  // 敵を倒した数。Enemyスクリプトでカウントアップ
  public static int score;

  // クリア条件となるスコア
  int clearScore;

  void Start()
  {
    battleStatus = BATTLE_START;

    timer = 0;

    messageStart.enabled = true;
    messageWin.enabled = false;
    messageLose.enabled = false;

    score = 0;

    // 敵の最大生成数をクリア数にする
    clearScore = EnemyInstantiate.instantiateValue;
  }

  void Update()
  {
    switch (battleStatus)
    {
      case BATTLE_START:
        timer += Time.deltaTime;

        // 時間経過でメッセージを消して状態移行
        if (timer > 3)
        {
          messageStart.enabled = false;
          
          battleStatus = BATTLE_PLAY;

          timer = 0;
        }
        break;
      case BATTLE_PLAY:
        // スコアが出現数に到達したら勝利
        if (score >= clearScore)
        {
          battleStatus = BATTLE_END;
          messageWin.enabled = true;
        }

        if (PlayerAp.armorPoint <= 0)
        {
          battleStatus = BATTLE_END;
          messageLose.enabled = true;
        }
        break;
      case BATTLE_END:
        timer += Time.deltaTime;

        if (timer > 3)
        {
          // 動きを止める
          Time.timeScale = 0;

          if (Input.GetButton("Fire1"))
          {
            SceneManager.LoadScene("Title");

            // 動きを再開する
            Time.timeScale = 1;
          }
        }
        break;
      default:
        break;
    }

  }
}
  • その他実装部分

github.com

実行結果

www.youtube.com 酔うかも。閲覧注意。
この戦法以外で勝てる気がしない。

感想

やったこと。

  • タイトル画面の作成
  • ゲームクリア・ゲームオーバー条件の実装
  • ゲームクリア・ゲームオーバー画面の実装

エネミーのプレイヤー追跡アルゴリズムが単純だから、ひたすら動き回れば被弾確率がかなり低くなることに気づきました。
結果、動画みたいなやり口になってます。

今までも結構あったんですけど、参考書に誤植が目立ってきましたねぇ。
"UI Text"と書くべきところを"UI Image"って書いてる!と思ったら、数ページ後には"UI Image"と書くべきところを"UI Text"と書いてたりします。笑

サンプルゲーム自体は参考書にあるまじき完成度なだけに惜しいです。
あーなんか頭ぐるんぐるんしてきた。

カロリーメイトください。

BGM

嘘と煩悩 / KREVA

www.youtube.com ラップやれラップ