Unity android фронтальная камера
Как я могу изменить этот код для доступа к передней камере, в настоящее время он показывает мне заднюю камеру.? Я пробовал разные вещи, но, похоже, не работает.
if (isLocalPlayer)
{
if (this.gameObject.name == "Player 1") {
WebCamTexture webcamTexture = new WebCamTexture ();
Player1Image.GetComponent<RawImage> ().texture = webcamTexture;
Player1Image.GetComponent<RawImage> ().texture = webcamTexture;
Player1Image.GetComponent<RawImage> ().material.mainTexture = webcamTexture;
webcamTexture.Play ();
} else if (this.gameObject.name == "Player 2") {
WebCamTexture webcamTexture = new WebCamTexture ();
Player2Image.GetComponent<RawImage> ().texture = webcamTexture;
Player2Image.GetComponent<RawImage> ().texture = webcamTexture;
Player2Image.GetComponent<RawImage> ().material.mainTexture = webcamTexture;
webcamTexture.Play ();
} else if (this.gameObject.name == "Player 3") {
WebCamTexture webcamTexture = new WebCamTexture ();
Player3Image.GetComponent<RawImage> ().texture = webcamTexture;
Player3Image.GetComponent<RawImage> ().texture = webcamTexture;
Player3Image.GetComponent<RawImage> ().material.mainTexture = webcamTexture;
webcamTexture.Play ();
} else if (this.gameObject.name == "Player 4") {
WebCamTexture webcamTexture = new WebCamTexture ();
Player4Image.GetComponent<RawImage> ().texture = webcamTexture;
Player4Image.GetComponent<RawImage> ().texture = webcamTexture;
Player4Image.GetComponent<RawImage> ().material.mainTexture = webcamTexture;
webcamTexture.Play ();
} else {
Debug.Log ("All slots full!");
GameObject.Destroy (this);
Network.Disconnect ();
}
}
1 ответ
Код, который у вас есть в настоящий момент, создает WebcamTexture из устройства по умолчанию, так как вы используете конструктор без каких-либо параметров, который передает пустую строку для имя_устройства.
Если вы проверяете документацию WebCamTexture, в ней перечисляется конструктор, который вы можете предоставить deviceName. Теперь все, что вам нужно сделать, это:
- Определите имя устройства для фронтальной камеры.
- Используйте имя устройства для передней камеры во время создания объекта WebCamTexture.
Вы можете запросить имена устройств для доступных камер следующим образом:
var webCamDevices = WebCamTexture.devices;
foreach(var camDevice in webCamDevices){
Debug.Log(camDevice.name);
}
Кроме того, свойство isFrontFacing WebCamDevice также поможет запросить, является ли используемая вами камера фронтальной. Поэтому наивным способом убедиться, что первая найденная фронтальная камера будет использоваться для вашего случая, будет:
if (isLocalPlayer)
{
string frontCamName = null;
var webCamDevices = WebCamTexture.devices;
foreach(var camDevice in webCamDevices){
if(camDevice.isFrontFacing){
frontCamName = camDevice.name;
break;
}
}
if (this.gameObject.name == "Player 1") {
WebCamTexture webcamTexture = new WebCamTexture (frontCamName);
Player1Image.GetComponent<RawImage> ().texture = webcamTexture;
Player1Image.GetComponent<RawImage> ().texture = webcamTexture;
Player1Image.GetComponent<RawImage> ().material.mainTexture = webcamTexture;
webcamTexture.Play ();
} else if (this.gameObject.name == "Player 2") {
WebCamTexture webcamTexture = new WebCamTexture (frontCamName);
Player2Image.GetComponent<RawImage> ().texture = webcamTexture;
Player2Image.GetComponent<RawImage> ().texture = webcamTexture;
Player2Image.GetComponent<RawImage> ().material.mainTexture = webcamTexture;
webcamTexture.Play ();
} else if (this.gameObject.name == "Player 3") {
WebCamTexture webcamTexture = new WebCamTexture (frontCamName);
Player3Image.GetComponent<RawImage> ().texture = webcamTexture;
Player3Image.GetComponent<RawImage> ().texture = webcamTexture;
Player3Image.GetComponent<RawImage> ().material.mainTexture = webcamTexture;
webcamTexture.Play ();
} else if (this.gameObject.name == "Player 4") {
WebCamTexture webcamTexture = new WebCamTexture (frontCamName);
Player4Image.GetComponent<RawImage> ().texture = webcamTexture;
Player4Image.GetComponent<RawImage> ().texture = webcamTexture;
Player4Image.GetComponent<RawImage> ().material.mainTexture = webcamTexture;
webcamTexture.Play ();
} else {
Debug.Log ("All slots full!");
GameObject.Destroy (this);
Network.Disconnect ();
}
}
Обратите внимание, что, удалив оператор break, вы будете использовать фронтальную камеру, которая указана последней. Также было бы полезно сделать frontCamName частным свойством и инициализировать его в функции Start().