gvr sdk for unity開発ノート-GazeInputModule解読
4900 ワード
GazeInputModuleはUnity Editorで最もテストしやすいもので、gvr sdk for unityとともにインポートされたパッケージには、スクリプトGvrReticleというプリセットが含まれています.cs、スクリプトを開くと、GazeInputModuleイベントを受信するインタフェースであるIGvrGazePointerのインタフェースが継承されていることがわかります.HeadSetDemoのシーンのCubeバインドTeleportスクリプトもあります.このスクリプトを開くと、IGvrGazeResponderというインタフェースが継承されています.
IGvrGazePointerとIGvrGazeResponderの役割は明らかで、IGvrGazePointerは観察者の凝視イベント受信機に対して、アクティブで、つまり観察者が何を見ているのか、中のインタフェースを継承することで、凝視している物体を得ることができる.IGvrGazeResponderはイベントを凝視される受信機で、物体が凝視されると、中のイベントをトリガーします.HeadSetDemoのCubeのように、準星を合わせると変色します.IGvrGazeResponderを実装するイベントインタフェースを継承することによってCubeの色を変更する.
例説明ここまで、IGvrGazePointerの各イベントインタフェースの注釈を翻訳します.
1
2
3
4
OnGazeDisableの前に1回呼び出され、パラメータがnullに設定されます.そのパラメータがnullに設定されている場合は、しばらく検証しません.
5.
6.
シンチレーション効果、ここ
シンチレーション効果の理解は1つの点が半径がないはずで、あなたが入力した半径が0より大きい时、球体を使って物体を探して投射する时、この球体の中心はちょうど境界の上で、つまり半分は物体と交差して、半分は外を露出して、この时一体まだこの物体を見つめているのではありませんか、ここで外半径を使って、もしすでに外半径を超えたら、それはきっと物体を見つめていません;これは近くて遠い小さい3 Dの世界の中で検査してとても役に立ちました.もちろん、遠くの物体がいくつも一緒にいて、あなたがあるものに正確に着いたとき、近くのものまで狙っている可能性があります.ハハハ!例のこのGvrReticleスクリプトには内半径と外半径を扱うものがありますが、ここでは言いません.
;
次はIGvrGazeResponderというインタフェースです
IGvrGazePointerとIGvrGazeResponderの役割は明らかで、IGvrGazePointerは観察者の凝視イベント受信機に対して、アクティブで、つまり観察者が何を見ているのか、中のインタフェースを継承することで、凝視している物体を得ることができる.IGvrGazeResponderはイベントを凝視される受信機で、物体が凝視されると、中のイベントをトリガーします.HeadSetDemoのCubeのように、準星を合わせると変色します.IGvrGazeResponderを実装するイベントインタフェースを継承することによってCubeの色を変更する.
例説明ここまで、IGvrGazePointerの各イベントインタフェースの注釈を翻訳します.
1
/// This is called when the 'BaseInputModule' system should be enabled.
void OnGazeEnabled();
これは、ベース入力モジュールが有効になったときにこの関数が呼び出されることをよく理解しています.無参2
/// This is called when the 'BaseInputModule' system should be disabled.
void OnGazeDisabled();
これは最初とは逆に、この関数を呼び出すために無効になっています.3
/// Called when the user is looking on a valid GameObject. This can be a 3D
/// or UI element.
///
/// The camera is the event camera, the target is the object
/// the user is looking at, and the intersectionPosition is the intersection
/// point of the ray sent from the camera on the object.
void OnGazeStart(Camera camera, GameObject targetObject, Vector3 intersectionPosition,
bool isInteractive);
void OnGazeStay(Camera camera, GameObject targetObject, Vector3 intersectionPosition,
bool isInteractive);
上のパラメータは同じ関数で、1番目は物体を凝視し始め、2番目は物体の上に凝視点が滞留していることを示す.凝視点が3 d物体またはUI要素に落ちると呼び出される.Cameraとは事件を処理するカメラのことで、どのカメラなのか、私はMain Cameraであることを初歩的に検証しました.targetObjectは現在凝視点または見つめているゲーム物体である.intersesionPositionはカメラから放射線を発して現在の凝視物体と交差する点である.isInteractiveがインタラクティブであるかどうか、このパラメータが具体的にどのような状況で真であるかについては、targetObjectがEvent Triggerにバインドされているとき、この物体を見つめていることを初歩的に検証しました.このパラメータは真で、Event Triggerがないときは偽です.4
/// Called when the user's look no longer intersects an object previously
/// intersected with a ray projected from the camera.
/// This is also called just before **OnGazeDisabled** and may have have any of
/// the values set as **null**.
///
/// The camera is the event camera and the target is the object the user
/// previously looked at.
void OnGazeExit(Camera camera, GameObject targetObject);
これは、ゲーム物体から視線が離れたときに呼び出され、パラメータの意味と上記3の対応である.しかしこの関数はOnGazeDisableの前に1回呼び出され、パラメータがnullに設定されます.そのパラメータがnullに設定されている場合は、しばらく検証しません.
5.
void OnGazeTriggerStart(Camera camera);
void OnGazeTriggerEnd(Camera camera);
の上のこの2つの意味ははっきりしていて、凝視を開始して終わる時にトリガーして、この2つは少しあいまいで、例の中で、私はEditorがマウスを1回クリックすることを発見して、この2つの関数はすべてそれぞれ1回呼び出すことができて、もちろんVR設備の上で、このクリック事件はトリガーできないはずです;6.
/// Return the radius of the gaze pointer. This is used when searching for
/// valid gaze targets. If a radius is 0, the GvrGaze will use a ray
/// to find a valid gaze target. Otherwise it will use a SphereCast.
/// The *innerRadius* is used for finding new targets while the *outerRadius*
/// is used to see if you are still nearby the object currently looked at
/// to avoid a flickering effect when just at the border of the intersection.
void GetPointerRadius(out float innerRadius, out float outerRadius);
最後にこれは最も強力な機能であるべきで、カーソルまたは凝視点の半径を取得し、内半径と外半径を出力し、感情はこれが環状の点または球である.これは凝視ターゲットを検索するために使用されます.半径が0の場合、GvrGazeは1本の線を使用して凝視ターゲットを検索します.そうでなければ、球の投射を使って探します.球の投射については、GvrGazeが衝突体のある球を凝視方向に発射することで放射線をシミュレートすることを理解しています.これにより、検出範囲を拡大することができます.凝視が必要な物体が小さい場合は、放射線を使うと正確に見つけるには長い間調整する必要があります.大きな球を使うと、そんなに正確に物体を凝視する必要はありません.ははは、やはり考えが行き届いているようで、一日中闘鶏の目で物体を見に行くことを望んでいる人はいません.しかし、ここの関数は明らかに2つの半径を出力し、1つの内半径は新しいターゲット物体を検索するために使用され、外半径はあなたが現在見つめている物体の近くにいるかどうかを検出するために使用され、交差点がちょうど境界に落ちたときに使用され、避けるために使用されます.シンチレーション効果、ここ
シンチレーション効果の理解は1つの点が半径がないはずで、あなたが入力した半径が0より大きい时、球体を使って物体を探して投射する时、この球体の中心はちょうど境界の上で、つまり半分は物体と交差して、半分は外を露出して、この时一体まだこの物体を見つめているのではありませんか、ここで外半径を使って、もしすでに外半径を超えたら、それはきっと物体を見つめていません;これは近くて遠い小さい3 Dの世界の中で検査してとても役に立ちました.もちろん、遠くの物体がいくつも一緒にいて、あなたがあるものに正確に着いたとき、近くのものまで狙っている可能性があります.ハハハ!例のこのGvrReticleスクリプトには内半径と外半径を扱うものがありますが、ここでは言いません.
;
次はIGvrGazeResponderというインタフェースです
/// Called when the user is looking on a GameObject with this script,
/// as long as it is set to an appropriate layer (see GvrGaze).
void OnGazeEnter();
/// Called when the user stops looking on the GameObject, after OnGazeEnter
/// was already called.
void OnGazeExit();
/// Called when the trigger is used, between OnGazeEnter and OnGazeExit.
void OnGazeTrigger();
ここには3つの無参関数があり、意味が明確で、凝視が入り、退出し、トリガーされる.しかし例ではcsの中で、明らかにこの3つの関数を呼び出していないで、少なくともEditorの下で呼び出していないで、VRの設備の上であるかどうかについては、私は検証したことがなくて、例の中ですべて直接EventTriggerの中で事件の関数をバインドして、OK、まだ多くの解釈が理解していないで、しかし先にここに覚えておいて、次回研究して更新していることを理解します!