Unity Remote中SystemInfo.supportsAccelerometer返回false的问题求助
看起来你碰到了一个有点矛盾的Unity加速度计检测问题:SystemInfo.supportsAccelerometer返回false,但实际设备的加速度计明明能正常工作,连Input.acceleration都能读出数据。这种情况大多是Unity的硬件检测逻辑或者平台配置出了问题,下面给你几个实用的解决方向:
1. 检查平台权限配置
不同平台需要对应的权限声明,Unity才能正确识别到加速度计:
Android平台:
打开Player Settings > Android > Publishing Settings,确认勾选了Accelerometer权限;或者手动在AndroidManifest.xml里添加:<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="false"/> <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/> <!-- 部分高版本Android需要 -->要是设了
android:required="true",没加速度计的设备装不了你的应用,但有传感器的设备应该能被正确检测到。iOS平台:
在Player Settings > iOS > Info.plist里添加NSMotionUsageDescription,填好申请运动权限的说明文本(比如"需要访问加速度计实现体感控制")。iOS强制要求声明这个权限才能访问运动传感器,不然Unity的检测API很可能返回错误结果。
2. 排查Unity版本bug
某些旧版本的Unity存在SystemInfo.supportsAccelerometer的检测兼容问题,比如对新机型的适配不到位。建议你试试升级到Unity的LTS(长期支持)稳定版,比如2020.x、2021.x系列,说不定问题就消失了。
3. 用兼容的方式替代检测
既然Input.acceleration能正常拿到数据,你可以绕过SystemInfo.supportsAccelerometer的检测,或者做个兼容判断:
void Start() { bool isAccelerometerAvailable = SystemInfo.supportsAccelerometer; // 额外验证:如果检测为false,但能读取到有效加速度数据就修正结果 Vector3 testAccel = Input.acceleration; if (!isAccelerometerAvailable && testAccel.magnitude > 0.01f) { isAccelerometerAvailable = true; Debug.Log("修正检测结果:加速度计实际可用"); } if (isAccelerometerAvailable) { Debug.Log("Device Support Accelerometer"); } else { Debug.Log("Device Not Support Accelerometer"); } }
这种方式能避开Unity检测API的误判,更贴合硬件实际状态。
4. 排除设备传感器异常
虽然你确认设备加速度计正常,但可以去系统设置里检查下传感器有没有被禁用,或者有没有其他应用占用了传感器资源(这种情况比较少见,但可以排除下)。
内容的提问来源于stack exchange,提问作者eeerfan

