Interactors
Interactorとは、手やコントローラーにアタッチされたコンポーネントで、つかむ、テレポート、ポークなどのアクションを開始します。アクションを開始するために、Interactorは入力データを使用してワールドスペースにおける位置を判断し、次に独自のComputeCandidate()メソッドを使用して、同じタイプの近くにあるInteractableコンポーネントを選択します(例: Ray Interactorは独自のRay Interactableを選択します)。IInteractorのDrive()メソッドは、ComputeCandidate()をいつ実行するか、いつ選択を行うか、選択中に何が起こるかなどを決定します。すべてのInteractorは同じInteractorベースクラスを共有しています。このクラスはIInteractorを実装し、拡張機能としてIInteractorViewも実装します。
IInteractorインターフェイスは、インタラクションの状態を変更するためのメソッドを公開します。例えば以下が含まれます。
void Enable();
void Disable();
void Preprocess();
void Process();
void Postprocess();
void ComputeCandidate();
bool HasCandidate { get; }
object Candidate { get; }
bool ShouldHover { get; }
void Hover();
bool ShouldUnhover { get; }
void Unhover();
bool ShouldSelect { get; }
void Select();
bool ShouldUnselect { get; }
void Unselect();
bool ComputeShouldSelect()
bool ComputeShouldUnselect()
bool HasInteractable { get; }
bool HasSelectedInteractable { get; }
さらに、Interactorは、ポイントまたは選択されたInteractableへの参照を取得するためのメソッドや、InteractorStateの変更を取得しフォローするためのメソッドも公開します。
SDKのすべてのInteractorはIUpdateDriverを実装し、デフォルトでUnity Updateで更新されます。
ライフサイクル全体を通じてInteractorの進行を開発者自身がコントロールする場合(Interactorを既存のプロジェクトや外部フレームワークに採用する場合など)は、IsRootDriverプロパティをfalseに設定したうえで、InteractorのIInteractorメソッドを直接呼び出すことができます。
他の
Interactorとの間でライフサイクルを調整したり優先順位を設定したりする必要がある場合も、デフォルトで
Interactorが更新されないようにすることができます。その場合、
InteractorGroupを使用して、
Interactorをグループとして動作させることをおすすめします。
ISelectorにより、インタラクション(ボタンを押す、人差し指でつまむなど)の選択メカニズムが定義されます。Interactor自体で選択メカニズム(例: レイ、つかむ)が定義されていない場合は、ISelectorの設定がそれらのInteractorに使用されます。
Interactorに関する参考情報については、次のリンクをご覧ください。
- Interactorに反応するオブジェクトにアタッチされているInteractableについては、Interactableをご覧ください。
- Interaction SDKアーキテクチャーの全概要については、アーキテクチャーの概要をご覧ください。
- 同時に複数のホバリングがある場合にどのようにInteractorを優先順位付けするかについては、InteractorGroupをご覧ください
- 手やコントローラーの位置がどのように判別されるかについては、入力データの概要をご覧ください。