Interactable を使用してつかむ、持つ、投げる
概要
Mesh Interactables は、実行時のオブジェクトまたはアバターの動作との対話を定義する Unity スクリプトを使用してオブジェクトを構成するためのシステムです。 スクリプトは、XRI 対話機能を使用して対話できるオブジェクトのプロパティを定義します。 Mesh ツールキットには、定義できるさまざまな種類のオブジェクトのスクリプトが含まれています。 プロジェクトを実行すると、オブジェクトまたはアバターが定義どおりに動作するために必要なすべてのプレハブと設定が設定されます。 対話可能なオブジェクトが Mesh アプリで実行されたときの外観のおおよそのプレビューを確認する場合は、必ずメッシュ エミュレーションでプレイ モード設定をしてください。 Mesh アプリに表示される IK 機能は、メッシュ エミュレーションを使用した再生モードでは使用できません。
メッシュ対話可能セットアップ コンポーネント
オブジェクトを対話可能にするには、 Mesh 操作可能品セットアップ コンポーネントを追加する必要があります。
[階層] でオブジェクトを選択します。
Inspector で、[コンポーネントの追加] ボタンをクリックし、[操作可能なセットアップメッシュ] を選択します。
コンポーネントは、既定の [Interactable Type] プロパティを [Basic] に設定して追加されます。 (オブジェクト型については、次のセクションで説明します)。
すべて同じように動作するオブジェクトのグループのプロパティは、親 メッシュ対話可能セットアップ コンポーネントで設定できます。 プロパティは、各子オブジェクトに Mesh Interactable Body コンポーネントを自動的に追加することで、実行時に、リジッドボディを持つすべての子に適用されます。 Mesh Interactable Body を手動で追加して、ビジュアル スクリプトとの対話可能なメッシュを使用したりビジュアル スクリプトを使用して操作可能なターゲット変換を変更したりできます。
注:
Mesh Interactable Body を使用すると、それぞれの対話可能な動作を個別に行えます。
物理演算を有効にする場合は、オブジェクトにリジッドボディを追加する必要があります。
ヘルプの表示
[Mesh Interactables Setup] コンポーネントと [Mesh Interactable Body] コンポーネントで、[?] ボタンをクリックすると、ボタンが接続されている機能のヘルプが含まれる Mesh ドキュメント内のページに移動できます。
対話可能なオブジェクトの種類
オブジェクトには、4 つの種類があります。
- 基本
- 操作可能
- 装備可能
- 投擲可能
オブジェクトの種類を選択するには:
- [Mesh Interactables Setup] コンポーネントで、[Interactable Type] ドロップダウンをクリックし、4 つのオプションのいずれかを選択します。
基本
前述のように、これが既定の型です。 ユーザーがオブジェクトにカーソルを合わせたり選択したりすると、コールバックを呼び出したり、他のスクリプトが反応したりできます。 たとえば、別のオブジェクトを有効にするために使用するボタンがある場合は、この対話可能型を OnSelected コールバックを持つボタンに追加して、その他のオブジェクトを有効にします。 ボタンは、このタイプとコライダーを追加するだけで完全に対話可能になります。他に何もする必要はありません。
注: 他の 3 つの対話可能な型 --Manipulable、Equippable、Throwable (後述) には、Basic 型と同じ属性がありますが、追加機能があります。
操作可能
このタイプのオブジェクトを遠くから移動できます。具体的には、実行時にその変換を操作し、interactor レイの最後の空間を移動します。 ショートカット コントロールは、オブジェクトを回転または平行移動するために使用できます。 Mesh アプリでオブジェクトを操作する場合は、アバターの手の IK 設定をオンにしてオブジェクトをフォローすることができます。 操作可能なオブジェクトは、リジッドボディを必要としませんが、オブジェクトに物理機能を持たせたい場合は追加する必要があります。
装備可能
この型のオブジェクトを取得できます。 Mesh の用語では、あなたのアバターの手にオブジェクトを"装備"していると言います。 PC 上のオブジェクトを装備するには、オブジェクトをクリックするか、オブジェクトの選択中に F キーを押します。 クエストでオブジェクトを装備するには、オブジェクトが選択されている間に「グリップ」ボタンを押します。 装備可能なオブジェクトには、オブジェクトの装備中にアバターの腕のポーズの IK ターゲットの設定が含まれます。 IK ターゲットはアバターの胸からのオフセットです。これにより、オブジェクトが保持またはアクティブ化されている間に手がどこに行くかが決まります。
投擲可能
名前が示すように、この型のオブジェクトを取得してスローできます。 グラビングの後は、マウスの左ボタンを長押しすることでエイミング モードに入ることができます。 これにより、アバターの腕がマウスターゲットに追随することができます。オブジェクトをスローするには、マウスの左ボタンを離します。
Visual Scripting を使用してオブジェクトを対話可能にする
すべての対話可能なコンポーネントには、Visual Scripting で使用できる相互作用プロパティとメソッドがあるため、それらを連携させる方法は無限にあります。 これを利用するには、スクリプト グラフ内の Mesh Interactable Body コンポーネントを使用し、OnHovered、OnSelected などの使用可能なプロパティへのノードを OnStateChanged ノードにフックします。 たとえば、次のスクリプト グラフでは、ボタンが押されている間にシリンダーが有効になり、ボタンが離されたときに無効になります。 このボタンは、スクリプトとコライダーを追加するだけで完全に対話可能になります。他に何もする必要はありません。
Visual Scripting プロパティ
すべての Interactable Body の場合:
- IsHovered (読み取り専用) : ローカルアバターがオブジェクトをホバーしているかどうか。
- IsSelected (読み取り専用) : アバターがオブジェクトを選択しているかどうか。 MeshBrowser で実行すると、ネットワークに接続されます。
- IsSelectedLocally : ローカルアバターがオブジェクトを選択しているかどうか。
- IsMine (読み取り専用) : オブジェクトを選択または装備する最後のアバターの場合は True。
装備可能品の場合:
- EquippedAt (読み取り専用) : このオブジェクトが装備されている場所 - None、DefaultHand、RightHand、LeftHand。 MeshBrowser で実行すると、ネットワークに接続されます。
- EquipTime (読み取り専用) : このオブジェクトが装備された時刻。 MeshBrowser で実行すると、ネットワークに接続されます。
- IsActivated (読み取り専用) : このオブジェクトがアクティブ状態の場合。 スローできないオブジェクトに対してのみ有効です。 MeshBrowser で実行すると、ネットワークに接続されます。
- IsAiming (読み取り専用) : ローカルアバターがこのオブジェクトを保持している間に目的の状態にある場合。 投擲可能品の場合にのみ有効です。
- IsThrowing (読み取り専用) : ローカルアバターがオブジェクトをアクティブにスローしている場合。 投擲可能品の場合にのみ有効です。
- IsEquipped (読み取り専用) (読み取り専用) : このオブジェクトが現在アバターによって装備されている場合。 MeshBrowser で実行すると、ネットワークに接続されます。
- IsThrowable : このオブジェクトが投擲可能品である場合。
- ThrowVelocity : オブジェクトが解放されたときにオブジェクトをスローする速度。
ターゲット位置を変更する操作可能物である場合:
- ターゲット位置 (読み取り専用): Mesh Interactable プロパティで既定のフォース モードを使用する場合の本文のターゲット位置
- ターゲット 回転 (読み取り専用): Mesh Interactable プロパティで既定のフォース モードを使用する場合のボディのターゲット 回転
- レイ ヒット位置 (読み取り専用): ボディ上の対話機能のレイ キャスト ヒットの位置
- レイ ヒット 回転 (読み取り専用): レイの方向を中心とする対話機能の回転
- 変更されたターゲット位置 (読み取りと書き込み): ビジュアル スクリプトによって新しいターゲット位置を設定するために使用されます。 これにより、既定のターゲット位置がオーバーライドされます。 ベスト プラクティスは、このプロパティをオーバーライドする方法です。
- ターゲット位置のオン状態変更の使用。 この場合、ビジュアル スクリプトは、対話機能と新しい位置が変更された場合にのみフローを起動します。
- 更新プログラムの遅延時の使用。 すべてのフレームでターゲット変換を変更する必要がある場合は、新しいターゲット変換が次のフレームですぐに使用できるように、遅延更新で行います。
- 変更されたターゲット ローテーション (読み取りと書き込み): ビジュアル スクリプトによって新しいターゲット ローテーションを設定するために使用されます。 これにより、既定のターゲット位置がオーバーライドされます。