daybreaksnow's diary

私を私と呼びたい

Unityで2D STGを作る(2日目)

soundPlayer = new GameObject("SoundPlayer");
audioSource = soundPlayer.AddComponent<AudioSource>();
AudioClip clip = (AudioClip)Resources.Load("Audio/" + audioName);
audioSource.PlayOneShot(clip);
  • 被弾時に徐々に消滅→画面下から出現、となるように
    PlayerにStateパターンを適用。 通常時→消滅中(くらいボム待ち)→復活中、の3ステートに
    ・PlayerのUpdate
    void Update()
    {
        state.Update();
        // 無敵時間制御
        if (invinsibleTime > 0)
        {
            invinsibleTime--;
            if (invinsibleTime == 0)
            {
                //透過状態をもとに戻す
                setAlpha(1.0f);
            }
        }
        //ボム時間制御
        if (bombModeTime > 0)
        {
            bombModeTime--;
        }
    }

・消滅待ちのState

        public void Update()
        {
            // ボムのみ使用可能
            if (player.isUseBomb())
            {
                player.bomb();
                // サイズをもとに戻す
                player.transform.localScale = new Vector3(1, 1, 1);
                // 通常モードに戻す
                player.state = new NormalState(player);
                Debug.Log("食らいボム成功");
                return;
            }
            // 徐々にサイズを小さくする。猶予は20Fくらいとして、0.05ずつ減らす
            Vector3 newScale = new Vector3(player.transform.localScale.x - 0.05f, player.transform.localScale.y - 0.05f, player.transform.localScale.z);
            // 消滅したら復活モードに移行
            if (newScale.x <= 0)
            {
                // サイズをもとに戻す
                player.transform.localScale = new Vector3(1, 1, 1);
                // 画面外の中央下に配置
                float x = (GameManager.getLeftByScreen() + GameManager.getRightByScreen()) / 2;
                float y = GameManager.getBottomByScreen() - GameManager.GAME_AREA_HEIGHT / 8;
                Vector3 newPos = GameManager.toWorldPoint(x, y);
                player.transform.position = newPos;
                if (player.life > 0)
                {
                    // 残機を減らす
                    player.life--;
                    gameManager.loseLifeIcon();
                    // ボム数を戻す
                    gameManager.clearBombIcon();
                    player.initBombCount();
                    // 復活モードに移行
                    player.state = new RecoverState(player);
                }
                else
                {
                    //タイトルに戻る
                    SceneManager.LoadScene("TitleScene");
                }
                return;
            }
            player.transform.localScale = newScale;
            Debug.Log(player.transform.localScale);
        }

・復帰中のState

        public void Update()
        {
            // 少しずつ画面上に上がる
            Vector3 move = new Vector3(0, speed, 0);
            player.transform.Translate(move);
            // 規定位置まで上がったら通常モードに戻す
            if (player.transform.position.y > baseY)
            {
                player.state = new NormalState(player);
            }
        }
  • 残機、ボムの残数の表示を追加
  • ボムの発射処理と敵弾の消滅処理を追加
  • メインシーンのBGM追加
            AudioSource mainBGMSource = soundPlayer.AddComponent<AudioSource>();
            mainBGMSource.loop = true;
            mainBGMSource.volume = mainBGMSource.volume / 5; //BGMなので小さめに
            AudioClip clip = (AudioClip)Resources.Load("Audio/" + "Main");
            mainBGMSource.clip = clip;
            mainBGMSource.Play();

昨日とあまり変わりはないが画面キャプチャ

f:id:daybreaksnow:20200725002626p:plain