0

だから私はここの投稿とドキュメントをふるいにかけ、BoxMesh を本質的にマウスに追従させる方法を見つけようと試みました。最終的には、Heroes of Loot のようなジョイスティック タッチ コントロールや、タッチ ジョイスティックを使用する他のゲームを作成します。しかし今のところ、方向速度を適切に機能させることができるようにしたいと考えています。

だからここに私が私のマウスダウンイベントに持っているものがあります:

if (scene.mouseControls.isDown) {
  var coords = scene.mouseControls.screenCoords;
  var vector = new THREE.Vector3();

  vector.set(
    ( scene.mouseControls.screenCoords.x / window.innerWidth ) * 2 - 1,
    0.5,
    - ( scene.mouseControls.screenCoords.y / window.innerHeight ) * 2 + 1
  );
  vector.unproject(scene.camera);

  var p1 = this.mesh.position;
  var p2 = vector;
  var angle = Math.atan2(p2.x - p1.x, p2.z - p1.z);
  var velX = Math.sin(angle) * 20;
  var velZ = Math.cos(angle) * 20;

  console.log(vector.x, vector.z);

  this.mesh.setLinearVelocity(new THREE.Vector3(velX, 0, velZ));
}
else {
  this.mesh.setLinearVelocity(notMovingVector);
}

ただし、決定された速度が前後に反転するように見えるため、プレーヤーは非常に神経質になります。

マウスの座標を設定する方法は次のとおりです。

window.addEventListener(activeEventList[POINTER_MOVE], function (e) {
  if (e.touches) {
    var t = e.touches[0];
    _this.screenCoords.x = t.clientX;
    _this.screenCoords.y = t.clientY;
  }
  else {
    _this.screenCoords.x = e.clientX;
    _this.screenCoords.y = e.clientY;
  }
});

シーンが全画面表示であるため、スクロール オフセットなどは使用しません。

編集

以前の方向コードを削除しました。atan2 を使用して角度を計算し、代わりにそれを適用します。2D ゲームでこれを行った方法に似ています。

4

1 に答える 1