マルチユーザー研究の構築
実際に二人の参加者をどのように接続して、一方のアクションがもう一方の画面に届くようにするのですか?
この手引きでは、クリックごとのメカニズムをカバーします:マルチユーザーモードの有効化、役割の割り当て、参加者の接続、そして同期の維持。マルチユーザーデザインをいつ使用するべきか、ベストプラクティス、および既存の例研究については、マルチユーザー実験デザインを参照してください。
以下の四つのステップは、実際に何をテストしているかに関わらず、すべてのマルチユーザー研究で同じです。これらが機能するようになったら、「追加の例」セクションでは、三つの異なるデザインで再利用された同じ四つのステップを示します。
目次
前提知識
用語を理解するためには、Labvancedに関する基本的な知識が推奨されます。例えば、イベントがどのように機能するか、変数がどのように使われるかについての知識です。
フレーム
試行の各瞬間に参加者が見るものを保持する基本要素。
イベント
トリガーとアクションが何であり、研究のロジックを構築するためにどのように組み合わさるのか。
変数
変数とは何か、そして研究中にどのように値を保存および更新するのか。
骨組みの設定
マルチ参加者モードの有効化
Labvancedの研究はデフォルトで一人の参加者用に構築されています。マルチユーザーのツール、Role_Id、Distribute Variable、同期は、研究が一度に複数人で実行されることを伝えられるまで存在しません。
右の列で設定を開き、特別機能の下でマルチユーザー研究に進み、Transformをクリックします。これにより、Number of Participants(最小2)とMaximum Parallel Sessionsの2つのフィールドが表示されます。この設定のフルリストについては、マルチユーザー研究を参照してください。
このクリックは元に戻せません(確認ダイアログ自体にはTransform Permanentlyというラベルが付けられています)。最初に参加者数を決定し、一人参加者バージョンも欲しい場合はその前に研究を複製してください。

Role_Idを使った役割の割り当て
マルチ参加者モードがオンの状態では、すべての参加者は依然として実験の同一で差別化されていないコピーを実行しています。まだ彼らを区別するものはありません。Role_Idは各参加者に属性を与え、個人情報を収集することなく、彼らの実験が異なることを始められるようにします。
Trial and Frame Trigger→ On Frame Startのイベントを追加した後、次にControl Actions→ Requirement Actions (If... Then... Else If)のアクションを追加します:
- 要件を追加: 左側→
Variable→ 選択するRole_Id; 比較→equal; 右側→Constant Value→Number→1 - 次に: 役割1に適用するアクションを追加します。例えば、
Set Object Propertyとしてターゲット画像を表示します。 - Elseケースを追加: 他のすべての役割に適用するアクションを追加します。

Distribute Variableを使った参加者の接続
異なるRole_Idがそれぞれの参加者の前に異なるコンテンツを配置できますが、まだ彼ら間で情報を移動させることはできません。各参加者の実験は依然として孤立して実行されています。Distribute Variableは、ある参加者の実験から別の参加者の実験に値を押し出す唯一のアクションであり、実際に研究が横並びではなく共有されているように感じさせるものです。
あなたのデザインに合ったトリガーの何か、例えばButton Click TriggerやEnter on Input Triggerの上で、Variable Actions→ Distribute Variable Actionを追加してください:
- 値を配分する対象: 全参加者、または選択された参加者
- ターゲット変数と値を選択: 受信参加者の画面上の変数と、それが設定されるべき値
- ブロック: 同時に同じターゲット変数に書き込む可能性のある参加者が2人以上いる場合は、このオプションをオンにします。

priceArrayをターゲットとして、ブロックが有効化されている、デバウンスレート制限を持っています。 参加者の同期
参加者は、自分のペースで研究を進めません。同期ポイントがない場合、一人の参加者は、彼らが待っている値がまだ配分される前に、後のフレームに到達することがあり、別の参加者の応答ではなく、空白または未完成の状態を見ることになります。
参加者が一歩一歩を進める必要があるフレームでは、例えばどちらも他が応答するまで進まないように、フレーム設定でSync Frame Startを有効にします。全員がそのフレームで待機し、全参加者が到着するまで待ちます。

追加の例
上記の四つのステップは変わりません。変わるのは、どの値が配分されるかと同期ポイントの位置です。三つの作業バリエーションは以下の通りです、最も簡単なものから始めます:
- 共有カウンター: 二人の参加者の間で同期されている一つの値
- ディレクター・マッチャー記述課題: 一人が説明し、他が特定する
- ターン制の提案と応答: 一人が提案し、他が受け入れたり拒否したりする
共有カウンター
骨組みの最も単純なバージョン:両方の参加者が同じ累計を見ており、どちらか一方がそれに追加できます。
- Role_Id: 両方の参加者が同じように行動するため、ここでは必要ありません。
- 配分:
Button Click Triggerで、すべての参加者に値を配分し、ターゲット変数はSharedCount、値はSharedCount + 1。 - 同期: 参加者を留めておく試行境界がないため必要ありません。
これは、ロールベースのロジックを追加する前に、マルチ参加者モードとDistribute Variableが機能していることを確認します。
ディレクター・マッチャー記述課題
参照コミュニケーション課題:一人の参加者(ディレクター)がターゲットアイテムを説明し、もう一人(マッチャー)が候補のセットからそれを特定します。
- Role_Id:
Role_Id1はターゲット画像とテキスト入力が表示されます。Role_Id2は候補画像が表示されず、ターゲットは表示されません。 - 配分: ディレクターのエンターキーのトリガーで、マッチャーの画面上に
Description変数にテキスト値を配分し、Blockを有効化します。なぜなら、一度に飛行中であるべき記述は一つだけだからです。 - 同期: 次の試行フレームで
Sync Frame Startを有効化し、ディレクターがマッチャーが候補を選択する前に進めないようにします。
これは画像の説明デモの背後にある同じ構造です。
ターン制の提案と応答
経済的交換:一人の参加者が共有金額の分け方を提案し、他方がそれを受け入れるか拒否します。
- Role_Id:
Role_Id1は提案された分割の入力を表示します。Role_Id2は提案が届くまで何も表示されません。 - 配分: 提案者の提出トリガーで、提案された値を
Offer変数に配分します。 - 同期: 結果フレームで
Sync Frame Startを有効化し、どちらの参加者も応答する前に結果を見ないようにします。
これはウルティマタムゲームの背後にある同じ構造です。
このパターンの実際の例は、手動で入力したものではなくランダムに引かれた金額を使用します:Role_Idが1に等しいとき、Draw Random Numberアクション(50から150の間の離散一様引き、amountToSplitに保存)がトリガーされ、その後すぐにDistribute VariableがamountToSplitを全参加者に送信し、Blockが有効になっています。

amountToSplitに実行され、次にDistribute Variableがブロックを有効にしてすべての参加者に送信します。