问题描述
所以我正在制作一个类似于 Splash Canyons (link) 的游戏,我必须在其中检测隐形刀片(跟随手指位置)和棋盘的碰撞点。当我缓慢切割时,我能够做到这一点,但是当我快速切割时,unity 无法检测到手指和棋盘的碰撞。我该怎么做?
我尝试过的方法:
-
刚体碰撞:刀片是一个没有网格渲染器的小球体,但有一个非运动刚体(插值 = 无,碰撞检测 = 连续),以及一个启用了 isTrigger 的球体碰撞器。检测与(板)碰撞的对象具有未选中 isTrigger 的框对撞机,其父级有一个刚体,插值为无,碰撞检测为离散(不过我已经尝试了很多方法来切换这个)。 Rigidbody 附加到碰撞对象的父对象,因为父对象也有一个 Hinge Joint 组件,Rigidbody 是必须的。
-
Raycasting:我也试过这个,但同样的,速度部分没有进展。此外,光线投射中出现的另一个问题是,当我们沿板的长度水平切割时,它记录了许多我当然不想要的切割。尽管如此,我还是附上了代码,以防万一有人注意到我是否遗漏了什么:
RaycastHit hit = new RaycastHit(); Vector3 screenPoint = cam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x,Input.mousePosition.y,from)); Ray ray = new Ray(screenPoint,new Vector3(screenPoint.x,screenPoint.y,to)); Debug.DrawRay(screenPoint,to)); if (Physics.Raycast(ray,out hit,1000)) { Debug.Log(hit.transform.name); if (hit.transform.tag == "Plank") { hit.transform.GetChild(0).GetComponent<Plank>().RegisterCut(new Vector3(hit.point.x,hit.point.y,0.0f)); } }
-
Physics.OverlapSphere:也尝试过这种方法,但仍然面临着快速滑动的问题。也有更多的问题。代码:-
foreach (Collider c in Physics.OverlapSphere(transform.position,0.1f)) { if (c.transform.parent.tag == "Plank") { c.GetComponent<Plank>().RegisterCut(transform.position); } }
-
尝试更改项目设置中的时间设置,但这让很多事情变得更糟,仅就碰撞而言。 这些是我迄今为止尝试过的方法。如果有人能帮助我仅通过刚体方法解决这个问题,那就太好了。
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)