『Unity5ゲーム開発レシピ』「Part01 基本編 Chapter12 覚えておくと便利な基本機能」 学習記録

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

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

序文

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

W杯より宝塚記念和田竜二騎手が17年ぶりにG1勝利したほうが嬉しいです。
競馬も最近あんまり…どうでもよくなってるんですけど。

jockey.kankeli.net このサイトも軽くしたいなぁ

GitHub

github.com

進捗

  • Part01 基本編
    • Chapter11 演出を強化する
    • Chapter12 覚えておくと便利な基本機能

(学習時間:2時間)

コード実装部分

\Chapter1\Assets\Scripts\BattleManager.cs

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using UnityStandardAssets.ImageEffects;

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;

  public Camera resultCamera;

  public GameObject resultCameraObject;

  void Start()
  {
    battleStatus = BATTLE_START;

    timer = 0;

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

    score = 0;

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

    // ゲーム開始時はリザルト用カメラをオフにする
    resultCamera.enabled = false;

    // ゲーム開始時は効果をオフにする
    Camera.main.GetComponent<ColorCorrectionCurves>().enabled = false;
    Camera.main.GetComponent<DepthOfField>().enabled = false;

    resultCameraObject.GetComponent<ColorCorrectionCurves>().enabled = false;
    resultCameraObject.GetComponent<DepthOfField>().enabled = false;
  }

  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;

          // 勝利時にリザルト用カメラに切り替える
          resultCamera.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;
          }

          // 遷移可能状態になったらカメラの効果を有効にする
          if (messageWin.enabled == true)
          {
            resultCamera.GetComponent<ColorCorrectionCurves>().enabled = true;
            resultCamera.GetComponent<DepthOfField>().enabled = true;
          }
          else
          {
            Camera.main.GetComponent<ColorCorrectionCurves>().enabled = true;
            Camera.main.GetComponent<DepthOfField>().enabled = true;
          }
        }
        break;
      default:
        break;
    }
  }
}
  • その他実装部分

github.com

実行結果

www.youtube.com

感想

やったこと。

  • 勝利/敗北時のエフェクト実装

とりあえず基本編がこれで終了。
次回からはユニティちゃんを使う応用編に入っていくようだ。
よりTips的な要素が強くなっていくのかな?と思っているがあんまりよくわからない。

ちなみに基本編の最後となるChapter12は操作画面の使い方のTipsなどの内容だった。
通し番号が087から始まったので、「なるほど!基本編は100までで終わるのか!」と思って読み進めていったら、098で終わりやがった。
あと2つなんか頑張って考えろよ!

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

BGM

WAR WAR ZONE feat. CUEZERO / KREVA

www.youtube.com