Я тестировал некоторые вещи с Leap Motion и Unity, используя предоставленный проект UnitySandbox, и я не совсем понимаю некоторые аспекты класса LeapInput.
Я хочу использовать делегаты и события С# для передачи информации о жестах другому сценарию всякий раз, когда они происходят. В классе LeapInput в комментариях говорится, что обработку событий можно разместить прямо в классе. Однако, когда я пытаюсь включить события в статическом классе m_controller, они, похоже, не регистрируются.
Тем не менее, когда у меня есть отдельный скрипт, наследуемый от MonoBehaviour, который объявляет экземпляр класса Leap Controller следующим образом:
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 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;
}
}
}
}
Мой вопрос состоит из двух частей: почему, когда я пытаюсь включить события для статического m_controller либо при статическом запуске, либо при статическом пробуждении, это не удается? И почему, когда я включаю события только для экземпляра класса событий Leap.Controller, это удается (т.е. как это изменение регистрируется в контроллере, взаимодействующем с Leap?)?