技術と趣味の亜空間

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

【Sign in with Apple】 Apple Developer ダッシュボードでのServices IDと秘密鍵の設定方法

Sign in with Appleを実装する上で必須なプロジェクトの設定を解説します。
今回は、主にApple Developerで必要な対応を紹介します。
※この記事の各種解説は2022年10月27日時点のものとなります。

続きを読む

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

Firebase logo

2022/2/11 追記

2022年1月31日のVersion 8.8.0にて修正されました。 firebase.google.com

概要

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