同人ゲームサークル reverse snare 開発ブログ

主に2DSTGを作ってる同人ゲームサークル reverse snareの開発記、イベント・作品宣伝を行うブログです。

mac PCとiPhone SEが手に入ったのでアルデスをiPhoneで実行してみた

iPhone買い替えたかったのとmacを購入できたのでせっかくなのでiPhoneで動かしてみよう!

動いた。やったね!

開発環境の準備

Unity 2019 4.7f1(LTS)

winと同じバージョン。
UnityHubからインストールしていない場合、後からプラットフォーム別プラグインを追加するときはインストーラをもう一度起動して追加する。

Visual Studio 2019 for Mac

Unityインストール時のオプションで選択可能。
この記事の作業中はこちらを使ったが、結構不満がある。(すべての参照検索で検索中...のまま進まないとか、キーバインドVSCodeメインにしてもいいかもしれない。

VScode

win機からsetings.jsonをコピペして設定完了。
拡張はそんなに入れてないので手動で入れる。
変更ファイルの差分が見やすいのでVS2019と併用する。

Xcode

UnityでiOSビルドするとXcodeプロジェクトが生成されるので、こちらでappをビルドして実機やシミュレータに突っ込む。
本来はSwiftなりObj-CなりでiOSmac向けのアプリ開発ができる開発環境。

winからmacへデータ転送

最初はzipしたプロジェクトフォルダをUSBで転送して解凍失敗して、それは7Zipで圧縮したものなのでwinデフォルトのzipと両方用意して渡すようにすると解凍できた。最初は。
2回目以降は両方失敗するようになり、mac側で圧縮解凍ソフト用意したけどダメでした。
同LAN内で直接ファイルをやり取りできれば非圧縮でファイルコピーできるのでは?と思ったんで「mac win ファイル共有」あたりで検索。
https://support.apple.com/ja-jp/guide/mac-help/mchlp1660/mac
http://iphone.f-tools.net/Question/PC-File-Sharing.html
これでデータの受け渡しはOK。文字化けなどの問題もなし。
macに持ってきたときに画像ファイルなどが変更としてソース管理に上がってきてしまう。ひとまず、主な開発作業はwinで行い、iOSアプリの書き出しが必要になったときにプロジェクトをmacに転送。macで編集が必要あった場合は編集したファイルのみwinに転送し取り込む。取り込んだらmacの編集は破棄。ひとまずこの運用で。

ポーズメニューだけのプロジェクトで起動確認

esc押したときのメニューね

iOS実機で実行するまでの手順

xcodeのアカウント設定(一度でOK)

xcodeの環境設定でiTunesアカウントを設定する。
(AppStoreでのアプリリリースにはApple Developer Programに登録したアカウントが必要だが、まだリリースしないので普段使いのアカウントを設定。)

Unityでxcodeプロジェクト生成、xcodeでappをビルド

UnityでiOSビルドすると、xcodeプロジェクトが生成されるので、xcodeで起動する。
プロジェクト設定(xcode左のファイル一覧のrootの項目)の Signing & Capabilities から automatically manage signingを選択、その後teamのプルダウンから環境設定で設定したiTunesアカウントを選択。
この状態でiOSバイスmacに有線接続すればxcodeで実行先をデバイスに設定できるので、いよいよ実行!

プラットフォームによって読み書き可能なディレクトリに制限がある

win standaloneのアプリなら次のメソッドで実行ディレクトリにdatフォルダが出来上がる。
Directory.CreateDirectory("dat");
この中に設定ファイルやキーコンフィグのファイルを保存していた。

PCのアプリなら実行ディレクトリにフォルダ作成で問題ないが、その他のプラットフォームではファイルの読み書きができるディレクトリは限定される。
使用可能なディレクトリは、次の内容で取得できる。 UnityEngine.Application.persistentDataPath
ここにフォルダを作成し、ファイルを生成した。
Directory.CreateDirectory(UnityEngine.Application.persistentDataPath + "/dat");

プラットフォーム別の実行処理分岐

#if で書くやつ。UNITY_EDITORやDEVELOPMENT_BUILDを指定する時と同じ。
IDEでは現在の環境しかサジェストされないので公式ドキュメント https://docs.unity3d.com/ja/2018.4/Manual/PlatformDependentCompilation.html からコピペがよい。

#if UNITY_EDITOR || UNITY_STANDALONE_WIN
    Debug.Log("エディタかwinアプリで実行時に動作");
#elif UNITY_IOS
    Debug.Log("iOSで実行時に動作");
#endif

ゲームパッドでメニュー操作できたので確認完了

読み書きの問題が終わったところで、無事動いた。
iOS13から箱1コンやPS4コンをBlueTooth接続できるので接続したうえでアプリを起動すれば操作可能。
大体の環境でコントローラが左スティックにAxis1,2が設定されているのでとりあえず動く。
しかし、問題は方向キーで…方向キーにボタンが割り当たっているっぽい。
まだ調べていないが1方向に対して軸一つ、ボタンも同時入力されている????
PCでは方向キーがボタン扱いのコントローラを使わせない想定だったが、iOS向けにリリースするのであれば対応せざるを得ないかもしれない。

また、ボタンも連続で押しはじめ判定になっている。チョン押しじゃないとメニュー階層が一気に進む。
この時は抜き出した際に一部入力処理を書き直しているのでそのせいだと思っていたが、実際にアルデス本体が実行できた時にも発生した。

アルデスのプロジェクト起動確認

まずmacのUnityEditor上で動かないのでeffekseerをとりあえず外す

Effekseerがmacの描画ライブラリのmetalに対応していない的なエラーだったと思う。
あまり調べていないがmacに対応したバージョンは割と最近だったはず。

これまでもEffekseerで用意したエフェクトは描画レイヤーの制御ができないので今後も使うか悩んでいた。
呼び出すオブジェクトのlayerに依存しているはずだが、弾幕やアイテムの描画順はsortingLayerで指定していたため、書きたい描画タイミングを指定できなかった。

エフェクト量産するにあたってEffekseerが必要になったらまた入れるとして、今は外すことにした。 ちなみに使っていた場所は近接のエフェクトと溜めボムです。

外部プラグインは対応するOSバージョンを確かめよう!

これでエディタ上ではwinと同様に動作するようになった。

iOSビルド。カクツきがあるが、ゲーム動作した

メニューの抜き出しプロジェクトで確認したファイル読み書き権限について対応してiOSビルドしたら起動>クレ投入してゲーム開始までできた。
1番目のツイートの段階。
内容としてはADX2LEを使用した音声再生がされない。
また、敵の撃破時や一部の敵の攻撃時にnullポで短時間フリーズする。

音が出ない

キャラセレのインタラクティブミュージックの試作Prjを移植し確認。 結構ググって、ビルド後の設定が抜けているとか情報を見たけど最終的にはプラグイン更新で動いた。

外部プラグインは対応するOSバージョンを確かめよう!(2回目)
ついでにIMの動作確認もできてちょうどええわい。

ほかのエラー対処

これもファイル保存のディレクトリの話でした♨
設定ファイル、キーコンフィグファイルの読み書きだけ対応してゲーム開始はできたが、ほかにもファイル読み書きするクラスはあり…
ランキングとリプレイの対応が漏れてStartの途中でコケていたのでエフェクト用の一部リソースが取れず、敵撃破のエフェクト発生時などでnullポになっていたようだ。

nullポのフリーズを解消したら普通に動くようになった!

3番目のツイートの段階。録音はできてないけどBGM/SEともに再生されるようになりました。

アルデスで実装した要素がiOSでも動く!

エントリーポイントが1つの構成でも問題なく動く

UnityイベントのUpdateを実装しているスクリプトが一つ(で、ゲーム動作全体を制御する構成)でも動く。
まあアカブルで実現できるのを見てからUnityに来たので、できないはずがないが。

その他アニメ再生なり敵の動作リソース管理などもロジック部分は普通に動く。

KeyCodeを使ってゲームパッドのボタン押下状況の取得ができる

これ使ってキーコンフィグ作ってたからな。 ほかにもInputSettingにAxisをすべて列挙して入力方向をとる方法もうまくいっている。

問題はボタン長押し時の連射判定で、入力処理のどこが悪いか調査しなければ。

  • レーザー(A)長押しはできる。
  • 烈怒(A+C)はソード(A押しながらC短)に化ける。
  • メニューの決定が一気に階層すすんでしまう。(決定はレーザーボタンなんだが?????)

FPSを指定して動作できる(ゲーム中に変更可)

Application.targetFrameRate = 60;
疑似処理落ちはこの値を下げて表現してます。 Effekseer製エフェクトを動作させるときは併せてTime.timeScaleも下げたり。

FPS下げたときの入力遅延がNAOMI斑鳩のボス爆発中の遅延に近い。
無線接続してるので素でも遅延が大きいかも?
FPSは60固定で内部ロジック通す/通さないの切り替えにすべきかも。

その他

  • Spriteのtransform変形やLineRendererのなどの表示範囲が変わる系が問題なく描画できている。
  • 低速移動の残像シェーダが問題なく描画できている。
  • 確認できなかったこと
    • normalmapでのライティング適用
      • シェーダもプラットフォーム別に記述する部分があるかもしれない
      • クオリティセッティング触れるようにしたの、メニュー改修時に消しちゃってた(テヘ

これから

CAVEのアケ移植スマホSTGのようにスワイプで相対移動、ボタンでショット切り替えを実装したい。
併せてアカブルのような触れている間ショット・2個押しでボムのようなスクリーンボタンが不要な操作も試してみたい。
スクリーンボタンが不要のショットレーザーボムのだし分けを考えたので。

でそれがうまくいったら短期間でアルデスのガワだけ変えて複数プラットフォームで外伝作品をだしたいな~ガワだけって言っても素材作成の負荷たかいとおもいますが