#c# #unity3d #mobile #augmented-reality #arcore
Вопрос:
Я работаю над игрой Unity AR, в которой я хотел бы начать использовать Face Manager для отслеживания позы лица на камере, обращенной к миру. Я точно знаю, что вы можете отслеживать позу лица с помощью камеры World, потому что я видел это в проекте ar-foundation-samples. Единственное предостережение заключается в том, что вы должны сначала начать работу в режиме, ориентированном на пользователя, а затем нажать кнопку, чтобы переключиться в режим, ориентированный на мир, как только приложение будет запущено. Я бы хотел, чтобы это начиналось с камеры, обращенной к миру, но каждый раз, когда я пытаюсь сделать это с запущенным менеджером лиц, это не работает; камера вообще не включается. Мой вопрос в том, почему я могу переключить отслеживание позы лица с пользователя на мир одним нажатием кнопки, но я не могу сделать то же самое с помощью методов Start() или Update ()?
public class FaceController : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
/*This won't switch the camera*/
camManager.requestedFacingDirection = CameraFacingDirection.World;
}
private void OnEnable()
{
}
public ARCameraManager camManager;
public ARSession aRSession;
bool trigger;
bool trigger2;
public void SwitchMode()
{
/*This will switch the camera when called by a button press */
camManager.requestedFacingDirection = CameraFacingDirection.World;
}
// Update is called once per frame
void Update()
{
}
}
Комментарии:
1. что именно это
This doesn't work
значит? Возникают ошибки?2. Камера не будет переключаться с пользователя на Мир
3. может быть, что-то еще перезаписывает его обратно
User
?4. Я не знаю. Я думаю, что это может быть так, но это часть моего вопроса здесь, что может быть причиной этого и как я могу это остановить?
5. Из ARCameraManager.currentFacingDirection : Текущее направление камеры, обращенное в сторону. Обычно это должно совпадать
requestedFacingDirection
, но может отличаться, если платформа не может обслуживать запрошенное направление камеры, обращенное в сторону, или может потребоваться несколько кадров, чтобы запрошенное направление стало активным. .. может ли это быть так?
Ответ №1:
Итак, я обнаружил, что вы можете переключать камеры только ПОСЛЕ прохождения кадра 1. Согласно комментарию Деруго ниже, я думаю, что лучшим решением является следующая сопрограмма:
IEnumerator switchCamera()
{
yield return null;
yield return null;
camManager.requestedFacingDirection = CameraFacingDirection.World;
}
Комментарии:
1. В этом случае сопрограмма, пропускающая два кадра через две
yield return null;
строки, вероятно, была бы более удобной, чтобы метод обновления не работал в остальное время без использования 😉2. Возможно, кстати, что это связано с жизненным циклом субсервиса ARFoundation, и, возможно, всегда требуются первые кадры для инициализации самой службы перед загрузкой субсервисов..
3. Я так и думал. Я действительно читал, что эти функции в конце концов являются просто запросами, которые могут быть удовлетворены, а могут и не быть удовлетворены. Просто, похоже, существует скудная документация о том, сколько именно времени требуется для обработки запросов и когда вы можете создать новый.