こんにちは!元気です。
今回はVRChatのワールドギミックの解説と導入提案(無料)の記事になります。
一般の方向けの用語解説などはありませんのであしからず・・・!
VRChatの鍵の技術
良い感じの鍵、欲しくないですか?
[ 画像:VOLT Dance Club / DigitrevX様 (※パスワードは無いです)]
VRChatのワールドで特別な部屋にロックを掛けたい場合、鍵が必要になります。
今回作ったワンタイムパスワードロックシステム(OTP方式)は現行手法のデメリットを軽減もしくは解決する目的で作りました。
ただ現行手法にもメリット・デメリットがあるため、まずはそれらを紹介します。
なお、VRChat公式のモデレートツールガイドライン(規約に準ずる)についても後述で触れます。
現行手法
主に3つの手法があります。
① 固定パスワード方式:
ワールド製作者が決めた秘密のパスワードをパスした人のみアンロック。
メリット:
メンバーの増減に関係なく、パスワードを通知されたメンバー全員がアンロックできます。
デメリット:
セキュリティが他方式と比べて低いです。総当たり攻撃でパスを攻略されて、掲示板などでワールドURLと共に公開されてコンテンツが不特定多数に漏洩してしまうことがあります。実例を何件も見ました。
(メンバーが漏洩した可能性も排除できないので精神衛生上も良くないですね)
VRChatのユーザー名でホワイトリストを作って対象のみアンロック。
VRChatのワールドに入場したプレイヤー自身のディスプレイネームはAPI(Networking.LocalPlayer.displayName)を用いて取得することができ、それとホワイトリストと照合してアンロックする仕組みです。
ディスプレイネームはVRChat上で一意(重複しない)のためホワイトリストに無い人が名前をなりすましてアンロックすることはできません。
メリット:
パスワードが存在せず入力の手間がありません。また漏洩の問題も無くセキュアです。
デメリット:
ホワイトリストの更新の都度ワールドを再アップロードするため、メンバーの増減に対してワールド製作者の負担が掛かること、また即応性の問題があります。小規模のコミュニティ向けといえます。(ただUnityでのリスト更新とワールドのアップロードを定時実行するよう自動化できれば負担に関してはこの限りではありません)
③ 動画プレイヤー方式:
VRChatのユーザー名でホワイトリストを作り、シリアライズ→画像→動画にエンコードしてアップロード、VRChat上で動画プレイヤーからカメラで画像を取得してホワイトリストにデコード、アンロック。
VRC名の収集と動画エンコード、サーバーアップロードの自動化部分は実装難度高めです。(自動化しないと②の手法のワールド更新の手間との比較になります)中~大規模のコミュニティ向きと言えます。
文字列の動画取得についての技術はこちらの記事で紹介されています。
【VRCAdvent Calendar】VRChatへ外部から文字列を渡すよ(C# only) - 神城デジタル事務所
メリット:
パスワードが存在せずセキュアで入力の手間がありません。またメンバー増減の反映は動画の更新で行えるのでワールドの再アップロードが不要です。
デメリット:
動画プレイヤーは仕様のアップデートが多く対応のためにワールド更新が必要なことがあります。またUntrustedなURLを避ける場合はyoutubeなどのアップロード頻度の制限からメンバー増減の即応性が遅れる場合があります。さらに動画プレイヤーはまれに読み込みを失敗するため安定動作のためには実装に工夫が必要です。
先に挙げたホワイトリスト方式ですがメンバーがほとんど増減しない用途で有ればシンプルかつ強固で有効です。この用途ではOTP方式よりも適しているためギミックを作りました。良ければお使いください。
www.dropbox.com
なお、VRChat公式のモデレートガイドラインの対応については配布物のマニュアルの序章に記載しているので気になる方はご参照ください。同様の内容をOTPの運用マニュアルにも記載しています。
OTP方式:
今回作成したOTP方式は中~大規模のコミュニティに適します。
メンバーはアンロックの際、discordのbotからパスワード(PIN)を取得してVRChatで入力し開錠します。
メンバーの増減は自動で即時反映され、ワールド再アップロードの必要はありません。
続きを読む