有没有办法知道游戏是在模拟器应用程序中还是在真实设备中运行?
诸如VirtualXposed
之类的某些应用程序是android设备的虚拟模拟器。此类应用程序允许用户使用不同的标识多次在其设备上安装游戏/应用程序。
我想知道有什么方法可以识别我的游戏/应用程序是在模拟器中还是在unity3d中的物理设备上运行的?
类似:
if(isemulator)
{
dosomething();
}
答案 0 :(得分:5)
这并不容易,因为那里有许多仿真器。 this帖子中的答案说,您可以使用Build.FINGERPRINT.contains("generic")
来做到这一点。
您可以使用AndroidJavaClass
类将Java代码移植到Unity中的C#,而无需构建Java插件。下面是C#中的移植版本:
public bool IsEmulator()
{
AndroidJavaClass osBuild;
osBuild = new AndroidJavaClass("android.os.Build");
string fingerPrint = osBuild.GetStatic<string>("FINGERPRINT");
return fingerPrint.Contains("generic");
}
为确保涵盖大多数仿真器,请使用android-emulator-detector插件。这个插件似乎经过了严格的测试,可以检测大多数模拟器。您可以使用AndroidJavaClass
与它进行通信,并可以使用UnityPlayer.UnitySendMessage
来回调C#中的Unity代码。
答案 1 :(得分:0)
也许您可以查找一些特定于模拟器的SystemInfos(Unity Docs SystemInfo),例如。 SystemInfo.deviceModel