回答編集履歴

2

間違い修正

2018/12/22 07:44

投稿

katsuko
katsuko

スコア3469

test CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
 
48
48
 
49
- まず前提として、Z軸/Y軸/Z軸というのは、お互い直角に交わっていなければなりません。(わかっていることとは思いますが、今回の肝ですので、確認しておきます。)
49
+ まず前提として、Z軸/Y軸/X軸というのは、お互い直角に交わっていなければなりません。(わかっていることとは思いますが、今回の肝ですので、確認しておきます。)
50
50
 
51
51
 
52
52
 

1

ローカルのY軸を求める説明を追加

2018/12/22 07:44

投稿

katsuko
katsuko

スコア3469

test CHANGED
@@ -27,3 +27,73 @@
27
27
 
28
28
 
29
29
  まぁ、横に傾げる事がなければ、Vector3.upを指定しておけば間違いないというのは、他の回答者さんの言うとおりです。
30
+
31
+
32
+
33
+ ---
34
+
35
+
36
+
37
+ > すみません、「targetへのベクトル、worldUpベクトルと同じ平面」がわからなかったです。
38
+
39
+
40
+
41
+ そこを突っ込みますか。まぁ、自分でも説明が下手だなぁと思っていたところなんですがw
42
+
43
+
44
+
45
+ とりあえず指向を変え、ヒントとなるworldUpからどのようにローカルのY軸を決定できるか、説明しましょうか。私の回答の「外積を2回求めるだけ」という部分についてです。
46
+
47
+
48
+
49
+ まず前提として、Z軸/Y軸/Z軸というのは、お互い直角に交わっていなければなりません。(わかっていることとは思いますが、今回の肝ですので、確認しておきます。)
50
+
51
+
52
+
53
+ 外積について、ご存知かもしれませんが説明します。
54
+
55
+ 2つのベクトルの外積で何が求められるか。それは、お互いが共に垂直に交わるベクトルが求まります。
56
+
57
+
58
+
59
+ さて、targetへのベクトル=ローカルのZ軸と、ローカルのY軸…のヒントとなるworldUpの2つのベクトルの外積を求めると何が求まるか。
60
+
61
+ ローカルのZ軸とローカルのY軸(のヒント)が垂直に交わるベクトル、ですから、**ローカルのX軸**になるわけです。
62
+
63
+
64
+
65
+ 更に、ローカルのZ軸と、今求めたローカルのX軸の外積を求めると、何が求まるか。
66
+
67
+ ローカルのZ軸とローカルのX軸が垂直に交わるベクトル、ですから、これが**本当のローカルのY軸**になります。
68
+
69
+
70
+
71
+ このように、targetへのベクトルとY軸のヒントとなるベクトルの2つで、ローカルのY軸(と、ついでにローカルのX軸も)求めることができるのです。
72
+
73
+
74
+
75
+ * [TransformのLookAtをUnity APIを使わずに書く](http://edom18.hateblo.jp/entry/2018/04/18/104054)
76
+
77
+
78
+
79
+ 上記のページの、
80
+
81
+
82
+
83
+ ```cs
84
+
85
+ Vector3 z = (target - transform.position).normalized;
86
+
87
+ Vector3 x = Vector3.Cross(Vector3.up, z).normalized;
88
+
89
+ Vector3 y = Vector3.Cross(z, x).normalized;
90
+
91
+ ```
92
+
93
+
94
+
95
+ が、私がいま説明した内容ですね。(worldUpがVector3.up固定になっていますが)
96
+
97
+
98
+
99
+ これらの内容は、カメラ行列を作るための常套手段なので、その辺りを勉強すると良いかもしれません。