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的游戏对象