放置Gameobject使其始终位于屏幕中心

时间:2019-05-07 09:31:23

标签: c# unity3d augmented-reality arcore gameobject

我试图将游戏对象定位为始终位于屏幕中央。我正在使用以下代码,

sphere.SetActive(true);
Vector3 lookAtPosition = FirstPersonCamera.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, FirstPersonCamera.nearClipPlane));
sphere.transform.position = lookAtPosition;

但是由于某些原因,上面的代码根本看不到游戏对象。

所以,我试图对其进行射线广播并使其可见。

以下是相应的代码,

TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinPolygon | TrackableHitFlags.FeaturePointWithSurfaceNormal;

TrackableHit hit;
if (Frame.Raycast(screenCenter.x, screenCenter.y, raycastFilter, out hit))
{
    var pose = hit.Pose;

    sphere.SetActive(true);
    sphere.transform.position = pose.position;
    sphere.transform.up = pose.up;
}

使用上面的代码偶尔会显示游戏对象,但是它并没有精确地居中显示在屏幕上,也不会永远显示。我怎样才能解决它?

2 个答案:

答案 0 :(得分:1)

  • 可能是您的对象位于相机顶部,而在其视野之外
  • 排序层上的问题

检查器和场景窗口的屏幕快照可能会有所帮助。

答案 1 :(得分:1)

最简单的方法是使用以下代码(这是Android Studio中ARCore SDK的示例代码):

static const Pose oneMeterAway = Pose.makeTranslation(0, 0, -1);
objectPose = camera.getPose().extractTranslation().compose(oneMeterAway);

然后您需要每帧更新一次

希望这会有所帮助。