在 Unity 中检测快速碰撞

问题描述

所以我正在制作一个类似于 Splash Canyons (link) 的游戏,我必须在其中检测隐形刀片(跟随手指位置)和棋盘的碰撞点。当我缓慢切割时,我能够做到这一点,但是当我快速切割时,unity 无法检测到手指和棋盘的碰撞。我该怎么做?

我尝试过的方法

  1. 刚体碰撞:刀片是一个没有网格渲染器的小球体,但有一个非运动刚体(插值 = 无,碰撞检测 = 连续),以及一个启用了 isTrigger 的球体碰撞器。检测与(板)碰撞的对象具有未选中 isTrigger 的框对撞机,其父级有一个刚体,插值为无,碰撞检测为离散(不过我已经尝试了很多方法来切换这个)。 Rigidbody 附加到碰撞对象的父对象,因为父对象也有一个 Hinge Joint 组件,Rigidbody 是必须的。

  2. 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));
         }
     }
    
  3. Physics.OverlapSphere:也尝试过这种方法,但仍然面临着快速滑动的问题。也有更多的问题。代码:-

     foreach (Collider c in Physics.OverlapSphere(transform.position,0.1f)) {
         if (c.transform.parent.tag == "Plank") {
             c.GetComponent<Plank>().RegisterCut(transform.position);
         }
     }
    
  4. 尝试更改项目设置中的时间设置,但这让很多事情变得更糟,仅就碰撞而言。 这些是我迄今为止尝试过的方法。如果有人能帮助我仅通过刚体方法解决这个问题,那就太好了。

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)