mac PCとiPhone SEが手に入ったのでアルデスをiPhoneで実行してみた
iPhone買い替えたかったのとmacを購入できたのでせっかくなのでiPhoneで動かしてみよう!
自作ゲームがiPhoneでうご うご うごごごご pic.twitter.com/zo4ghWnyus
— Y__ (@Y__revSD) September 16, 2020
最適化すれば2千発はいけるだろ! pic.twitter.com/Aiyei1Z9Fb
— Y__ (@Y__revSD) September 16, 2020
とりあえず動いたと言えるレベルにはなった pic.twitter.com/k6xjMhVXeE
— Y__ (@Y__revSD) September 18, 2020
動いた。やったね!
開発環境の準備
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なりでiOSやmac向けのアプリ開発ができる開発環境。
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でのライティング適用
- シェーダもプラットフォーム別に記述する部分があるかもしれない
- 影
- クオリティセッティング触れるようにしたの、メニュー改修時に消しちゃってた(テヘ
- normalmapでのライティング適用
これから
CAVEのアケ移植スマホSTGのようにスワイプで相対移動、ボタンでショット切り替えを実装したい。
併せてアカブルのような触れている間ショット・2個押しでボムのようなスクリーンボタンが不要な操作も試してみたい。
スクリーンボタンが不要のショットレーザーボムのだし分けを考えたので。
でそれがうまくいったら短期間でアルデスのガワだけ変えて複数プラットフォームで外伝作品をだしたいな~ガワだけって言っても素材作成の負荷たかいとおもいますが