提供された UnitySandbox プロジェクトを使用して、Leap Motion と Unity でいくつかのことをテストしてきましたが、LeapInput クラスのいくつかの側面について混乱しています。
C# のデリゲートとイベントを使用して、ジェスチャが発生するたびにジェスチャに関する情報を別のスクリプトに渡したいと考えています。LeapInput クラスでは、イベント処理をクラスに直接配置できるというコメントがあります。ただし、静的な m_controller クラスでイベントを有効にしようとすると、イベントが登録されないようです。
しかし、次のように Leap Controller クラスのインスタンスを宣言する MonoBehaviour から継承する別のスクリプトがある場合:
using UnityEngine;
using System.Collections;
using Leap;
public class LeapToUnityInterface : MonoBehaviour {
Leap.Controller controller;
#region delegates
#endregion
#region events
#endregion
// Use this for initialization
void Start ()
{
controller = new Controller();
controller.EnableGesture(Gesture.GestureType.TYPECIRCLE);
controller.EnableGesture(Gesture.GestureType.TYPEINVALID);
controller.EnableGesture(Gesture.GestureType.TYPEKEYTAP);
controller.EnableGesture(Gesture.GestureType.TYPESCREENTAP);
controller.EnableGesture(Gesture.GestureType.TYPESWIPE);
}
次に、Update でイベントを確認すると、問題なく登録されているようです。
// Update is called once per frame
void Update ()
{
Frame frame = controller.Frame();
foreach (Gesture gesture in frame.Gestures())
{
switch(gesture.Type)
{
case(Gesture.GestureType.TYPECIRCLE):
{
Debug.Log("Circle gesture recognized.");
break;
}
case(Gesture.GestureType.TYPEINVALID):
{
Debug.Log("Invalid gesture recognized.");
break;
}
case(Gesture.GestureType.TYPEKEYTAP):
{
Debug.Log("Key Tap gesture recognized.");
break;
}
case(Gesture.GestureType.TYPESCREENTAP):
{
Debug.Log("Screen tap gesture recognized.");
break;
}
case(Gesture.GestureType.TYPESWIPE):
{
Debug.Log("Swipe gesture recognized.");
break;
}
default:
{
break;
}
}
}
}
私の質問は 2 つの部分です: なぜ、静的開始または静的覚醒のいずれかで静的 m_controller のイベントを有効にしようとすると、成功しないのですか? なぜ、Leap.Controller イベント クラスのインスタンスだけでイベントを有効にすると、それが成功するのでしょうか (つまり、その変更は、Leap とインターフェイスしているコントローラーにどのように登録されるのでしょうか?)。