我正在尝试在存储它的类之外调用C#事件。 据我了解,在正常情况下是不允许这样做的。
但是,我在此线程中发现,使用reflexion API,应该可以找到代表并手动调用它们:How to manually invoke an event?
但是,我要调用的事件存储在其类的静态字段中……关于如何使用自反API访问静态事件详细信息,我暂时有些困惑。
我发现这个主题在讨论它How to get a Static property with Reflection ,但事件似乎存储在属性之外。
当我尝试通过GetEvents获取EventInfo时,我没有找到如何找到其存储的委托。 用GetRaiseMethod似乎也可以达到为Eventinfo引发的方法,但是当我尝试时它实际上为null,这似乎是正常的(https://msdn.microsoft.com/en-us/library/1a4k4e35(v=vs.110).aspx)
提供一些有关为什么我要尝试做此疯狂事情的背景;): 我正在尝试为Unity的Hololens调试“模拟器”添加一项功能(简单地说,就是可以在Unity的游戏窗口中模拟某些Hololens行为的功能),该功能可以在Unity的Microsoft混合现实工具包(https://github.com/Microsoft/MixedRealityToolkit-Unity中找到)。 他们正确模拟了Hololens耳机AR-“喀哒”声(在Unity编辑器上下文中用鼠标单击表示),但是没有模拟手部移动跟踪:在工具箱及其模拟器部件中根本没有处理它,并且无法在其上使用它在实际设备上,我只需要使用本机Unity类...和事件。
为了增强模拟器,我希望能够编写代码,该代码既可以在手动移动的实际Hololens上工作,也可以在检测鼠标移动的情况下在编辑器中工作。为此,我打算添加一个组件,该组件在鼠标移动时发送与手部跟踪相同的事件。
更准确地说,包含该事件的类是UnityEngine.XR.WSA.Input.InteractionManager,除其他外,我想从代码中引发InteractionSourceUpdated事件以伪造手势。
我知道我可以(应该?)使用一个中间组件来引发自己的事件,该事件可以由模拟器中的实际手部移动或鼠标移动触发。 但是,如果我可以让人们简单地编写普通代码并使其在模拟器中正常工作,那么对他们来说会更好:)