我使用C#和ARKit插件(Github的2.0版)与Unity3d配合使用
在我当前的应用程序中,IAM使用ARKit测量距离。 IAM创建的工具仅出于这个原因才需要此功能,因此我想知道当用户需要标尺时如何启用ARKit并禁用它(如果不需要)。
我要避免在用户使用非ARKit工具时性能下降。我想说的是,如果您在哪里初始化过一次,ARKit仍然可以在后台运行?我是ARKit方面的新手,所以我没有关于如何处理它的完美概述。
删除一些代码行毫无意义,基本上是将插件的重要性插入到项目中,而我自己的脚本则依赖于某些功能-我没有更改插件的源代码中的任何内容。我编写的测量工具本身运行良好,但我无法确定如何激活和停用ARKit。
有人可以帮我这个忙吗?当iam取消GameObjects时,脚本正在运行,这似乎是避免这些功能的“肮脏”方法,但我必须使其干净(例如,还必须禁用后台的视频地图-我猜那些不会因为某些脚本被取消而暂停或禁用ARKit函数,似乎api仍在后台运行,因为我这样做时会滞后)
如果您需要更多信息,请告诉我。每个帮助或建议都将非常好。
非常感谢!
答案 0 :(得分:1)
目前,在运行时,当前的ARKit API没有在Unity中禁用或启用它的方法。
话虽这么说,Unity有其自己的功能来启用和禁用VR,AR或XR插件。如果ARKit正确构建,则此方法应该可以工作。因此,您可能可以通过将join
设置为<script type="application/javascript">
$('input[type="file"]').change(function(e){
var fileName = e.target.files[0].name;
$('.custom-file-label').html(fileName);
});
</script>
来禁用/启用ARKit,并通过将其设置为XRSettings.enabled
来启用它。
在将false
设置为true
以将其禁用之前,用空字符串调用XRSettings.LoadDeviceByName
也是一个好主意:
XRSettings.enabled
然后调用以禁用:
false
答案 1 :(得分:0)
我想我正在回答一个很老的帖子。我找到了一种方法,但我不知道这是否是您所期望的。
就像@Programmer告诉的那样
目前,在运行时,当前的ARKit API还没有一种方法可以在Unity中禁用或启用它。
因此,我使用的方式是合并Programmer的代码,以及如果您需要相机渲染天空盒或纯色,我已经在Non-AR模式下通过在更改当前纹理之前保存当前纹理来完成类似的操作,例如实时视频将作为材质提供给材质,保存后将材质更改为null,然后当您要重新启用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;
}