質問編集履歴
6
コードの修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -27,7 +27,7 @@
|
|
27
27
|
|
28
28
|
const normalVel = arrow.velocity.clone().normalize(); // 矢の velocity を正規化
|
29
29
|
normalVel.add(arrow.mesh.position); // 正規化した数値に矢の現在地を足す
|
30
|
-
arrow.mesh.lookAt(
|
30
|
+
arrow.mesh.lookAt(normalVel); // lookAtに指定
|
31
31
|
```
|
32
32
|
|
33
33
|
|
5
コード部分が間違っていたので修正。前回のコードは、プレイヤーが原点位置にいたからうまくいってたようです。
test
CHANGED
File without changes
|
test
CHANGED
@@ -21,15 +21,15 @@
|
|
21
21
|
飛んでいる矢のvelocityをlookAtに指定すると実現できました。
|
22
22
|
lookAt関数を持っているのは geometry と Object3d になり、 geometry のlookAtは毎フレーム変更するような使い方ではないと document にありまして、その場合は Object3d(Mesh) の lookAt を使ってくださいとのことでしたのでした。
|
23
23
|
|
24
|
-
まず矢のgeometry.lookAtで矢を放つ人の位置を指定します。これで矢の向きが揃います。その後に毎フレーム meshのlookAtで矢のvelocityを指定します。
|
25
24
|
|
25
|
+
```typescript
|
26
|
-
arrow.geometry.
|
26
|
+
arrow.geometry.rotateX(Math.PI / 2) // 矢の形状が垂直だったので横にする
|
27
27
|
|
28
|
+
const normalVel = arrow.velocity.clone().normalize(); // 矢の velocity を正規化
|
28
|
-
|
29
|
+
normalVel.add(arrow.mesh.position); // 正規化した数値に矢の現在地を足す
|
29
|
-
arrow.mesh.lookAt(
|
30
|
+
arrow.mesh.lookAt(v); // lookAtに指定
|
30
|
-
|
31
|
+
```
|
31
32
|
|
32
|
-
//velocityは正規化など必要ありませんでした。
|
33
33
|
|
34
34
|
あれこれ複雑なことをしてましたが、たったこれだけでした...。
|
35
35
|
回答していただいた cx20 さん、ありがとうございます。おかげで実現できました。
|
4
少し補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -19,11 +19,17 @@
|
|
19
19
|
### 追記:解決しましたので同じ質問んでこられた方へ
|
20
20
|
|
21
21
|
飛んでいる矢のvelocityをlookAtに指定すると実現できました。
|
22
|
-
lookAt関数を持っているのは geometry と Object3d になり、 geometry のlookAtは毎フレーム変更するような使い方ではないと document にありまして、その場合は Object3d(Mesh) の lookAt を使ってくださいとのことでしたのでした。
|
22
|
+
lookAt関数を持っているのは geometry と Object3d になり、 geometry のlookAtは毎フレーム変更するような使い方ではないと document にありまして、その場合は Object3d(Mesh) の lookAt を使ってくださいとのことでしたのでした。
|
23
|
+
|
24
|
+
まず矢のgeometry.lookAtで矢を放つ人の位置を指定します。これで矢の向きが揃います。その後に毎フレーム meshのlookAtで矢のvelocityを指定します。
|
25
|
+
|
26
|
+
arrow.geometry.lookAt(player.position);
|
23
27
|
|
24
28
|
update() {
|
25
|
-
mesh.lookAt(
|
29
|
+
arrow.mesh.lookAt(arrow.velocity)
|
26
30
|
}
|
31
|
+
|
32
|
+
//velocityは正規化など必要ありませんでした。
|
27
33
|
|
28
34
|
あれこれ複雑なことをしてましたが、たったこれだけでした...。
|
29
35
|
回答していただいた cx20 さん、ありがとうございます。おかげで実現できました。
|
3
解決したので方法を追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -15,3 +15,15 @@
|
|
15
15
|
|
16
16
|
何か考え方のヒントなどありましたら教えていただけたらと思います。
|
17
17
|
よろしくお願いいたします。
|
18
|
+
|
19
|
+
### 追記:解決しましたので同じ質問んでこられた方へ
|
20
|
+
|
21
|
+
飛んでいる矢のvelocityをlookAtに指定すると実現できました。
|
22
|
+
lookAt関数を持っているのは geometry と Object3d になり、 geometry のlookAtは毎フレーム変更するような使い方ではないと document にありまして、その場合は Object3d(Mesh) の lookAt を使ってくださいとのことでしたのでした。このとき velocityは正規化など必要ありませんでした。
|
23
|
+
|
24
|
+
update() {
|
25
|
+
mesh.lookAt(collider.velocity)
|
26
|
+
}
|
27
|
+
|
28
|
+
あれこれ複雑なことをしてましたが、たったこれだけでした...。
|
29
|
+
回答していただいた cx20 さん、ありがとうございます。おかげで実現できました。
|
2
typo。そして lookAt という関数はGeometryにありました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
飛んでいるオブジェクトのポジション(Vector3)を、毎フレーム保存して、前回の場所と比較して差分を出したり、角度を出したりしているのですが、それが必要な情報なのかと、正しいとして、一緒に飛んでいるMesh(棒状)の角度に反映させる方法・計算がわかりません。
|
13
13
|
|
14
|
-
検索して調べてるものの、Unityでは、meshにlo
|
14
|
+
検索して調べてるものの、Unityでは、meshに lookAt という関数があって、差分のベクトルを指定することで実現できる(meshの角度を飛んでる方向に合わせる)と読みましたが、Threeにはそのような関数がありません。
|
15
15
|
|
16
16
|
何か考え方のヒントなどありましたら教えていただけたらと思います。
|
17
17
|
よろしくお願いいたします。
|
1
「弓の角度」ではなく「矢の角度」でした。
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
飛んでいる
|
1
|
+
飛んでいる矢の角度を進行方向に合わせるには
|
test
CHANGED
File without changes
|