【问题标题】:Get Vuforia AR Camera Compass Direction获取 Vuforia AR 相机指南针方向
【发布时间】:2017-04-27 17:33:54
【问题描述】:

我想弄清楚如何获得 Vuforia AR 相机指南针方向,即北/南/东/西。有人可以指导我吗?

尝试在下面使用,但 CameraDevice.Instance 没有任何属性来获取指南针方向。

在下面尝试过,来自不同的 Vuforia 帖子,看看有哪些属性,但这也没有。

// Get the fields
IEnumerable cameraFields = CameraDevice.Instance.GetCameraFields();

// Print fields to device logs    
foreach (CameraDevice.CameraField field in cameraFields) {    
   Debug.Log("Key: " + field.Key + "; Type: " + field.Type);    
}

尝试了类似下面的方法。

GameObject cam;
cam = GameObject.Find("ARCamera");

并尝试打印 cam.transform.forward,但它给了我类似 (0.0,0.0,1.0) 的信息。如果这是正确的方法,您能帮我了解如何从中获得方向吗?

更新: 我曾尝试过使用 Vector3.forward、right 等的解决方案。但它总是将 North 打印为方向,无论我拿着手机的方向如何。你能指导我这里有什么问题吗?我需要找到用户拿着手机的方向,以显示该方向的一些兴趣点。

我将此脚本附加到 ARCamera (vuforia) 对象本身,并在脚本的 start 方法中添加了语句。我也尝试将它们放在更新方法中,但仍然是相同的行为。

如果您需要更多详细信息,请告诉我。

GameObject cam; 
cam = GameObject.Find ("ARCamera"); 
var dir = cam.transform.forward; 
dir.y = 0; 
dir.Normalize (); 
if (Vector3.Angle(dir, Vector3.forward) <= 45.0) { 
    Debug.Log("In Start method.. North"); 
} else if (Vector3.Angle(dir, Vector3.right) <= 45.0) { 
    Debug.Log("In Start method.. East"); 
} else if (Vector3.Angle(dir, Vector3.back) <= 45.0) { 
    Debug.Log("In Start method.. South"); 
} else { 
    Debug.Log("In Start method.. West"); 
}

【问题讨论】:

    标签: c# unity3d vuforia


    【解决方案1】:

    如果您想获得游戏指南针,您可以从AssetStorehere 购买一个。
    但是如果您想自己免费制作,您可以从@987654322 开始@ 一个非常基本的

    EDIT1
    这是一个可以提供帮助的脚本

    GameObject cam; 
    cam = GameObject.Find ("ARCamera"); 
    
        if (cam.transform.eulerAngles.y >= 0 && cam.transform.eulerAngles.y <= 90)
        {
            print("Looking at NORTH");
        }
        else if (cam.transform.eulerAngles.y >= 91 && cam.transform.eulerAngles.y <= 180)
        {
            print("Looking at EAST");
        }
        else if (cam.transform.eulerAngles.y >= 181 && cam.transform.eulerAngles.y <= 270)
        {
            print("Looking at SOUTH");
        }
        else if (cam.transform.eulerAngles.y >= 271 && cam.transform.eulerAngles.y <= 360)
        {
            print("Looking at WEST");
        }   
     }
    

    【讨论】:

    • 谢谢。但我只想通过脚本知道用户将相机指向的方向。我不想创建游戏指南针。我只想在用户将相机指向的方向上显示一些兴趣点。所以我需要知道相同的方向。
    • 这和你问的完全不同。如果你看一下,我的第二个建议仍然会帮助你。
    • 是的。我尝试了一个类似于建议 2 中提到的解决方案,使用 Vector3.forward、right 等。 GameObject cam; cam = GameObject.Find (“ARCamera”); var dir = cam.transform.forward; dir.y = 0; dir.Normalize (); if (Vector3.Angle(dir, Vector3.forward)
    • 但无论我将手机指向哪个方向,它总是打印出 North。你能指导我我做错了什么吗?感谢您的帮助。
    • 是否可以使用您尝试过的脚本更新您的问题,并请说明您附加它的位置以及错误是什么,谢谢
    【解决方案2】:

    看起来 Unity 有一个叫做“Input.compass”的东西。所以,如果我在开始跟踪位置并使用 Input.compass.trueHeading 之前设置了“Input.compass.enabled=true”,它会给我方向(在eulerangle 术语,我相信)手机摄像头.. 从另一篇博文中找到 - https://blog.falafel.com/displaying-device-compass-unity/

    【讨论】:

    • 这是一个死链接,您可以在这里重新发布答案吗?谢谢
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多