我想在一层楼和4面墙内放置一个盒子,这样盒子的移动就在一个约束范围内。此示例显示地板和后墙,效果良好。然而我想添加左/右和前墙,这样它就不会超过这些界限。
添加<PhyPlane color="lightblue" position={[0, 0, 10]} />
会在用户附近添加另一个平面,这会让物理框变得一团糟。它们会被挤出当前的相机视图,而不是像最初的示例那样直接下降。
但盒子在3架飞机内,所以它们为什么会受到飞机命中盒子的影响是没有道理的。
如何在长方体周围创建边界平面长方体,使其不会移动超过该大小。就像如果盒子是10x10,如果它撞到侧面,那么它就会像普通物理物体撞到墙上一样相互作用。
编辑
即使只有两个平面,<PhyPlane color="lightblue" position={[0, 0, 10]} />
使用该代码将现有背板修改为前平面,box对象也会突然消失。
我想知道问题是否在于所有事物的渲染顺序。因此,所有对象都会同时渲染到场景中。长方体和平面都从原点[0, 0, 0]
开始,然后平面移动到[0, 0, 10]
,这会将长方体推向那个方向。
飞机是否可以设置为在到达预定位置之前不登记任何项目?
似乎,如果我将质量设置为0,或者键入不为动态的,框最初不会被平面推动。然后我只需要在场景加载后将类型设置回动态。
可以肯定我想要的是不可能的。useCannon平面实际上并没有正确地遵守设定的宽度/高度。假设你将其设置为[10,10],它实际上仍然会为宽度/高度创建一个不可见的平面,因此对象会受到远远超出设置w/h的影响。
因此,平面从原点加载,然后向位置集移动。由于对象也是从原点加载的,因此平面会沿移动方向推动对象。所以,如果你有一个前后平面,它会把物体推向前面,但物体无法通过平面。
我试着用一个盒子代替,将类型设置为静态,将创建4堵墙围绕";地面;就像我想要的。我相信箱子能工作是因为载荷发生在设定的位置,而不是从原点,因此不会发生碰撞推动。
然而,当物体的脉冲过高时,物体只是通过墙盒而不是停止。使用平面时不会出现此问题,但平面存在上述问题。。。
使用平面作为地面。然后用盒子做侧面。盒子不像飞机那样有奇怪的物理效果。
请注意,如果对象将具有高脉冲,则深度必须大于10。较低的深度(如0.5(会使长方体与平面一样平坦,但当对象的脉冲过高时,对象可能会夹住长方体。碰撞甚至不会被检测到,因为物体移动的速度有多快。也就是说,在记录onCollide事件时,对象穿过墙时不会显示任何内容。
即
// Using react fiber, drei helpers and useCannon
// Create back wall, width/height 100
<Box args={[100, 100, 10]} position={[0, 0, -10]}>
<meshBasicMaterial />
</Box>