定位游戏对象以始终位于屏幕中心
Positioning a Gameobject to stay in screen center always
我正在尝试将游戏对象定位为始终位于屏幕中央。我正在使用以下代码来执行此操作,
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;
}
游戏对象偶尔会出现在上面的代码中,但它并没有完全居中于屏幕并且不会永远出现。我怎样才能解决这个问题?
- 可能是您的物体在相机顶部,在其视野之外
- 排序层有问题
检查器和场景的屏幕截图 window 可能会有所帮助。
最简单的方法是使用以下代码(这是 Android Studio 中 ARCore SDK 的示例代码):
static const Pose oneMeterAway = Pose.makeTranslation(0, 0, -1);
objectPose = camera.getPose().extractTranslation().compose(oneMeterAway);
然后你需要每帧更新它。
希望对您有所帮助。
我正在尝试将游戏对象定位为始终位于屏幕中央。我正在使用以下代码来执行此操作,
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;
}
游戏对象偶尔会出现在上面的代码中,但它并没有完全居中于屏幕并且不会永远出现。我怎样才能解决这个问题?
- 可能是您的物体在相机顶部,在其视野之外
- 排序层有问题
检查器和场景的屏幕截图 window 可能会有所帮助。
最简单的方法是使用以下代码(这是 Android Studio 中 ARCore SDK 的示例代码):
static const Pose oneMeterAway = Pose.makeTranslation(0, 0, -1);
objectPose = camera.getPose().extractTranslation().compose(oneMeterAway);
然后你需要每帧更新它。
希望对您有所帮助。