Unity - 在 RayCast 命中时的游戏对象定位没有剪辑

Posted

技术标签:

【中文标题】Unity - 在 RayCast 命中时的游戏对象定位没有剪辑【英文标题】:Unity - GameObject positioning at RayCast hit without clipping 【发布时间】:2021-08-03 07:46:36 【问题描述】:

因此,我正在开发一款具有基本构建功能的 VR 游戏,并使用玩家手部 Raycast 击中的位置作为预览游戏对象必须去的位置。但很明显,当我这样做时,游戏对象会穿过 Hit 网格。我正在努力寻找避免这种情况的方法。

我想出了一个解决方案,但没有让它以任何方式工作。也许这是我的想法,也许是我的编程知识,不知道,但是很好。就是这样。

所以 Preview GameObject Transform 设置为 HitPoint 变换并从碰撞点移开,直到不再发生碰撞。我猜?我只提出性能要求很高的解决方案,而且它们甚至都不起作用。有人知道一个好的解决方案吗?

提前致谢!

【问题讨论】:

您好。发布您迄今为止尝试过的内容以及您遇到的问题。带有代码示例的问题会得到更快的关注。 【参考方案1】:

这听起来像是你在寻找Physics.ComputePenetration

计算将给定对撞机以指定姿势分开所需的最小平移。

因此,您需要在放置的对象上使用Collider(无论如何,命中的对象已经有一个),然后执行例如

// Wherever you get this from
Collider objectToPlace;

if(Physics.Raycast(yourRay, out var hit))

    objectToPlace.trabsform.position = hit.point;

    if(Physics.ComputePenetration(objectToPlace, objectToPlace.transform.position, objectToPlace.transform.rotation, hit.collider, hit.transform.position, hit.transform.rotation, out var direction, out var distance))
    
        objectToPlace.position += direction * distance;
    

【讨论】:

直到现在我才能测试它,但它只是添加它,测试,然后我们就这样解决了我的问题。非常感谢你! ComputePenetration 是我需要的! 我注意到它在非凸网格对撞机上并没有真正起作用,幸运的是这不是什么大问题,但有什么办法可以让它起作用吗?

以上是关于Unity - 在 RayCast 命中时的游戏对象定位没有剪辑的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D 灵巧小知识点 ☀️ | 快速查找场景中勾选Raycast Target的游戏对象

Unity (C#) - 如何在销毁/重生系统中挑选出被 Raycast 检测到的 GameObject

Unity3D_(API)射线检测

Unity raycast返回对象的中心,而不是点

unity检测玩家自动开火

unity判断任务在哪个房间