检测用户何时在 Unity 中截屏
Posted
技术标签:
【中文标题】检测用户何时在 Unity 中截屏【英文标题】:Detect when user takes a screenshot in Unity 【发布时间】:2018-03-05 19:50:25 【问题描述】:所以在我制作的这种迷宫游戏中,我会向玩家展示迷宫 30 秒。 我不想要的是玩家对迷宫进行截图。
我想做 Snapchat 或 Instagram 之类的事情,它如何检测您何时拍摄快照/故事的屏幕截图。
我正在使用 C#。它还可以防止用户截屏。我不介意。
是否有一种方法可以检测用户何时截屏或在 Unity 中阻止截屏?
【问题讨论】:
谁在乎他们是否截屏?如果用户想要破坏预期的体验,那就这样吧。 @BrandonMiller 我也是这么想的,除非会有针对其他玩家的评分系统。 我打算让它成倍增加。好吧,我得想出一个我想的解决方案:) 是多人游戏,就像两个玩家同时尝试解决同一个迷宫,还是只是一个排行榜?迷宫是程序生成的吗? @BrandonMiller 两个或更多玩家同时解谜,迷宫会随机生成。 【参考方案1】:不,您无法可靠地检测到这一点。他们还可以用数码相机拍照。此外,有无数种方法可以创建屏幕截图,并且操作系统没有“回调”来通知应用程序。您可以尝试检测“打印屏幕”键,但正如我所说,还有其他屏幕截图/屏幕录制工具可以使用任何热键或根本不使用热键。我从未使用过 Snapchat,但它似乎也不安全。
甚至还有显示器和视频投影仪具有冻结模式以保持当前图像。您也可以在虚拟机中运行浏览器。在那里,您实际上可以冻结整个虚拟 PC 或从虚拟屏幕截屏,而在 VM 中运行的应用程序甚至无法检测或阻止这种情况。
【讨论】:
嗯,我也看到了……answers.unity.com/questions/1017115/… 你还在这里问吗?你问之前就知道答案了吗? 我问它是因为我很好奇。只有一个人回答,没有人告诉其他任何事情。我想确定一下。无论如何谢谢:)【参考方案2】:我曾经不得不做类似的事情。如果您只是想做 snapchat 所做的事情,那么它可以完成,但请记住,只要该应用程序在任何人的设备上而不是您的服务器上运行,它就可以被反编译、修改和再次编译,这样就可以绕过这个屏幕截图检测.
首先你需要了解一下苹果的规则:
2.5.9 改变或禁用标准开关功能的应用程序,例如音量增大/减小和响铃/静音开关,或其他原生 用户界面元素或行为将被拒绝。
因此,改变截屏时发生的事情的想法被消除了。
你要做的是开始游戏,当你向玩家展示迷宫30秒时,请执行以下操作:
在 iOS 上:
不断检查玩家是否同时按下了电源和主页按钮。如果发生这种情况,请重新启动游戏并再次向玩家展示迷宫 30 秒。一遍又一遍地这样做,直到玩家停止这样做。如果您检测到电源+按下主页按钮,您甚至可以断开连接或禁止播放器。
在 Android 上:
不断检查玩家是否同时按下了电源和降低音量按钮。执行与上述相同的操作。
你不能只用 C# 来做到这一点。您必须为 ios 和 android 设备使用 make 插件。该插件应该使用Java 来检测android 和Object-C 来做iOS 检测。这是因为所需的 API 在 C# 中不可用。然后,您可以从 C# 调用 Java 和 Objective-C 函数。
其他改进:
检查或外部显示设备并在您使用时禁用它们 向玩家展示迷宫 30 秒。重新启用它们 在此期间。
当您如上所述检测到屏幕截图按钮按下时, 也立即拍摄您自己的屏幕截图。循环播放播放器图片库中的图像并加载当天拍摄的所有图像。 将其与您刚刚拍摄的屏幕截图进行比较,看看它们是否匹配。 如果他们这样做了,那么您现在非常确定玩家正在尝试作弊。 采取行动,例如禁止玩家,重新开始游戏,甚至 通过将屏幕截图发送给其他玩家来控制玩家。你也可以用它来证明用户在被封禁后投诉时是在作弊。
最后,您甚至可以使用 OpenCV 更深入。当你在 向玩家展示迷宫30秒,启动前置摄像头 设备并使用 OpenCV 不断检查是否有其他对象 比玩家的头在镜头前。如果是这样,那么 播放器正在尝试用另一台设备截屏。拿 立即行动。你可以使用机器语言来训练它。
走多远取决于你想花多少时间,以及你对玩家在线作弊的关心程度。唯一需要担心的是玩家反编译游戏并删除这些功能,但值得实施。
我的 Android 手机截取屏幕截图的方式有所不同。我从 屏幕顶部,然后选择“捕获”选项。
在 Android 上没有什么是永远相同的。这在某些较旧或不同的 Android 设备上有所不同。 您可以检测屏幕上的滑动模式。最好的方法是构建一个配置文件来处理来自不同制造商的每个 Android 设备。
对于那些发表评论的人,这是可以做到的。你必须这样做,特别是如果它是一个多人游戏。仅仅因为游戏可以被黑客入侵并不意味着程序员不应该实施基本的黑客预防机制。应实施基本的黑客预防机制,然后在收到玩家反馈后加以改进。
【讨论】:
我的 Android 手机截取屏幕截图的方式不同。我从屏幕顶部向下滑动并选择“Capture+”选项。 更不用说其他无数种在没有事件的情况下截取屏幕截图的方法。 我的旧手机都是音量键。这不是一个包罗万象的解决方案。 这是迄今为止我得到的最佳解决方案。是的,我可能不会这样做,因为正如很多人所说,还有很多其他方法可以截取屏幕截图。我可能会尝试找出另一种提供提示/提示的方法。再次感谢。 @Programmer 哈哈哇,非常感谢。我不认为我会走那么远,但我相信会有人这样做。我认为这个答案将对他们有益。谢谢以上是关于检测用户何时在 Unity 中截屏的主要内容,如果未能解决你的问题,请参考以下文章