ios - SceneKit - 几何穿透
解决方案
我认为你必须使用continuousCollisionDetectionThreshold
实例属性。此值为您提供身体必须经过的最小距离,以便 SceneKit 应用更精确(但 CPU/GPU 成本更高)的算法来检测与其他身体的接触。
var continuousCollisionDetectionThreshold: CGFloat { get set }
SceneKit 的物理引擎可以使用两种碰撞检测:
通过
discrete collision
检测,当 SceneKit 在渲染每一帧之前模拟物理时(参见timeStep和SCNSceneRendererDelegate),它会根据身体在该时间间隔内的速度更新每个物理体的位置,然后检查其新位置的身体是否与其他身体相交.通过
continuous collision
检测,SceneKit 会计算一个物体在每一帧中将穿过的体积,然后检查该体积是否与其他物体相交。此属性的值defaults to 0.0
,始终导致离散碰撞检测。当此值非零时,只要身体在一个timeStep内移动超过指定距离,SceneKit 就会应用连续碰撞。
离散碰撞检测提供高性能,但可能导致小型快速移动物体的结果不准确。连续碰撞检测具有性能成本并且仅适用于球形物理形状,但提供更准确的结果。
推荐阅读
- python - Scrapy - Django 中的 Reactor 不可重启
- c# - 使用 Web 请求在客户端获取和显示字符串
- java - 无法使用自动 IT 脚本连接到远程桌面
- webpack - webpack-bundle-analyzer.openAnalyzer 选项不起作用
- nativescript - 无法在设备上应用更改:错误是:cp:无法创建目录'/platforms/android/app/src':没有这样的文件或目录
- ios - ARKit 如何停止闪烁或如何将节点定位到相机,
- android - 如何在反应导航中获取当前路线名称?
- sql-server - 为什么我的 Sql 查询第二次运行更快?
- swift - 不同的 UICollectionViewCells 具有相同的地址
- html - Laravel:查看未显示 html 数据