我刚刚开始学习Google Tango,我在理解如何实现局域描述学习方面遇到了一些麻烦。我已经按照文档中的一个How-to-guide,一个在AR中放置虚拟对象的那个,我希望应用程序能够记住放置这些小猫的地方。我将附加Unity中的场景和脚本,我试图为AreaDEscription启用SaveCurrent方法。 The scene from Unity以下代码主要来自How-To-Guide,我试图创建另一个Thread来保存当前的AreaDescription
public class KittyUIController : MonoBehaviour
{
Thread thread;
public GameObject m_kitten;
private TangoPointCloud m_pointCloud;
void Start()
{
m_pointCloud = FindObjectOfType<TangoPointCloud>();
thread = new Thread(Thread123);
}
void Update()
{
if (Input.touchCount == 1)
{
// Trigger place kitten function when single touch ended.
Touch t = Input.GetTouch(0);
if (t.phase == TouchPhase.Ended)
{
PlaceKitten(t.position);
thread.Start();
}
}
}
void PlaceKitten(Vector2 touchPosition)
{
// Find the plane.
Camera cam = Camera.main;
Vector3 planeCenter;
Plane plane;
if (!m_pointCloud.FindPlane(cam, touchPosition, out planeCenter, out plane))
{
Debug.Log("cannot find plane.");
return;
}
// Place kitten on the surface, and make it always face the camera.
if (Vector3.Angle(plane.normal, Vector3.up) < 30.0f)
{
Vector3 up = plane.normal;
Vector3 right = Vector3.Cross(plane.normal, cam.transform.forward).normalized;
Vector3 forward = Vector3.Cross(right, plane.normal).normalized;
Instantiate(m_kitten, planeCenter, Quaternion.LookRotation(forward, up));
}
else
{
Debug.Log("surface is too steep for kitten to stand on.");
}
}
void Thread123()
{
AreaDescription.SaveCurrent();
}
public void OnApplicationQuit()
{
thread.Abort();
}
}
答案 0 :(得分:1)
我没有足够的声誉点评论,所以我在这里发表我的答案。您应该提供有关哪些有效,哪些无效的更多详细信息。
首先,从this page开始,因为您需要在应用中正确设置AreaLearning。然后,检查this code和相应的AreaLearning场景示例,这就是您想要做的所有事情。
不是在turorial或代码中的东西,并且使其工作非常重要的是你需要检查“Tango AR Camera”的“Tango AR姿势控制器”中的“使用区域描述”预制(或Tango相机,如果您使用的是最新的SDK预制件),否则您的物体将不会放置在ADF基础框架上。
如果我不得不总结一下,工作流程是:
在示例中,他们在保存后重新加载场景,因此他们返回到AreaDescriptionPicker屏幕,但由您决定如何执行此操作。
我真的不知道还有什么要说的。希望这会有所帮助。