daybreaksnow's diary

私を私と呼びたい

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

マリン船長(Marine Ch. 宝鐘マリン - YouTube)にはまって何かコンテンツを作ろうと思い、学生時代に作ったことのあるSTGならサクッと作れるだろう、ということで開始。船長は東方好きなのでSTGシナジーもあるし。

利用するUnityのバージョンは2019.4.4。
事前知識としては以下のブログを読んだ程度。
Unityで0から2Dアクションバトルゲームを作ろう!①ゲーム画面の作成

今日やったことは以下

再配布禁止の素材を使うこともあると思うので、private repositoryで作成した

    private void fixPosition()
    {
        // 左端
        float width = GetComponent<SpriteRenderer>().bounds.size.x;
        float left = transform.position.x - width / 2;
        if (left < gameManager.GAME_AREA_LEFT)
        {
            transform.position = new Vector3(gameManager.GAME_AREA_LEFT + width / 2, transform.position.y, transform.position.z);
        }
        //右端
        float right = transform.position.x + width / 2;
        if (right > gameManager.GAME_AREA_RIGHT)
        {
            transform.position = new Vector3(gameManager.GAME_AREA_RIGHT - width / 2, transform.position.y, transform.position.z);
        }
        // 上端
        float height = GetComponent<SpriteRenderer>().bounds.size.y;
        float top = transform.position.y + height / 2;
        if (top > gameManager.GAME_AREA_TOP)
        {
            transform.position = new Vector3(transform.position.x, gameManager.GAME_AREA_TOP - height / 2, transform.position.z);
        }
        // 下端
        float bottom = transform.position.y - height / 2;
        if (bottom < gameManager.GAME_AREA_BOTTOM)
        {
            transform.position = new Vector3(transform.position.x, gameManager.GAME_AREA_BOTTOM + height / 2, transform.position.z);
        }

    }
  • 自機の弾画像作成、自機の弾発射処理作成
    updateの処理は単純にこれだけ
        //画面上にしか行かない前提
        Vector2 moveVector = new Vector2(0, speed);
        transform.Translate(moveVector);
        // 完全に画面外に出たら破棄
        if (!GetComponent<Renderer>().isVisible)
        {
            Destroy(gameObject);
        }
  • 背景画像のゲーム領域を透過するように
    弾がゲーム領域外に描画されないよう、ゲーム領域背景→プレイヤー等→全体背景と描画されるように。そのために全体背景のゲーム領域部分を塗りつぶして透過させた

ここまでの画面キャプチャはこんな感じ

f:id:daybreaksnow:20200723233033p:plain