技術と趣味の亜空間

主にゲームプログラミングとその周辺に関する記事を不定期で上げていきます

【Unity】Firebase + Xcode13 で起動時にクラッシュする問題の対処法

Firebase logo

概要

UnityでFirebaseを入れている自分のプロジェクトをXcode13にアップグレード後、アプリをビルドすると起動時にクラッシュするようになってしまいました。
正確には該当アプリの初回起動後にプッシュ通知を許可、その後タスクキルして再度アプリを立ち上げると画面がブラックのままで進行不能になります。
どうやらFirebaseライブラリの問題であるらしいのですが、2022年1月11日現在まだ公式で修正されてはいない模様。
クラッシュの原因として、UnityFrameworkが読み込まれるよりも先にFirebase側のフレームワークが読み込まれてクラッシュしているみたいです。

続きを読む

InputFieldを押した時の入力受付状態になるタイミングをコードレスで変更する

Unity Logo

概要

新Input Systemの話ではありません。
今回はUnityのInputFieldにて、入力欄を押してから入力状態にするタイミングをプログラミング無しで変更する方法を解説します。

InputFieldの挙動について

まず、InputFieldの入力受付状態は「押した」瞬間になります。(コード的に言うと OnPointerDown()時)
普通は気になりませんが、これをリスト内の各セルに埋め込むとなるとスマホの場合困ったことになります。
具体例としてセーブスロットを挙げてみます。

セーブスロット例
写真はRPGツクールweb - オートセーブ機能ページより引用
この画面上でセーブスロット名を押すと名前を直接変えられるようにします。
……すると、スクロールした時にセーブ名の部分を押してしまうと入力受付状態となりスクロールできない問題が発生します
スマホだと仮想キーボードが出現してしまうのでユーザー体験として非常に良くありません。
今回はコードをいじらずに「指を押して離した」瞬間になるように挙動を変更させる方法を紹介します。

続きを読む

【Fork】ブランチの切替時にサブモジュールも自動的に更新されるようにする

自分はGitクライアントでForkを愛用しています。
昔はSourcetreeを使ってましたが動作が重くなる問題が煩わしくなり、より高速なForkに移行しました。

git-fork.com

サブモジュールを設定していると、ブランチを切り替えたときに差分が更新されないように初期設定でなっているため、ブランチを切り替えたらサブモジュールも合わせて変更してくれるように設定します。
変更は以下の通り:
ForkのPreferences -> General -> Update submodules automatically にチェックを入れる。

f:id:Goropocha:20211019164948j:plain

画像を上から下にかけて暗くさせる簡易シェーダー

概要

f:id:Goropocha:20210823122527g:plain
Imageを上から下にかけて黒くするだけの簡単なシェーダーを作成しました。
黒くする範囲と境界線のぼかしも調整できます。

2Dキャラクターの顔を隠すとか、シルエットだけにするみたいな目的で作成しました。

続きを読む

【MediaWiki】ダイナミック・ページ・リスト備忘録

概要

海外のWikiエンジンといえばMediaWiki だが、その機能の1つであるダイナミック・ページ・リストの利用例を備忘録的メモ。

使い方

