碰撞检测有很多很好的东西,比如问题上的trix.colliders或代码片段,但实际上大多数东西都是旧的(一些函数如multiplyVector3被更改而其他函数被删除。我有一个Object3D(字符模型)和一个世界(3D模型:汽车,树木,建筑物等)。我可以用箭头键移动角色(在渲染循环中通过translateX / Y移动它。
我想要的是角色模型和其他一切之间的碰撞检测(除了地面和其他一些)。所以我需要在Object3D(Character)和WorldObjects [](所有对象)之间进行碰撞检测。
那么,现在有几种方法可以获得想要的结果,这是最好的(快速和可读)方式来执行此操作?现在问题(可能)如果它起作用:当角色与其他任何东西发生碰撞时,我怎么能阻止他可以向这个方向移动但是他可以向后,向右或向左移动?
答案 0 :(得分:11)
您可以使用对象的边界框来检测碰撞。边界框的类型为THREE.Box3
,并且有isIntersectionBox
,containsBox
或containsPoint
等有用的方法,可以满足您在检测碰撞时的所有需求。
使用它们就像这样简单:
var firstObject = ...your first object...
var secondObject = ...your second object...
firstBB = new THREE.Box3().setFromObject(firstObject);
secondBB = new THREE.Box3().setFromObject(secondObject);
var collision = firstBB.isIntersectionBox(secondBB);
如果方框相互碰撞/撞击, collision
将为真。
这可以让您了解如何使用边界框。
您还可以查看this example out。我认为这对你非常有用。
您也可以查看Physijs库,这是一个插件为three.js。
有人可能想要跟踪similar question on Stackoverflow。