gpt4 book ai didi

ios - 结合-OpenGL-ES-Cocos2d 功能-和-OpenGL-ES-(Unity 3d) 导航--在-iOS-app 内

转载 作者:行者123 更新时间:2023-11-29 03:10:35 26 4
gpt4 key购买 nike

我正在开发一个应用程序,它能够使用 UnityAppController 在其中运行 Unity 3d 导航,并在不使用导航时暂停它。主应用程序还有另一个引擎,即 cocos2d,我在其中具有其他功能。

现在的问题是,只有在不使用 cocos2d(使用 OpenGL-es)功能的情况下,3d 导航才能工作,一旦我使用 cocos2d 功能并再次回到 3d 导航,它似乎被卡住了。这是我的 App 委托(delegate)(继承自 unity AppController 类),我正在处理 unity 暂停和播放

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

[super application:application didFinishLaunchingWithOptions:launchOptions];


self.unityVC = [self getRootController];

UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom];
[button setBackgroundColor:[UIColor colorWithRed:108.0/255 green:106.0/255 blue:55.0/255 alpha:1]];
[button setTitle:@"DONE" forState:UIControlStateNormal];
// [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[button setFrame:frame];
[button addTarget:self action:@selector(Fn_RemoveUnity) forControlEvents:UIControlEventTouchUpInside];
[_rootView addSubview:button];
[_rootView bringSubviewToFront:button];


//Default ViewController Code
//--------------------------------------------------------
// self.window = [UIApplication sharedApplication].keyWindow;

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.

[self Fn_AddMainScreen];

[self.window makeKeyAndVisible];
//--------------------------------------------------------

return YES;
}

- (void)playUnity
{

[self unityPause:NO];
}

- (void)pauseUnity
{
[self unityPause:YES];

}

-(void) Fn_AddUnity{
[window setHidden:YES];
[self playUnity];
}

-(void) Fn_RemoveUnity{
[self pauseUnity];
[window setHidden:NO];
[self Fn_AddMainScreen];
}

这是cocos2d代码

EAGLView *glView = [EAGLView viewWithFrame:CGRectMake(md.glview_X,md.glview_Y,md.glview_Width,md.glview_Height)
pixelFormat:kEAGLColorFormatRGB565 // kEAGLColorFormatRGBA8
depthFormat:0 // GL_DEPTH_COMPONENT16_OES
preserveBackbuffer:YES sharegroup:nil multiSampling:NO numberOfSamples:nil
];

glView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[[CCDirector sharedDirector] setProjection:CCDirectorProjection2D];
[glView setContentScaleFactor:1.0];
[[CCDirector sharedDirector] enableRetinaDisplay:YES];
[[CCDirector sharedDirector] setOpenGLView:glView];
[self.view insertSubview:glView atIndex:0];
[[CCDirector sharedDirector] runWithScene: [smoothningEffect scene]];

最佳答案

任何时候只能有一个 OpenGL 上下文处于事件状态,因此当您在任一引擎之间切换时,必须完全关闭它们。即便如此,这两个引擎的设计目的并不是与其他渲染引擎合作,因此这也可能被证明是不可能的。

例如,缓存机制可能是一个问题,特别是因为 cocos2d 到处都使用单例来将内容缓存在内存中。在切换回 Unity 之前,我会尝试确保所有必要的 cocos2d Singleton 类都从内存中释放。

这里的问题是为什么您首先想要混合两个单独的渲染引擎?其一,Unity 本身就有一个 2D 工具集。因此,您最好将时间投入到研究如何使用 Unity 自己的 2D 工具集在 2D 中完成您需要做的任何事情,或者像许多其他游戏过去成功完成的那样,在 Unity 的 3D 渲染器中模拟 2D。

关于ios - 结合-OpenGL-ES-Cocos2d 功能-和-OpenGL-ES-(Unity 3d) 导航--在-iOS-app 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com