当用户触摸GameObject时,如何阻止ARCore模型放置?

Dae*_*vin 4 android raycasting arcore

免责声明:我对Unity3D和ARCore还是很陌生,所以请多多包涵。

我在Unity3D中使用ARCore创建一个场景,用户可以在其中选择ScrollView屏幕上的模型,然后使用Google的ARCore框架放置它们。

到目前为止,我已经开始工作了;用户触摸中的模型ScrollView(该模型在屏幕上显示Panel为当前选定的模型,因为我的计划是要具有ScrollView切换可见性以获取更多的屏幕视图空间)。

问题在于,当用户选择模型时,ARCore会将模型放置在检测到的平面上,该平面位于ScrollView和选择的模型Panel对象所在的位置(即使您初次触摸以开始滚动ScrollView)。请参阅下文以帮助可视化。

在此处输入图片说明

如何使ARCore 不会将对象放置在ScrollView和之后Panel?我尝试过的是在控制器(实际上只是Google HelloARController)中添加了一个对象集合,这些对象我想阻止ARCore Raycast并使用进行遍历,foreach以查看集合中是否Raycast命中了GameObjects

Touch touch;
if (Input.touchCount < 1 || (touch = Input.GetTouch(0)).phase != TouchPhase.Began)
{
    return;
}

//my code; above is Google's
foreach (var item in BlockingObjects) { //BlockingObjects is a List<GameObject>
    if (IsTouchInObject(FirstPersonCamera.ScreenPointToRay(touch.position), item)) {
        return;
    }
}
//end of my code; below is Google's

TrackableHit hit;
TrackableHitFlag raycastFilter = TrackableHitFlag.PlaneWithinBounds | TrackableHitFlag.PlaneWithinPolygon;
Run Code Online (Sandbox Code Playgroud)

使用如下IsTouchInObject定义的函数:

private bool IsTouchInObject(Ray ray, GameObject obj) {
    RaycastHit rch;
    Physics.Raycast (ray, out rch);
    return (rch.collider != null);
}
Run Code Online (Sandbox Code Playgroud)

失败的rch.collider总是这样 null(我知道我根本没有针对该对象进行测试,一旦我能够Raycast真正与碰撞,我就会担心GameObject)。我尝试将Physics/ Physics2DRaycastHit/ RacastHit2D结合使用,并将BoxCollider/ BoxCollider2D组件附加到要检测击中的对象上,但是我所做的一切都没有用。

(此解决方案取自Unity3D论坛上的某个问题,在该论坛上有人遇到了类似的问题,但AR却不存在,因为他们自己的3D世界带有2D叠加层。抱歉,我找不到该论坛帖子提供参考)。

任何帮助将不胜感激。

编辑/注意:我现在注意到上有一个Graphic Raycaster组件Canvas,其中包含我ScrollViewPanel。我尝试将设置Blocking ObjectsTwo D(同时Box Collider 2DScrollView和中添加Panel)和设置Blocking MaskIgnore Raycast(以及其他几件事)无济于事。这些属性是否可以组合使用值?

本着今天的精神:

帮帮我,StackOverflow ...呃... Kenobi ...您是我唯一的希望。

Sai*_*ico 5

您是否尝试过用以下方法包装Raycast:

 if (!EventSystem.current.IsPointerOverGameObject(touch.fingerId)) {...}
Run Code Online (Sandbox Code Playgroud)

https://answers.unity.com/questions/1406243/ui-in-arcore-helloar-example.html