我一直在研究其他人针对此提出的解决方案,并且我已经有一定数量的冲突检测可以正常工作。但这是围绕着一个与许多物体碰撞的物体而来的。。。但是我现在不得不反击子弹。因此,我有很多物体可能与许多物体发生碰撞。
这是我的英雄撞墙的基本碰撞检测。
for (var vertexIndex = 0; vertexIndex < hero.geometry.vertices.length; vertexIndex++){
var localVertex = hero.geometry.vertices[vertexIndex].clone();
var globalVertex = hero.matrix.multiplyVector3(localVertex);
var directionVector = globalVertex.sub( hero.position );
var ray = new THREE.Raycaster( hero.position, directionVector.clone().normalize() );
var collisionResults = ray.intersectObjects( collidableMeshList );
if ( collisionResults.length > 0 && collisionResults[0].distance < directionVector.length() )
{
console.log('BANG!')
}
}
麻烦的是,如果我将相同的检测代码放入每个子弹的循环中,它自然会减速到无法使用的速度。
我可以实施更基本的检测方法来解决此问题吗?
我正在慢慢了解Three.js,并确定我缺少一些简单的东西,但无法理解其他示例。在正确方向上的任何帮助或切入点将不胜感激。
修改
我一直在玩耍,很明显,我的第一次尝试失败了,而且距离还不很远,但我想知道如果我尝试获得子弹头位置并查看其位置是否在距离目标线以内,我是否会更近一些?我的碰撞数组中的对象。
不确定,我之前已经看到很多人遇到过这种情况,但都在努力寻找一种足以让我理解的解决方案。
答案 0 :(得分:0)
好吧...我的collidableMeshList需要一些清理,但是我发现这种方法不会引起太多性能问题(因为它不会使事情放慢太多),我从this thread中发现了这一点
看看代码,如果有人认为可以进一步改进,请告诉我!
sudo make -jN
查看附带的线程以获取有关其工作方式的更多信息。