Единство: Android Получает Пиксели Камеры

#android #unity3d #android-camera

Вопрос:

Я создаю проект, в котором мне нужно найти цвет в мире, а затем сравнить его со случайным цветом.

Так что я много искал… (действительно много) как получить доступ к камере и прочитать пиксели, и я застрял.

Итак, atm, если я использую редактор unity, все работает нормально, я могу получить текстуру, прочитать RGB в каждом пикселе. Но каждый раз, когда я переношусь на Android, это не работает… Я имею в виду, иногда это работает примерно для 1 кадра? а потом ничего не происходит, он просто застрял…

Это мой код до сих пор… и я действительно не могу разобраться в нем… это немного раздражает, я могу получить нужные мне значения в редакторе (с помощью веб-камеры моего компьютера), но когда я пытаюсь использовать свое устройство Android…. ничего не происходит.

     public class GM : MonoBehaviour {
    
        
        [Header("UI")]
        [SerializeField] Text isPlaying;
        [SerializeField] Text frameRate;
        [SerializeField] Text colorData;
    
    
        [Header("Android Settings")]
        [SerializeField] int currentCamIndex = 0;
        [SerializeField] WebCamDevice device;
        [SerializeField] WebCamTexture webCamTexture;
        [SerializeField] bool isDeviceRunning = false;
    
        [Header("Color Settings")]
        [SerializeField] Texture texture;
        [SerializeField] Vector3 selectedColorVector;
        [SerializeField] Vector3 currentColorVector;
        [SerializeField] float r = 0;
        [SerializeField] float g = 0;
        [SerializeField] float b = 0;
    
        [Header("Timer Settings")]
        [SerializeField] bool enableTimer = false;
        [SerializeField] float timeToProcess = 2f;
        [SerializeField] float timeElapsedOnProcess = 0f;
    
        [Header("Developer Settings")]
        [SerializeField] bool isRunning = false;
        [SerializeField] bool clearData = false;
        [SerializeField] int frameCounter = 0;
    
        private void Start() {
    
            // Register the Device
            RegisterDevice();
    
            isRunning = true;
        }
    
    
        private void RegisterDevice() {
            device = WebCamTexture.devices[currentCamIndex];
            webCamTexture = new WebCamTexture(device.name);
            isPlaying.text = "Is Playing: "   webCamTexture.isPlaying;
        }
    
        private void Update() {
            
            if(isRunning) {
                if(!isDeviceRunning) {
                    webCamTexture.Play();
                    isDeviceRunning = true;
                }
    
                if(timeElapsedOnProcess >= timeToProcess) {
                    timeElapsedOnProcess = 0f;
                    DisplayInformation();
                } else {
                    timeElapsedOnProcess  = Time.deltaTime;
                }
    
            }
        }
    
        private void DisplayInformation() {
    
            frameCounter  ;
            isPlaying.text = "Is Playing: "   webCamTexture.isPlaying;
            frameRate.text = "Frame Counter: "   frameCounter.ToString();
            if (webCamTexture.didUpdateThisFrame)
                colorData.text = webCamTexture.GetPixel(0, 0).ToString()   " : "   frameCounter.ToString();
            else
                colorData.text = " : "   frameCounter.ToString();
        }
    }```
 

Комментарии:

1. Возможно ли, что у вас нет разрешения на использование камеры телефона?

2. Да, у меня есть разрешения, я нашел, что я делал неправильно, я опубликую здесь свое решение немного позже!