この度は跳ね返り具合を係数(0~1)にしてオブジェクトごとに跳ね返りのベクトルを向きを変わるようにしたかったのですが、そのAPIが見当たらなかったので自作することにしました。
これを使うことによって柔らかいものにあたったときの跳ね返ったり、逆に跳ね返らずに滑ったりを計算できるので色々オブジェクトに違いを出せるようになります。
反射ベクトルとは
壁の向きを表す法線ベクトルは有名だと思います。
この向きとキャラクターの移動ベクトルに「ある計算」をすると
壁にあたった後、どの方向にキャラクターが移動する方向(ベクトル)を計算することができます。

ある程度のベクトルがわかる前提でお話していくのでご了承ください。
もしわからなくても後述の関数をコピペするだけでも使えると思います
反射係数とは
Unity標準の反射ベクトルを計算する関数ですが
これには係数を呼ばれる跳ね返り具合を調整するパラメータが指定できません。
例としては
となります。
係数0ではこのように滑りベクトルになります。
そして反射係数が1.0の場合は壁から反対側に反射されるようなベクトルになります。
冒頭にも述べた通り、これを使えば
なんかも作れたりします。

当たるものによってどのように跳ね返るか
設定できるのは良いですね!
反射ベクトルを計算する関数
その時に使う関数はこちら
Vector3 CalcReflectVec(Vector3 vec, Vector3 normal, float reflectParam) { normal.Normalize(); var dot = -Vector3.Dot(normal, vec); var dotPlaneVec = normal * dot; return vec + dotPlaneVec + (dotPlaneVec * reflectParam); }
引数はこのようになっています。
そして返り値が反射係数を考慮した反射ベクトルが出力されます。

かんたんですね!
活動内容のPR
下記が本サイトでの活動内容となります。
最後に
いかがでしたでしょうか。
反射ベクトルの演算は「どうだったっけ?」と忘れやすいのと反射係数を指定できないことに違和感を感じていたので備忘録として残すことにしました。

これで反射ベクトルの計算は忘れても大丈夫そうです!
本サイトではゲーム開発や日々気になったことを中心に発信しております。
もし興味がありましたら画面左下のベルマークから購読いただけますと幸いです。
では今回はここで終わりたいと思います。
ここまでお読みいただきありがとうございました。
コメント