daybreaksnow's diary

私を私と呼びたい

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

  • こまごまとした修正
    • スペカ名を右上に表示するように
    • ボス撃破エフェクト追加
    • ボス撃破後、少し待ってからクリア画面に行くように
    • ボスマーカーを追加
  • スペカ2実装。時止め処理追加
    単にグローバルなところに時止めフラグを追加し、ボス以外のUpdateでそのフラグを見て何もしないだけ。
    見栄えを考慮し、時止め中はボムが敵弾を消さないように(次にUpdateで処理をする際にDestroyするように)
  • WebGL用のビルド設定を追加
    ここで問題が発生。
    何故かProject Setting...→Player→Resolutionで指定したサイズになってくれない。
    ChromeでもFireFoxでも同じ。
    開発者ツールで見ると、gameControllerのdivのwidth、heightは指定したサイズ(1024*768)になっているが、Canvasのサイズが1163、872になってしまっている。
    Standaloneでビルドしてexeで実行すると意図した画面サイズになる。 これはググっても同様の症状が見当たらず解決していない。
    暫定対応として、以下を行った
  • index.htmlにCanvasのサイズ調整を行うボタンを追加
    参考:UnityのWebGLビルドのHTMLテンプレート|npaka|note WebGLTemplatesフォルダを作成し、ビルド時に任意のhtmlを使えるように。
    ここにボタンを配置し、クリック時に以下が実行されるように
function resize(canvas) {
    var canvas = document.getElementById('#canvas');
    canvas.width = 1024;
    canvas.height = 768;
    canvas.clientWidth = 1024;
    canvas.clientHeight = 768;
}
  • タイトルからゲーム開始時にScreen.widthと想定する幅を比較して違ったらダイアログを表示し、リサイズボタンを押させる
    上記の対応でゲーム部分は動作するが、ボタンの当たり判定がずれるという問題がある。
    これは致命的ではないので無視した。
    ただし、キーボードで常に選択できるようにはした
        if (UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject == null)
        {
            UnityEngine.EventSystems.EventSystem.current.SetSelectedGameObject(titleButton.gameObject);
        }

出来上がったのが以下

https://daybreaksnow.github.io

クオリティを上げるべきところはたくさんあるが、今回はマリン船長の誕生日お祝い企画ということで、いったんここで終わり。