В Unity, почему я могу переключить камеру на мировоззрение нажатием кнопки, но не могу сделать это в цикле запуска или обновления, также используя Face Manager?

#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. Я так и думал. Я действительно читал, что эти функции в конце концов являются просто запросами, которые могут быть удовлетворены, а могут и не быть удовлетворены. Просто, похоже, существует скудная документация о том, сколько именно времени требуется для обработки запросов и когда вы можете создать новый.