我正在为Unity3D创建Mac OS插件(包)。如何拦截输入cmd-f组合(切换全屏模式)?我无法创建自己的窗口,我只能使用默认(mainWindow)。我曾尝试使用NSNotificationCenter,但我需要停止事件,我不需要只是通知。我试图创建NSResponder并将其添加到捕获输入事件,但有些东西不起作用。任何想法怎么做?
NSWindow* window = [[NSApplication sharedApplication] mainWindow];
NSView* view = [window contentView];
NSResponder* oldresp = [view nextResponder];
MyResponder* myres = [MyResponder alloc];
[myres retain];
[view setNextResponder:myres];
和
@interface MyResponder : NSResponder
{
}
- (void)keyDown:(NSEvent *)theEvent;
@end
@implementation MyResponder
- (void)keyDown:(NSEvent *)theEvent
{
NSLog(@"%@",@"!KeyDown Event");
NSString *theArrow = [theEvent charactersIgnoringModifiers];
unichar keyChar = 0;
if ( [theArrow length] == 1 )
{
keyChar = [theArrow characterAtIndex:0];
if ( keyChar == NSModeSwitchFunctionKey )
{
NSLog(@"%@",@"!!!___!!! GOT NSModeSwitchFunctionKey !!!");
return;
}
NSLog(@"%@ %d",@"! Key:",keyChar);
}
[super keyDown:theEvent];
}
@end
答案 0 :(得分:1)
一种解决方案是不断检查用户是否已切换到全屏模式,如果有,则从程序中切换全屏。这可能会暂时导致一些短暂的滞后或图形描述,但它应该可以工作。
function Update ()
{
if (Screen.fullScreen) {
Screen.fullScreen = false;
}
}
我不确定拦截按键的方法并在程序切换之前忽略该命令。
有关在Windows上处理此问题的统一答案,请参阅此相关帖子: http://answers.unity3d.com/questions/544183/block-or-override-alt-enter-fullscreen.html