Unityで2D STGを作る(2日目)
- ボスと敵弾を作成
- 当たり判定を追加。敵弾同士などで衝突判定をしないようレイヤ追加
参考:Unity - Unityで特定のオブジェクトと衝突したときだけisTriggerをtrueにしたい|teratail
各オブジェクト毎にレイヤを設定し、「Edit」→「Project Settings」→「Physics 2D」の「Layer Collision Matrix」で衝突可能な組み合わせを設定できる
Player,PlayerShot,Bomb,Enemy,EnemyShotを追加 - Collidarのscaleがピクセルになるよう、カメラのscale、テクスチャのPPUを修正
scaleを画面の縦幅/2の値に、PPUを1にした - 被弾時のSEを追加
その3 スクリプト内だけでSEを鳴らすを参考に、スクリプトのみで再生できるように
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();
- タイトル画面、クレジット画面を作成。シーン遷移を作成
基本は0から2Dアクションバトルゲームを作ろう!⑧ビルドをしてゲームを遊んでみようを参考に。
ボタンをキーボード選択で選択できるように
参考:【Unity】キーボードからカーソル選択するセレクトリストを作る(1) - ペンギンとザリガニ- ButtonのNavigationをVerticalに
- EventSystemのFirst Selectedに初期選択されるボタンを設定
昨日とあまり変わりはないが画面キャプチャ