利用には <DPL></DPL>{{#DPL:}} の2つの実装方法がある。
どちらも基本的には同じようなことができるが、決定的に違うこととして <DPL></DPL>{{PAGENAME}}等のテンプレートを表示フォーマットに埋め込むことができない。

{{#DPL:
|category = Target:{{{1|{{#replace:{{BASEPAGENAME}}|&#38;|and}}}}}
|namespace = Sub
|notcategory = Non Target Page
|allowcachedresults=true
|ordermethod=title
|mode=userformat
|format = ,{{ ²{#ifexist:²{#titleparts:%TITLE%|1|1}²|²{#titleparts:%TITLE%|1|1}²|²{#titleparts:%TITLE%|2|1}²}² ¦param=
²{#switch: %TITLE%
¦FugaFuga/Chapter1 = unique
¦#default = normal
}² }} ,,
|noresultsheader=There is no target.
}}

上記は {{Target List}} みたいな感じでテンプレート化しており、以下のことをしている:

  • Target:<Hogehoge> という名前のSub名前空間に属するカテゴリが設定されているページを全て取得する(ただしNon Target Pageカテゴリがあるページは除く)
    • このテンプレートを呼び出す際に、第一引数を自由に設定できるようにしている
      • 設定されてなければ表示したページの {{BASEPAGENAME}} を取得する
      • {{BASEPAGENAME}}名前空間名と末尾の下位ページの階層を除外したページ名(Help:Title/Foo/BarページではTitle/Fooを返す)
  • &は残念ながらうまくパースができない仕様なので、andに変換している
  • allowcachedresults をオンにすることで取得結果をキャッシュする
    • これをしないとページ読み込みを大幅に遅らせることがある
  • ordermethodでページのタイトル順に並び替え
  • modeで表示フォーマットを自作タイプに指定
  • formatで表示の仕方を設定
    • 「format=全リストの最初,各リストの最初,各リストの最後,全リストの最後」という形式
      • 今回は各リストの最初だけほしかったのでそれ以外は無記述でパス
    • ページの先頭と一致する名前のテンプレートを呼び出している
    • 例)Sub:Hogehoge/Chapter1, Sub:FugaFuga/Chapter1, Sub:Zero/One/Chapter1
    • 名前空間を含まない記事名(%TITLE%)を #titleparts でスラッシュで分割する。このとき、最初のスラッシュ部分が階層ではなく名前の一部である場合も考慮し、#ifexist で名前と一致するか判定し、一致しない場合は分割しないようにしている
      • スラッシュ2つが名前の場合は考慮されていない
    • ページ名と同じ名前のテンプレート内にはパラメータが指定できるようになっている
      • 引数param には {{#switch}} 構文で一致するページ名のページで表示される場合、特殊な設定のテンプレートが適用されるようになっている
    • DPL内のテンプレート in テンプレートする場合 {{}}²{}² に代替する
    • 同様に |¦ に代替する
  • 検索結果0件のときはnoresultsheaderで「There is no target.」と表示するように指定

参考記事

ヘルプ:ダイナミック・ページ・リスト | コミュニティセントラル | Fandom Extension:DynamicPageList3 - MediaWiki

Appleリジェクト対策 - 掲載スクショの画像比率には気をつけろ!

概要

ゲームアプリをAppleStoreの審査に提出したところ、以下のような内容でリジェクトされた。

Guideline 2.3.3 - Performance - Accurate Metadata
We noticed that your screenshots do not sufficiently show your app in use. Specifically, your iPad screenshots reflect an iPhone image stretched out to appear to be an iPad image.
To help users understand your app's functionality and value, your screenshots should highlight your app's core concept. For example, a gaming app should feature screenshots that capture actual gameplay within the app.
Next Steps
Please revise your screenshots to ensure that they accurately reflect the app in use on the supported devices.
Keep in mind the following requirements:
- Marketing or promotional materials that do not reflect the UI of the app are not appropriate for screenshots.
- The majority of the screenshots should highlight your app's main features and functionality.
- Confirm that your app looks and behaves identically in all languages and on all supported devices.
- Make sure that the screenshots show your app in use on the correct device. For example, iPhone screenshots should be taken on iPhone, not on iPad.
Please see attached screenshots for details.
1, 2, 3, 4
Since your App Store Connect status is Metadata Rejected, we do NOT require a new binary. To revise the metadata, visit App Store Connect to select your app and revise the desired metadata values. Once you've completed all changes, reply to this message in Resolution Center and we will continue the review.

要約すると、ストアに掲載しているiPadのスクショの画面比率がiPhoneなので変えて下さい、というもの。
画像サイズ自体はiPadのサイズにしていたのだが、その画像の中に埋め込んでいたスクショの比率が16:9だったので駄目だった模様。
画像そのものの加工自体は問題ないので、ちゃんと中のスクショもiPad比率で撮っておこう。