Babylon.js OnIntersectionEnterTrigger不能用相机触发

时间:2016-11-30 20:25:52

标签: javascript html5 typescript babylonjs

我正在使用Babylon.js 2.4.0

我有一个从.obj文件加载的网格(沙发形状),以及一个像这样设置的摄像头:

let camera = new BABYLON.FreeCamera('camera1', new BABYLON.Vector3(0, 2, 0), scene);

camera.checkCollisions = true;
camera.applyGravity = true;
camera.ellipsoid = new BABYLON.Vector3(1, 1, 1);
camera.attachControl(canvas, false);
camera.speed = 0.5;
camera.actionManager = new BABYLON.ActionManager(scene);

我想设置一个活动,这样当我走过沙发时,"十字路口"登录到控制台:

let action = new BABYLON.ExecuteCodeAction(
  { trigger: BABYLON.ActionManager.OnIntersectionEnterTrigger, parameter: { mesh: couchMesh }},
  (evt) => {
    console.log("intersection");
  }
);

this.camera.actionManager.registerAction(action);

当我浏览网格时,没有任何内容记录到控制台。

我已经使用他们提供的示例在Babylon.js Playground上创建了一个示例,以检查我的网格或相机设置是否有问题,并且它不会出现是(操场也不工作)。

1 个答案:

答案 0 :(得分:1)

Babylon.js中的摄像头没有动作管理器,所以即使你设置了一个它也不会真正起作用。

要使用动作管理器使其工作,您可以在摄像机周围定义一个具有预定义大小的不可见框,并将动作管理器附加到创建的网格物体上。然后将网格的父级设置为摄像机,您就完成了。这是您的游乐场,有这些变化 - http://www.babylonjs-playground.com/#KNXZF#3

另一个解决方案是使用巴比伦js的内部碰撞系统,并设置相机的onCollide功能实际上做一些事情:)这是例子 - http://www.babylonjs-playground.com/#KNXZF#4

请注意,在第二个游乐场,相机不会通过盒子,因为碰撞系统阻止它这样做。我不确定你的用例,所以很难说哪两个会更好用。

如果您需要一个“门”系统(例如,知道玩家何时通过大门),请使用第一种方法。第二个更清洁,但有其缺点。