2 回答
TA贡献1842条经验 获得超12个赞
当前的 ARKit API 没有在运行时在 Unity 中禁用或启用它的方法。
话虽如此,Unity 有自己的功能来启用和禁用 VR、AR 或 XR 插件。如果 ARKit 构建正确,则此方法应该有效。因此,您可以通过设置为禁用/启用 ARKit并通过将其设置XRSettings.enabled为false启用它true。
这也是一个好主意,叫XRSettings.LoadDeviceByName一个空字符串,等待帧,设置前XRSettings.enabled要false禁用它:
IEnumerator DisableAR()
{
XRSettings.LoadDeviceByName("");
yield return null;
XRSettings.enabled = false;
}
然后调用禁用:
StartCoroutine(DisableAR());
TA贡献1853条经验 获得超18个赞
我想我正在回答一个很老的帖子。我找到了一种方法,但我不知道这是否是您的期望。
就像@Programmer 说的
当前的 ARKit API 没有在运行时在 Unity 中禁用或启用它的方法。
所以我使用的方法是结合程序员的代码,如果你需要相机来渲染一些天空盒或纯色,我在非 AR 模式下做了类似的事情,通过在更改之前保存当前纹理,作为实时视频将纹理作为材质提供,保存后将纹理更改为空,当您想要重新启用 AR 时,您将纹理设置回保存的值,并正确加载。
bool ARMode;
bool isSupported;
Camera cam;
UnityARCameraManager ARCameraManager;
private Texture2D _videoTextureY;
private Texture2D _videoTextureCbCr;
private void Awake()
{
cam = Camera.main;
isSupported = FindObjectOfType<UnityARCameraManager>().sessionConfiguration.IsSupported;
ARMode = isSupported;
ARCameraManager = FindObjectOfType<UnityARCameraManager>();
}
void DisableAR()
{
XRSettings.enabled = false;
ARCameraManager.enabled = false;
_videoTextureY = (Texture2D)cam.GetComponent<UnityARVideo>().m_ClearMaterial.GetTexture("_textureY");
_videoTextureCbCr = (Texture2D)cam.GetComponent<UnityARVideo>().m_ClearMaterial.GetTexture("_textureCbCr");
cam.GetComponent<UnityARVideo>().m_ClearMaterial.SetTexture("_textureY", Texture2D.blackTexture);
cam.GetComponent<UnityARVideo>().m_ClearMaterial.SetTexture("_textureCbCr", Texture2D.blackTexture);
cam.clearFlags = CameraClearFlags.SolidColor;
cam.backgroundColor = Color.black;
cam.GetComponent<UnityARVideo>().enabled = false;
}
void EnableAR()
{
ARCameraManager.enabled = true;
XRSettings.enabled = true;
cam.clearFlags = CameraClearFlags.Depth;
cam.GetComponent<UnityARVideo>().m_ClearMaterial.SetTexture("_textureY", _videoTextureY);
cam.GetComponent<UnityARVideo().m_ClearMaterial.SetTexture("_textureCbCr", _videoTextureCbCr);
cam.GetComponent<UnityARVideo>().enabled = true;
}
- 2 回答
- 0 关注
- 350 浏览
添加回答
举报