解决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的调用

相关推荐
VaJoy14 天前
Cocos Creator Shader 入门 ⑺ —— 图层混合样式的实现与 Render Texture
cocos creator
VaJoy16 天前
Cocos Creator Shader 入门 ⑹ —— 灰阶、反色等滤镜的实现
cocos creator
VaJoy18 天前
Cocos Creator Shader 入门 ⑸ —— 代码复用与绿幕抠图技术
cocos creator
VaJoy20 天前
Cocos Creator Shader 入门 ⑷ —— 纹理采样与受击闪白的实现
cocos creator
VaJoy21 天前
Cocos Creator Shader 入门 ⑶ —— 给节点设置透明度
cocos creator
VaJoy23 天前
Cocos Creator Shader 入门 (2) —— 给节点染色
cocos creator
VaJoy24 天前
Cocos Creator Shader —— 附录
cocos creator
成长ing1213825 天前
多层背景视差滚动Parallax Scrolling
cocos creator
似水流年wxk1 个月前
cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins
运维·jenkins·cocos creator
成长ing121383 个月前
点击音效系统
前端·cocos creator