HoloLens二维码扫描重载问题:基于Mike Taulty方案的场景切换异常
我来分享下基于Mike Taulty的方案,在HoloLens上实现二维码解码并结合场景切换逻辑的完整实现方式:
核心实现思路
我们借助ZXing的封装类调用HoloLens的第一摄像头完成扫码,通过一个布尔变量避免重复触发扫码逻辑,在拿到扫码结果后,切换到Unity主线程中判断结果是否有效,分别执行「切换到下一场景」或「返回上一场景」的操作。
完整代码片段
using UnityEngine; using UnityEngine.SceneManagement; // 扫码管理类示例 public class QrCodeScannerManager : MonoBehaviour { private bool scanned = false; // 启动扫码的入口方法 public void StartQrScan() { // 基于Mike Taulty的MediaFrameQrProcessing方案启动扫码 MediaFrameQrProcessing.Wrappers.ZXingQrCodeScanner.ScanFirstCameraForQrCode( result => { // 切换到Unity主线程执行场景/UI操作,避免线程冲突 UnityEngine.WSA.Application.InvokeOnAppThread(() => { if (result != null && !scanned) { scanned = true; DisableQrSight(); // 自定义方法:关闭扫码视觉提示(比如扫码框) // 校验二维码结果是否符合预期 if (IsValidQrResult(result.Text)) { // 结果正确,切换至下一场景 SceneManager.LoadScene("NextScene"); } else { // 结果不正确,返回上一场景 SceneManager.LoadScene("PreviousScene"); } } }, false); } ); } // 自定义校验逻辑:判断二维码内容是否符合业务要求 private bool IsValidQrResult(string qrContent) { // 示例:校验内容非空且符合指定前缀 return !string.IsNullOrEmpty(qrContent) && qrContent.StartsWith("HOLOLENS_VALID_"); } // 自定义方法:关闭扫码时的视觉反馈元素 private void DisableQrSight() { // 示例:隐藏扫码UI画布 // qrScanCanvas.SetActive(false); } }
关键细节说明
scanned变量:用来防止扫码回调重复触发,避免多次执行场景切换逻辑InvokeOnAppThread:扫码回调运行在后台线程,必须切换到Unity主线程才能执行场景切换、UI操作等Unity相关逻辑- 权限配置:别忘了在HoloLens项目的
Package.appxmanifest中开启网络摄像头权限,否则无法访问摄像头完成扫码 - 场景名称:确保
SceneManager.LoadScene中的场景名称和你Build Settings里配置的完全一致
内容的提问来源于stack exchange,提问作者CrisGmz
相关产品推荐
相关产品推荐

