免责声明:我对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'sforeach (var item in BlockingObjects) { //BlockingObjects is a List<GameObject> if (IstouchInObject(FirstPersonCamera.ScreenPointToRay(touch.position), item)) { return; }}//end of my code; below is Google'sTrackableHit 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 – 当用户触摸GameObject时,如何阻止ARCore模型放置?全部内容,希望文章能够帮你解决android – 当用户触摸GameObject时,如何阻止ARCore模型放置?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)