2 回答
TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超13個(gè)贊
當(dāng)前的 ARKit API 沒有在運(yùn)行時(shí)在 Unity 中禁用或啟用它的方法。
話雖如此,Unity 有自己的功能來啟用和禁用 VR、AR 或 XR 插件。如果 ARKit 構(gòu)建正確,則此方法應(yīng)該有效。因此,您可以通過設(shè)置為禁用/啟用 ARKit并通過將其設(shè)置XRSettings.enabled為false啟用它true。
這也是一個(gè)好主意,叫XRSettings.LoadDeviceByName一個(gè)空字符串,等待幀,設(shè)置前XRSettings.enabled要false禁用它:
IEnumerator DisableAR()
{
XRSettings.LoadDeviceByName("");
yield return null;
XRSettings.enabled = false;
}
然后調(diào)用禁用:
StartCoroutine(DisableAR());
TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超18個(gè)贊
我想我正在回答一個(gè)很老的帖子。我找到了一種方法,但我不知道這是否是您的期望。
就像@Programmer 說的
當(dāng)前的 ARKit API 沒有在運(yùn)行時(shí)在 Unity 中禁用或啟用它的方法。
所以我使用的方法是結(jié)合程序員的代碼,如果你需要相機(jī)來渲染一些天空盒或純色,我在非 AR 模式下做了類似的事情,通過在更改之前保存當(dāng)前紋理,作為實(shí)時(shí)視頻將紋理作為材質(zhì)提供,保存后將紋理更改為空,當(dāng)您想要重新啟用 AR 時(shí),您將紋理設(shè)置回保存的值,并正確加載。
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 關(guān)注
- 427 瀏覽
添加回答
舉報(bào)
