【UE4/UE5ゲーム制作講座】超基礎編・これを見れば内積(Dot Product)がわかる!(半分)

Поділитися
Вставка
  • Опубліковано 31 жов 2024

КОМЕНТАРІ • 17

  • @シュン-j6j
    @シュン-j6j 2 роки тому +3

    うっ、頭が・・・でもこういった内容は本当助かります!

    • @kuriemeiku
      @kuriemeiku  2 роки тому

      まだ!まだ半分だから!
      (正直、ベクトルの角度くらいはUE側で関数を作っておいてほしい気持ち…あっすみませんすみません!!!)

  • @gjadahskr
    @gjadahskr 2 роки тому +1

    有難い😭😭👏

    • @kuriemeiku
      @kuriemeiku  2 роки тому +1

      よかったです!!!

  • @せどたそ
    @せどたそ 2 роки тому +1

    めっちゃためになりました!
    0にならない件で笑ってしまったw

    • @kuriemeiku
      @kuriemeiku  2 роки тому

      やりながら、あれ!?!?とおもってました笑

  • @みやちゃ-r9l
    @みやちゃ-r9l 2 роки тому +1

    素人質問で申し訳ないのですが、
    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));じゃないのかわかりません・・・

    • @kuriemeiku
      @kuriemeiku  2 роки тому

      まず、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になりますね。
      …という説明で伝わりましたでしょうか…?

    • @みやちゃ-r9l
      @みやちゃ-r9l 2 роки тому

      @@kuriemeiku 丁寧にありがとう御座います!
      すごくわかりやすいです!
      読ませていただいた結果normalizeの役割を誤認していたことがわかりました・・・
      簡単なvec2を例に出すと、vec2(3,3)があったとしてnormalizeでvec2(1,1)にすると思っていたのですが 全くそんなことはなく
      大きさを正規化するのでve2(0.7,0.7)になると・・・
      一つの公式だけじゃなくて、色んな公式を組み合わせる必要があるので付け焼き刃では対応できないので、高校数学ちゃんとやっておけばよかったとヒシヒシ感じております・・・
      非常に参考になりました!
      ありがとう御座いました!

  • @the9026
    @the9026 2 роки тому +1

    すみません。どうしてもわからないので質問させてください。
    理解を深めるために7:54でtickに流れているものを作ろうとしています。
    赤線と青線の長さを入れればいいということで、Vectorの動画で説明してくれていた終点ー始点を入れればいいのだろうと思っています。
    よってCalcAngleの引数Aには
    赤い線の先のLocation -白い箱のgetActorLocation
    引数Bには
    QueenのgetActorLocation-白い箱のgetActorLocation
    と入れてみたのですが、自分の環境で実行してみても思った通りの値が出ません。
    上記の認識で何か間違っている部分はあるでしょうか?

    • @kuriemeiku
      @kuriemeiku  2 роки тому +1

      う~ん、合っている気がしますね…?
      CalcAngleの中で、引数A,Bに対してNormalizeってされてます…よね…?
      ちょっとノード見ないと正確なことは言えないですね…すみません!

    • @the9026
      @the9026 2 роки тому

      @@kuriemeiku
      ありがとうございます。計算の認識があっているのを確認できた。というのが本当にありがたいです!
      赤の線の先の部分を白い箱のgetActorForwardVector×10でとっていたのですが、
      白い箱の回転からGetForwardvectorで取得に変更してみたところうまくできました
      GetActorLocation+(GetActorRotation→getForwardVector×10)-GetActorLocation
      根本的な解決はしていないのですが、とりあえず代用できたので転用して組み込みたい機能に追加しました。
      ありがとうございました!

  • @おおみみず
    @おおみみず 2 роки тому +1

    触れたこと無い部分なので難しかったですね、用途としては壁登りや会話に使用できるんですね。
    壁登りや会話を表現する方法として他にコリジョンやTraceChannelなどが候補に入りそうなのですが、それらと比較して内積を用いるメリットってどんなところにあるのでしょうか?

    • @kuriemeiku
      @kuriemeiku  2 роки тому +1

      コメントありがとうございます~!
      どちらかというと、コリジョンチェックやTraceした結果に対して内積を使うことで、向き判定ができるようになる、という感じですかね…!
      結局、壁のぼりするにしても、コリジョンチェックやTraceした後のぶつかったところが「壁なのか坂なのか」を判断しないといけないので、そのための判断材料に使える、という感じですね。(まあ、本当に「壁のぼり」であれば、ぶつかった後の法線のベクトルにZ成分がどのくらい入っているか、でもいいっちゃいいですが…)

    • @おおみみず
      @おおみみず 2 роки тому +1

      @@kuriemeiku
      コリジョンやTraceとセットで使うんですね、使う場面が来ないと中々頭に入って来ないので未だに理解が及ばないのですが、壁登りさせたい時に挑戦してみたいと思います。

  • @リュウ_レッドマウント_RyuRedmount

    関係ないですけど円周率って3.1415までは覚えてますけどその後9265358979だったんですね。結構覚えやすい数字が並んでたんですね。そこまで覚えました!

    • @kuriemeiku
      @kuriemeiku  Рік тому +1

      私はなぜかそこまで覚えてます笑