Розмір відео: 1280 X 720853 X 480640 X 360
Показувати елементи керування програвачем
Автоматичне відтворення
Автоповтор
うっ、頭が・・・でもこういった内容は本当助かります!
まだ!まだ半分だから!(正直、ベクトルの角度くらいはUE側で関数を作っておいてほしい気持ち…あっすみませんすみません!!!)
有難い😭😭👏
よかったです!!!
めっちゃためになりました!0にならない件で笑ってしまったw
やりながら、あれ!?!?とおもってました笑
素人質問で申し訳ないのですが、aとbのベクトルがx(1,1,1)y(1,1,1)z(1,1,1)と仮定した場合ノードの処理順から考えてnormalize(a);normalize(b);dot(a,b); となると思うのですがそれだと戻り値が-3~3になりませんか?acosは引数が-1~1だと思うので どういう理屈になっているのか非常に悩んでおりますなぜnormalize(dot(a,b));じゃないのかわかりません・・・
まず、a=b=(1,1,1)を考えたときに、内積a*b = ax*bx + ay*by + az*bz = 1*1 + 1*1 + 1*1 = 3になります。また、内積は|a| * |b| * cosΘ(|a|はベクトルaの長さ)と表現することもできます。|a|は√3になるので、やっぱり√3 * √3 * 1 = 3になります。4:38から説明しているCalcAngleは角度を求める関数を作ろうとしています。どうやって角度を求めるのかというと、・内積の式にcosΘがでてくること(|a| * |b| * cosΘ)・cosΘが分かれば、acosを使ってΘがわかること(acosはcosの逆関数であり、acos(cosΘ) = Θになる)という点を利用します。なので、「cosΘ」を求める必要があるのですが、その際に内積は|a| * |b| * cosΘであるため、「a,bの長さが1になっていれば」、内積の結果がcosΘになります。この、「a,bの長さが1になっていれば」という条件を満たすために、normalize(a)、normalize(b)をしてから、内積を計算する、という順番になっています。normalizeをすると、そのベクトルの長さは1になるので、dot( normalize(a), normalize(b) )という計算をすると、1 * 1 * cosΘ = cosΘになるので、値の範囲は-1~1になりますね。…という説明で伝わりましたでしょうか…?
@@kuriemeiku 丁寧にありがとう御座います!すごくわかりやすいです!読ませていただいた結果normalizeの役割を誤認していたことがわかりました・・・簡単なvec2を例に出すと、vec2(3,3)があったとしてnormalizeでvec2(1,1)にすると思っていたのですが 全くそんなことはなく大きさを正規化するのでve2(0.7,0.7)になると・・・一つの公式だけじゃなくて、色んな公式を組み合わせる必要があるので付け焼き刃では対応できないので、高校数学ちゃんとやっておけばよかったとヒシヒシ感じております・・・非常に参考になりました!ありがとう御座いました!
すみません。どうしてもわからないので質問させてください。理解を深めるために7:54でtickに流れているものを作ろうとしています。赤線と青線の長さを入れればいいということで、Vectorの動画で説明してくれていた終点ー始点を入れればいいのだろうと思っています。よってCalcAngleの引数Aには赤い線の先のLocation -白い箱のgetActorLocation引数BにはQueenのgetActorLocation-白い箱のgetActorLocationと入れてみたのですが、自分の環境で実行してみても思った通りの値が出ません。上記の認識で何か間違っている部分はあるでしょうか?
う~ん、合っている気がしますね…?CalcAngleの中で、引数A,Bに対してNormalizeってされてます…よね…?ちょっとノード見ないと正確なことは言えないですね…すみません!
@@kuriemeiku ありがとうございます。計算の認識があっているのを確認できた。というのが本当にありがたいです!赤の線の先の部分を白い箱のgetActorForwardVector×10でとっていたのですが、白い箱の回転からGetForwardvectorで取得に変更してみたところうまくできましたGetActorLocation+(GetActorRotation→getForwardVector×10)-GetActorLocation根本的な解決はしていないのですが、とりあえず代用できたので転用して組み込みたい機能に追加しました。ありがとうございました!
触れたこと無い部分なので難しかったですね、用途としては壁登りや会話に使用できるんですね。壁登りや会話を表現する方法として他にコリジョンやTraceChannelなどが候補に入りそうなのですが、それらと比較して内積を用いるメリットってどんなところにあるのでしょうか?
コメントありがとうございます~!どちらかというと、コリジョンチェックやTraceした結果に対して内積を使うことで、向き判定ができるようになる、という感じですかね…!結局、壁のぼりするにしても、コリジョンチェックやTraceした後のぶつかったところが「壁なのか坂なのか」を判断しないといけないので、そのための判断材料に使える、という感じですね。(まあ、本当に「壁のぼり」であれば、ぶつかった後の法線のベクトルにZ成分がどのくらい入っているか、でもいいっちゃいいですが…)
@@kuriemeiku コリジョンやTraceとセットで使うんですね、使う場面が来ないと中々頭に入って来ないので未だに理解が及ばないのですが、壁登りさせたい時に挑戦してみたいと思います。
関係ないですけど円周率って3.1415までは覚えてますけどその後9265358979だったんですね。結構覚えやすい数字が並んでたんですね。そこまで覚えました!
私はなぜかそこまで覚えてます笑
うっ、頭が・・・でもこういった内容は本当助かります!
まだ!まだ半分だから!
(正直、ベクトルの角度くらいはUE側で関数を作っておいてほしい気持ち…あっすみませんすみません!!!)
有難い😭😭👏
よかったです!!!
めっちゃためになりました!
0にならない件で笑ってしまったw
やりながら、あれ!?!?とおもってました笑
素人質問で申し訳ないのですが、
aとbのベクトルがx(1,1,1)y(1,1,1)z(1,1,1)と仮定した場合
ノードの処理順から考えて
normalize(a);
normalize(b);
dot(a,b); となると思うのですが
それだと戻り値が-3~3になりませんか?
acosは引数が-1~1だと思うので どういう理屈になっているのか非常に悩んでおります
なぜnormalize(dot(a,b));じゃないのかわかりません・・・
まず、a=b=(1,1,1)を考えたときに、内積a*b = ax*bx + ay*by + az*bz = 1*1 + 1*1 + 1*1 = 3になります。
また、内積は|a| * |b| * cosΘ(|a|はベクトルaの長さ)と表現することもできます。|a|は√3になるので、やっぱり√3 * √3 * 1 = 3になります。
4:38から説明しているCalcAngleは角度を求める関数を作ろうとしています。
どうやって角度を求めるのかというと、
・内積の式にcosΘがでてくること(|a| * |b| * cosΘ)
・cosΘが分かれば、acosを使ってΘがわかること(acosはcosの逆関数であり、acos(cosΘ) = Θになる)
という点を利用します。
なので、「cosΘ」を求める必要があるのですが、その際に内積は|a| * |b| * cosΘであるため、「a,bの長さが1になっていれば」、内積の結果がcosΘになります。
この、「a,bの長さが1になっていれば」という条件を満たすために、normalize(a)、normalize(b)をしてから、内積を計算する、という順番になっています。
normalizeをすると、そのベクトルの長さは1になるので、dot( normalize(a), normalize(b) )という計算をすると、1 * 1 * cosΘ = cosΘになるので、値の範囲は-1~1になりますね。
…という説明で伝わりましたでしょうか…?
@@kuriemeiku 丁寧にありがとう御座います!
すごくわかりやすいです!
読ませていただいた結果normalizeの役割を誤認していたことがわかりました・・・
簡単なvec2を例に出すと、vec2(3,3)があったとしてnormalizeでvec2(1,1)にすると思っていたのですが 全くそんなことはなく
大きさを正規化するのでve2(0.7,0.7)になると・・・
一つの公式だけじゃなくて、色んな公式を組み合わせる必要があるので付け焼き刃では対応できないので、高校数学ちゃんとやっておけばよかったとヒシヒシ感じております・・・
非常に参考になりました!
ありがとう御座いました!
すみません。どうしてもわからないので質問させてください。
理解を深めるために7:54でtickに流れているものを作ろうとしています。
赤線と青線の長さを入れればいいということで、Vectorの動画で説明してくれていた終点ー始点を入れればいいのだろうと思っています。
よってCalcAngleの引数Aには
赤い線の先のLocation -白い箱のgetActorLocation
引数Bには
QueenのgetActorLocation-白い箱のgetActorLocation
と入れてみたのですが、自分の環境で実行してみても思った通りの値が出ません。
上記の認識で何か間違っている部分はあるでしょうか?
う~ん、合っている気がしますね…?
CalcAngleの中で、引数A,Bに対してNormalizeってされてます…よね…?
ちょっとノード見ないと正確なことは言えないですね…すみません!
@@kuriemeiku
ありがとうございます。計算の認識があっているのを確認できた。というのが本当にありがたいです!
赤の線の先の部分を白い箱のgetActorForwardVector×10でとっていたのですが、
白い箱の回転からGetForwardvectorで取得に変更してみたところうまくできました
GetActorLocation+(GetActorRotation→getForwardVector×10)-GetActorLocation
根本的な解決はしていないのですが、とりあえず代用できたので転用して組み込みたい機能に追加しました。
ありがとうございました!
触れたこと無い部分なので難しかったですね、用途としては壁登りや会話に使用できるんですね。
壁登りや会話を表現する方法として他にコリジョンやTraceChannelなどが候補に入りそうなのですが、それらと比較して内積を用いるメリットってどんなところにあるのでしょうか?
コメントありがとうございます~!
どちらかというと、コリジョンチェックやTraceした結果に対して内積を使うことで、向き判定ができるようになる、という感じですかね…!
結局、壁のぼりするにしても、コリジョンチェックやTraceした後のぶつかったところが「壁なのか坂なのか」を判断しないといけないので、そのための判断材料に使える、という感じですね。(まあ、本当に「壁のぼり」であれば、ぶつかった後の法線のベクトルにZ成分がどのくらい入っているか、でもいいっちゃいいですが…)
@@kuriemeiku
コリジョンやTraceとセットで使うんですね、使う場面が来ないと中々頭に入って来ないので未だに理解が及ばないのですが、壁登りさせたい時に挑戦してみたいと思います。
関係ないですけど円周率って3.1415までは覚えてますけどその後9265358979だったんですね。結構覚えやすい数字が並んでたんですね。そこまで覚えました!
私はなぜかそこまで覚えてます笑