#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. Да, у меня есть разрешения, я нашел, что я делал неправильно, я опубликую здесь свое решение немного позже!