免责声明:我对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;
使用如下定义的IsTouchInObject函数:
private bool IsTouchInObject(Ray ray, GameObject obj) {
RaycastHit rch;
Physics.Raycast (ray, out rch);
return (rch.collider != null);
}
失败的是rch.collider总是为null(我知道我根本没有测试对象,我会担心一旦我能让Raycast实际上与GameObject碰撞).我已经尝试将Physics / Physics2D与RaycastHit / RacastHit2D一起使用,并将BoxCollider / BoxCollider2D组件附加到我想要检测到的对象,但我没有做任何工作.
(这个解决方案取自Unity3D论坛上的某些东西,其中有人有类似的问题,但没有AR,他们自己的3D世界有2D覆盖.我找不到该论坛帖子提供参考,对不起).
任何帮助将不胜感激.
编辑/注意:我现在已经注意到Canvas上有一个Graphic Raycaster组件,它包含我的ScrollView和Panel.我已经尝试将阻挡对象设置为两个D(同时将一个Box Collider 2D添加到ScrollView和Panel)和阻止掩码以忽略Raycast(以及其他一些东西)无济于事.这些属性的值是否可以组合使用?
本着今天的精神:
帮助我,StackOverflow ……呃…… Kenobi ……你是我唯一的希望.
解决方法:
你有没有试过用以下方法包装Raycast:
if (!EventSystem.current.IsPointerOverGameObject(touch.fingerId)) {...}
https://answers.unity.com/questions/1406243/ui-in-arcore-helloar-example.html
标签:android,arcore,raycasting 来源: https://codeday.me/bug/20190727/1550633.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。