メインコンテンツまでスキップ

ロール

ロールは Security System の中核となる構成要素です。各ロールには名前、色、そして Editor 上で一度だけ設定する一連の挙動があります — ワールドの実行中に作成したり再定義したりすることはできず、実行時にプレイヤーへ 割り当てる ことだけができます。

ロールは SS_RolesManagement スクリプト上で、Inspector の並べ替え可能なリストを使って定義します。1 つのワールドにつき 最大 32 個のロール を定義できます — その理由については下記の 定数 を参照してください。


Defining a Role​

SS_RolesManagement の Roles リストにある各エントリには、以下のフィールドがあります。

フィールド型説明
Role Namestringロールの表示名です。UI 全体、通知、そして名前でロールを検索する他のスクリプトから使用されます。
Child Roleロールポップアップこのロールが要求する子ロールです — このロールを付与すると、その子ロール、さらにその子の子ロール……というように連鎖して付与されます。要求がない場合は None です。詳細は下記の ロール階層 を参照してください。
Passwordstringこのロール用の 4 桁のキーパッドパスワードです。空欄の場合、そのロールはキーパッドから付与できません。大文字と小文字は区別されます。
Persistentboolプレイヤーがこのロールを一時的に保持している状態でワールドを離れた場合、同じ インスタンスに再参加すると自動的に元に戻ります。永続的な保持(ホワイトリスト、インスタンスオーナー)には適用されません — それらはどのみち参加のたびに再付与されるためです。
Two Factorboolロールが実際に付与されるには、ホワイトリストへの登録 と 正しいキーパッドパスワードの入力の 両方 が必要になります — どちらか片方だけでは不十分です。
Keypad Permanentbool有効にすると、キーパッドからこのロールを付与した際に、通常の一時的な付与ではなく永続的な付与(パネルやキーパッドから取り消せない状態)になります。
Layerint同じ非負のレイヤー番号を共有するロール同士は同時に保持できません — 1 つを付与すると、そのプレイヤーが現在保持している同じレイヤー内のロールが自動的に入れ替わります。デフォルトの -1 はレイヤーなしを意味します。詳細は下記の ロールレイヤー を参照してください。
Is Securityboolこのロールの保持が「security」とみなされるかどうかです — 管理パネルから いずれかの プレイヤーの いずれかの ロールを付与・剥奪するために必要です。
Login SoundAudioClipこのロールを保持するプレイヤー(保持しているロールの中で最も上位のものとして)が参加した際に、共有のログインオーディオソースを通じて再生されます。
ColorColorロール一覧 UI、通知、キーパッドの結果テキストで使用されます。
Spawn PointTransformこのロールを保持するプレイヤーが参加時にテレポートされる場所です。
Use URL Whitelistboolホワイトリスト URL から取得したこのロール向けのエントリを受け付けるかどうかです。手入力されたエントリには影響しません。
For Instance Ownerbool現在のワールドインスタンスを作成したプレイヤーに、自動的かつ永続的に付与されます。
Player Tagタグポップアップこのロールを保持している間、プレイヤーの頭上に自動的に表示される Player Tags のタグ、またはなしです。Player Tags を参照してください。
警告

ホワイトリストのエントリ(手入力・URL 取得のいずれも)はロールを 名前 で参照しており、インデックスでは参照していません。ロール名を変更すると、その古い名前を参照している既存のホワイトリストエントリは黙って一致しなくなります — Inspector では孤立したエントリに (missing) という印が付きますが、自動的には修正されません。ロールの並べ替えや削除は安全に処理され、手動での修正は必要ありません。

管理パネルの再表示について

プレイヤー管理パネル は完全にモジュール化されており、このリストに合わせてロールの列を自動的に追加・削除しますが、それはパネル自身の Inspector が再描画されたときだけです。ここでロールを追加・削除するたびに、ヒエラルキー内の _securitySystemUI GameObject(SS_SecuritySystemUI を保持しているもの)をクリック して、Inspector を再描画させ、パネルを再構築して変更を反映させてください。


Role Hierarchy (Parent/Child)​

