在 Unity 中,为啥我可以通过按下按钮将相机切换到 WorldView,但在使用人脸管理器的同时无法在开始或更新循环中执行此操作?

Posted

技术标签:

【中文标题】在 Unity 中,为啥我可以通过按下按钮将相机切换到 WorldView,但在使用人脸管理器的同时无法在开始或更新循环中执行此操作?【英文标题】:In Unity, why can I switch the Camera to WorldView with a button press but cannot do it in the Start or Update loop while also using Face Manager?在 Unity 中,为什么我可以通过按下按钮将相机切换到 WorldView,但在使用人脸管理器的同时无法在开始或更新循环中执行此操作? 【发布时间】:2021-12-18 18:52:08 【问题描述】:

我正在开发一个 Unity AR 游戏,我想开始使用人脸管理器在面向世界的相机上跟踪人脸姿势。我知道您可以使用 World Camera 跟踪 Face Pose,因为我在 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()
    
      
      
    

【问题讨论】:

This doesn't work 到底是什么意思?遇到错误? 相机不会从用户切换到世界 可能是其他东西将其覆盖回User 我不知道。我认为可能是这种情况,但这是我的问题的一部分,可能会这样做,我该如何阻止它? 来自ARCameraManager.currentFacingDirection:当前摄像机朝向的方向。这通常应该与requestedFacingDirection 匹配,但如果平台无法为请求的摄像头朝向方向提供服务,或者请求的朝向方向可能需要几帧才能变为活动状态,则可能会有所不同。 .. 这可能是情况如何? 【参考方案1】:

所以我发现你只能在第 1 帧过去后切换相机。根据下面 derHugo 的评论,我认为最好的解决方案是协程如下:

IEnumerator switchCamera()


    yield return null;
    yield return null;
    camManager.requestedFacingDirection = CameraFacingDirection.World;
    

【讨论】:

在这种情况下,通过两个yield return null; 行跳过两帧的协程可能会更方便,以便在其余时间不使用更新方法运行;) 可能顺便说一句,这与 ARFoundation 子服务生命周期有关,并且在启动子服务之前,它可能总是需要第一帧来初始化服务本身。.. 我想的也差不多。我确实读到这些功能归根结底只是可能会或可能不会被授予的请求。关于处理请求需要多长时间以及何时可以提出新请求的文档似乎很少。

以上是关于在 Unity 中,为啥我可以通过按下按钮将相机切换到 WorldView,但在使用人脸管理器的同时无法在开始或更新循环中执行此操作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的相机胶卷模式是空的?

Unity怎样实现点击按钮 等于按下某个按键? 在线等!

为啥当我在编辑器中按下播放时 Unity 会崩溃?

在android中,为啥我的服务在按下电源按钮后没有进入睡眠状态

当我继承 UIView 时,为啥我不能在图像上绘图?

unity3d 新人求助 按钮控制同场景多个相机切换的问题