#applyImpulseについて

1 messages · Page 1 of 1 (latest)

candid pebble
#

applyImpulseを使って自作エンティティをプレイヤーの向きに飛ばしたいのですがapplyImpulseは座標しか入れられないのか、向きを入れるとエラーを吐きます。どのようにすればよいのでしょうか?

potent osprey
#
import {world } from "@minecraft/server";

world.afterEvents.itemUse.subscribe(ev=>{
  const{itemStack,source}=ev;
  if(itemStack.typeId === "item:gun"){
  const a = {
    x: source.location.x,
    y: source.location.y,
    z: source.location.z,
  };
  const b = source.getViewDirection()
  const entity = source.dimension.spawnEntity("item:tama",a)
  entity.applyImpulse({x:<number>, y:<number>, z:<number>});
  }
});

のように、オブジェクトのx,y,zに数字を入れてください
そのベクトルの方向に吹っ飛びます
プレイヤーの向きに飛ばしたいときは、
entity.applyImpulse(source.getViewDirection());
のようにしてください

#

力を上げたい場合はsource.getViewDirection()で取得したもののx,y,z全てに任意の数字を掛けてください

candid pebble
#

applyImpulse()のなかにgetViewをいれてあげればいいのか!!ありがとうございます!!

candid pebble
#

二度もすみません。

#

メンションになってたらすみません!!以後気を付けます。

potent osprey
#
const scale = <number>;
const vector = source.getViewDirection();
entity.applyImpulse({x:vector.x * scale, y:vector.y * scale, z:vector.z * scale});

簡単に書くとこんな感じです

#

前にVector3のclassが削除されたのですが、そういうライブラリ(?)を配布されている方がいた気がするので検索してみてください

candid pebble
#

お聞きしたことの補足までありがとうございます!!大変助かりました!

candid pebble
#

すみません、似たようなことについてお聞きしたくここでご質問させていただきます。

#

今お教えしていただいたコードで試したのですが、下に飛ばすときに自分にあたってしまい消えてしまうため、いつでも自分の一つ前にスポーンさせたいのですが、どのようにすればよいのでしょうか。

potent osprey
#

スポーンさせるエンティティがprojectileであれば、そのエンティティのprojectleコンポーネントを取得し、その中のownerをプレイヤーにすれば、そのプレイヤーに弾は当たらなかった気がします

candid pebble
#

なるほど..ありがとうございます!!試してみます!!

candid pebble
#

すみませんscriptAPIが初心者過ぎてownerの設定の仕方がわかりませんでした..教えていただいてもよろしいでしょうか。何度もすみません。

#

最後の分にentity.ownerをつけてみたのですが、あっているのでしょうか?

potent osprey
#
entity.getComponent("projectile").owner = source;

でできます

candid pebble
#

ありがとうございます!!お教えいただいたもので勉強させていただきます!

potent osprey
#

わからないときは簡単なテンプレートや説明が書いてあるのでドキュメント見るといいですよ