ロールの Child Role は、最大でも 1 つの別のロールを指し、木構造ではなく連鎖(チェーン)を形成します — 各ロールが持てる子ロールは最大で 1 つです。

  • ロールの付与は下方向に連鎖します: 「Security」(「Access」を要求する)を付与すると、プレイヤーがまだ持っていなければ「Access」も自動的に付与されます。この付与で永続的になれるのは、元々付与されたロールだけです — 連鎖によって巻き込まれた子ロールは、上位の付与が永続的であっても常に一時的なままです。
  • ロールの剥奪は上方向に連鎖します: ロールは、その要求元なしには保持できないため、「Access」を剥奪すると「Security」(さらにそれを要求する他のロールすべて)も剥奪されます。「Security」を剥奪しても「Access」は剥奪 されません — 「Access」は単独でも存在できます。
  • 永続性については全か無かです。 連鎖を満たすために 永続的な ロール(ホワイトリスト、インスタンスオーナー、キーパッド経由の永続付与)を剥奪する必要がある場合、剥奪全体が拒否されます — 何も変更されません。元々剥奪を依頼したロールも含めてです。
  • 子ロールを直接付与することを妨げるものは何もありません。 ロールの Child Role 設定が管理するのは付与・剥奪の連鎖時の挙動だけであり、誰が保持できるかではありません — どのロールでも、その親ロールを保持していないプレイヤーに対してパネルから直接オンにできます。

Role Layers​

上記のロール階層とは 別の、独立した仕組み で、一群のロールを互いに排他的にするためのものです — 典型的な例としては、プレイヤーが常に 1 つしか保持すべきでない、入れ替え可能な「職業」ロールの集合が挙げられます。

  • グループ内のすべてのロールに同じ非負の Layer 番号を設定します。 同じレイヤーを共有するロール同士は同時に保持できません。この仕組みは任意の人数のグループに対応しており、3 つ以上の互いに排他的なロールも、2 つの場合と同じくらい簡単に設定できます — 明示的なペア設定は不要だからです。
  • 付与するとラジオボタンのように自動で入れ替わります。 プレイヤーがすでに保持しているロールと同じレイヤーを共有するロールを付与すると、まず現在保持しているロールが自動的に剥奪され、その後新しいロールが付与されます — 新しいロールを付与する前に古いロールを手動で外す必要はありません。
  • 例外: 永続的なロールはこの方法で押し出すことができません。 現在そのレイヤーを占めているロールが永続的(ホワイトリスト、インスタンスオーナー、またはキーパッド経由の永続付与)である場合、入れ替えは拒否されます — それを引き起こすはずだった付与自体も行われません。
  • 管理パネルと Security Keypad の両方から機能します。 すでに占有されているレイヤー内のロールのパスワードを入力すると、パネルからオンに切り替えたときとまったく同じように入れ替わります。
  • レイヤーを共有する 2 つのロールが Child Role も共有している必要はなく、逆もまた同様です — Child Role を共有しているだけでは、ロール同士が互いに排他的になることはありません。例えば「DJ」と「Bartender」がどちらも「Access」を子ロールとして要求する(どちらを付与しても「Access」も付与される)一方で、両方が Layer 0 を共有していれば、どちらか一方しか同時に保持できないようにすることができます。

Security Permission​

Is Security フラグが付いたロールを保持していると、管理パネルから誰でもロールを付与・剥奪できるようになります — Security ロールを持たないプレイヤーもパネルを閲覧はできますが、トグルを操作しても何も起こりません。

パネル自体の利用に Security ロールが必要なため、新しいワールドで最初に Security 権限を持つプレイヤーは、何か別の方法でそれを受け取る必要があります: ホワイトリスト、インスタンスオーナーへの自動付与、またはキーパッドです。キーパッドから自分自身の一時的なロールをログアウトする操作だけは例外で、Security ロールの保持を必要としません — これはセルフサービスであり、常に機能します。


Constants (SS_Config)​

いくつかのグローバルな上限値は、Inspector には公開されず、SS_Config スクリプト上の定数として定義されています。変更するには、スクリプトを直接開いてコード内の値を編集してください。

  • PLAYER_CAPACITY(デフォルト 40): Security System が同時に追跡・同期できるプレイヤーの最大数です。ワールドの VRChat インスタンス収容数が 40 を超える場合は、これに合わせて増やしてください。
  • KEYPAD_PASSWORD_LENGTH(4): キーパッドのパスワードが自動的にチェックされるまでに必要な桁数です。
警告

プレイヤーのロールは 32 ビットのビットマスク として保存されるため、1 つのワールドで定義できるのは最大 32 個のロール までです。Roles リストに 33 個以上定義すると、Inspector にエラーが表示されます — インデックス 31 を超えるロールは付与できません。