解决Facebook Instant Games小游戏gamepad报错

最近公司有几款游戏在Facebook Instant Games平台上,都因报同一个错误而无法进入游戏,这些游戏中有Cocos Creator的项目,也有Unity的项目。

从错误中可以看出,是Navigator.getGamepads()的调用被Facebook的权限策略阻止了。

Navigator.getGamepads() 是一个 Web API 方法,用于返回一个包含当前连接的游戏手柄信息的数组。每个手柄可以通过索引访问,提供按钮和轴的状态信息。

原因

这个是Facebook Instant Games游戏页面的HTTP响应头的权限策略。

Permissions-Policy: gamepad=(self) 这个设置表示只有在相同的源(即和页面拥有相同协议、域名和端口的脚本)中才允许使用 Gamepad API。这是一种安全措施,用以限制可能来自不同源的脚本访问敏感或影响用户体验的功能。

简单来说,这意味着只有来自与当前网页相同源的脚本才能访问 Navigator.getGamepads() 方法。如果尝试从其他源的脚本访问此功能,将会受到限制。

临时解决方案

Cocos Creator项目:

Unity项目:

上面两张截图gamepad的调用都是在引擎初始化的时候,由引擎底层调用,因此为了能在Facebook Instant Games上正常运行,一个解决方案就是在引擎初始化之前将navigator.getGamepads设置为null,就可以避免navigator.getGamepads的调用,当然这个只是临时方案,想要完全解决这个问题,只能由引擎公司来修正,比如开放一个手柄的开关,或者在打包的时候,可以将游戏手柄模块从引擎中裁切掉。

引擎版本适用范围

Cocos Creator 3.6.1开始为了更好的支持XR, 增加了对游戏手柄的支持,因此3.6.1以上的游戏想上架到Facebook Instant Games平台上,需要禁用navigator.getGamepads的调用

至于Unity的项目,我不是很清楚具体是从哪个版本开始支持游戏手柄,从公司上架的项目来看,2020.3.46f1c1以上的版本,都需要禁用navigator.getGamepads的调用

相关推荐
成长ing121381 个月前
点击音效系统
前端·cocos creator
blakeyi2 个月前
vscode保存自动刷新cocos creator编辑器
ide·vscode·cocos creator·热更新
烧仙草奶茶2 个月前
【cocos creator 3.x】3Dui创建,模型遮挡ui效果
ui·3d·cocos creator·cocos3d
糖墨夕2 个月前
【1】Coco2d creator资源管理注意事项 - meta 文件
前端·cocos creator·cocos2d-x
Setsuna_F_Seiei2 个月前
前端切图仔的一次不务正业游戏开发之旅
前端·游戏·cocos creator
jason_yang2 个月前
转眼间,已是十几年前的游戏代码了
cocos creator·游戏开发·cocos2d-x
成长ing121383 个月前
cocos creator 放大镜效果
前端·cocos creator
烧仙草奶茶4 个月前
【cocos creator】【模拟经营】餐厅经营demo
cocos creator·游戏源码·模拟经营
la_vie_est_belle5 个月前
《Cocos Creator游戏实战》非固定摇杆实现原理
游戏·cocos creator·游戏开发·cocos·非固定摇杆
布鲁克零三四四7 个月前
Cocos Creator导出obj文件用于后端寻路
cocos creator