所以在我正在制作的这种迷宫游戏中,我会向玩家展示迷宫30秒。
我不想要的是玩家截取迷宫的截图。
我想做一些类似Snapchat或Instagram的内容,当你拍摄快照/故事的屏幕截图时它是如何检测到的。
我正在使用C#。它还可以防止用户截屏。我不介意。
是否有可能检测用户何时截屏或在Unity中阻止它?
答案 0 :(得分:4)
不,你无法可靠地发现这一点。他们还可以用数码相机拍照。此外,还有无数种方法可以创建屏幕截图,并且操作系统没有“回调”来通知应用程序。您可以尝试检测“打印屏幕”键,但正如我所说,还有其他截图/屏幕录制工具可以使用任何热键或根本没有热键。我从未使用过Snapchat,但它似乎也不安全。
甚至还有监视器和视频投影仪具有冻结模式以保持当前图像。您还可以在虚拟机中运行浏览器。在那里,您实际上可以冻结整个虚拟PC或从虚拟屏幕截取屏幕截图,并且在VM内运行的应用程序甚至无法检测或阻止它。
答案 1 :(得分:3)
我曾经不得不做类似的事情。如果您只是想做Snapchat所做的事情,那么可以做到但是请记住,只要应用程序在任何人的设备而不是您的服务器上运行,它就可以被解压缩,修改和再次编译,因此这个截图检测可以规避。
首先,您需要了解Apple的规则:
2.5.9改变或禁用标准交换机功能的应用程序,例如音量调高/调低和环形/静音开关,或其他本机 用户界面元素或行为将被拒绝。
因此,消除了截取屏幕截图时发生的变化的想法。
你所做的就是开始游戏,当你向玩家展示迷宫30秒时,请执行以下操作:
在iOS上:
持续检查玩家是否同时按下电源和主页按钮。如果发生这种情况,请重新启动游戏并再次向玩家显示迷宫30秒。一遍又一遍地做,直到玩家停止这样做。如果您检测到电源+主页按钮按下,您甚至可以断开或禁止播放器。
在Android上:
持续检查播放器是否同时按下电源和音量降低按钮。执行上述相同的操作。
你不能只需使用 C#执行此操作。您必须为iOS和Android设备使用make插件。该插件应该使用Java来检测android和Object-C,以便对iOS进行检测。这是因为 C#中没有所需的API。然后,您可以从C#调用Java和Objective-C函数。
要做的其他改进:
检查或外接显示设备,并在您使用时禁用它们 向玩家展示迷宫30秒。启用它们 在此期间。
当您按上述方法检测到屏幕截图按钮时, 立即拍摄自己的截图。在播放器的图片库中循环播放图像并加载当天拍摄的所有图像。 将它与您刚刚拍摄的屏幕截图进行比较,看看它们是否匹配。 如果他们这样做,你现在非常确定玩家正试图作弊。 采取行动,如禁止播放器,重新启动游戏甚至 通过将截屏发送给其他玩家来控制玩家。您也可以将其用作证明用户在被禁止后投诉时作弊的证明。
最后,您甚至可以使用 OpenCV 进行更深入的研究。当你是 向播放器显示迷宫30秒,启动前置摄像头 设备并使用 OpenCV 连续检查是否有其他对象 比玩家的头部在镜头前。如果是的话,那么 播放器正在尝试使用其他设备截取屏幕截图。采取 行动立即。您可以使用机器语言来训练这一点。
要走多远取决于你想花多少时间以及你在多少关心玩家在网上作弊。唯一需要担心的是玩家对游戏进行反编译并删除这些功能,但值得实施。
我的Android手机以不同方式截取屏幕截图。我向下滑了一下 在屏幕顶部选择" Capture"选项。
Android上没有什么是相同的。这在某些较旧或不同的Android设备上有所不同。 您可以在屏幕上检测滑动模式。最好的方法是构建一个配置文件,处理来自不同制造商的每个Android设备。
对于那些评论,这是可能的。你必须这样做,特别是如果它是一个多人游戏。仅仅因为游戏可以被黑客攻击并不意味着程序员不应该实施基本的黑客防御机制。当你从玩家那里得到反馈时,应该实施基本的黑客防御机制,然后进行改进。