如何使用Unity3d找到AR相机到现实世界中标记的距离

时间:2014-08-10 00:18:40

标签: android camera unity3d distance unityscript

我是脚本新手,我很难在Unity3d中为Android手机制作AR应用程序。我遇到了一个问题,无论我做什么都无法解决。

情况如下。我有一个AR相机,用于为Unity3d增强现实的NyARToolkit插件编写。

此AR相机,标记为" MainCamera",需要关闭,当达到一定距离(意味着移开Android手机)形成标记,在其上呈现模型。 当达到这个距离时,我想要启动" MainCamera"并加载另一个统一场景。

以下代码是我迄今为止尝试过的,没有太大成功。需要提一下的是,这个脚本附加在" MainCamera"上,这是需要禁用的gameObject。

这是脚本:

#pragma strict
 var mainCamera : Transform;
 var camera : GameObject;
 function Update() {
 var distance = Vector3.Distance(mainCamera.position, transform.position);
 if(distance<0) {
     Debug.Log("CloseUp camera is on : " + distance);
 }
  if(distance > 1) {
    Debug.Log("CloseUp camera is off : " + distance);
     Camera.main.gameObject.SetActiveRecursively(false);
   }
}

有人可以看一下我的代码片段并发布一个有效的编辑,这样当我将用户的Android手机从标记移开时,我可以正确地设置相机并设置相机吗?

提前感谢大家的答案。

&#34;编辑1&#34;

我知道我甚至没有接近在移动设备上工作的功能,但是这个link会让你看到这个功能。我需要首先获得从标记到移动的距离,如果该距离是例如在1.5米以上时,应关闭AR摄像机并加载新的水平。

2 个答案:

答案 0 :(得分:0)

你没有提到究竟什么不起作用。根据您从帖子和您提供的代码示例中拼凑起来的内容,您只需添加级别加载代码即可。

#pragma strict
var mainCamera : Transform;
var camera : GameObject;
function Update() {
var distance = Vector3.Distance(mainCamera.position, transform.position);
if(distance<0) {
   Debug.Log("CloseUp camera is on : " + distance);
}
if(distance > 1) {
  Debug.Log("CloseUp camera is off : " + distance);
  // If you are loading a new scene you likely don't need to bother turning off the camera
  Camera.main.gameObject.SetActiveRecursively(false);
  Application.LoadLevel ("nameOfTheLevelToLoad");
}
}

答案 1 :(得分:0)

这是我使用的代码...

float DistanceMainCamPosSpawnedPrefab = 
Vector3.Distance(MainCam.transform.position, 
m_SpawnedOnePrefab.transform.position); // the m_SpawnedOnePrefab would be your marker


if (DistanceMainCamPosSpawnedPrefab > .3f && DistanceMainCamPosSpawnedPrefab <  
.5f)
   {
      // run your code here
    }