У меня есть приложение, которое использует zxing для сканирования qr-кодов в приложении.Однако, когда я создаю приложение с этими сценариями в сцене, приложение вылетает при запуске.Я думал, что это что-то в Awake () или Start (), но я обернул эти методы в try catch, и даже тогда я не получаю никаких ошибок, и он не падает на Android и в редакторе.
У меня нет доступа к Mac, и я использую Unity Cloud Build для его сборки.
Я также не знаю, как включить разрешения, я думал, что сделал при созданиифайл .p12, но я также обнаружил, что есть файл info.plist, с которым я должен запрашивать разрешения.
До исследования я нашел этот Вопрос Unity о добавлении элементов в проект Xcode , но не только включение xcodeapi дало мне ошибки, но операторы using не работали.
Существует два сценария
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
public class WebCamController : MonoBehaviour {
public int desiredWidth = 1280;
public int desiredHeight = 720;
public int desiredFPS = 60;
public RawImage output;
[HideInInspector]
public WebCamTexture webcamTexture;
void Start ()
{
webcamTexture = new WebCamTexture(desiredWidth, desiredHeight, desiredFPS);
output.texture = webcamTexture;
Play();
}
public void Play()
{
webcamTexture.Play();
}
public void Pause()
{
webcamTexture.Stop();
}
}
и
using UnityEngine;
using System.Collections;
using ZXing;
using ZXing.QrCode;
using ZXing.Common;
using System;
public class CodeScanner : MonoBehaviour {
private static CodeScanner _instance;
public static CodeScanner Instance
{
get
{
if(null == _instance)
{
Debug.Log("Code Scanner Instance not found");
}
return _instance;
}
}
[Header("References")]
public WebCamController wcc;
[Header("Properties")]
private BarcodeReader codeScanner;
private string lastScanned = "";
public delegate void Found(string text, string type);
public event Found OnCodeScanned;
private bool active;
public void Awake()
{
_instance = this;
}
void Start () {
codeScanner = new BarcodeReader();
StartCoroutine(ReadCode());
wcc.Play();
}
IEnumerator ReadCode()
{
while (active)
{
try
{
var data = codeScanner.Decode(wcc.webcamTexture.GetPixels32(), wcc.webcamTexture.width, wcc.webcamTexture.height);
if (data != null)
{
//if (data.Text != lastScanned)
//{
OnCodeScanned(data.Text, data.BarcodeFormat.ToString());
//}
lastScanned = data.Text;
}
}
catch(Exception e)
{
}
yield return new WaitForSeconds(1.0f);
}
}
public void Activate()
{
wcc.Play();
active = true;
StartCoroutine(ReadCode());
}
public void Stop()
{
active = false;
wcc.Pause();
}
}
Мое устройство правильно добавлено в сертификат .p12. Я могу скомпилировать и запустить программу без этих сценариев в сцене.