以下の内容はhttps://www.karvan1230.com/entry/2020/03/17/220735より取得しました。


【Unity】RigidBodyを使って螺旋階段を登りたい

燃え尽き症候群

Unity1Weekに力を注ぎ過ぎて結果発表以降、モチベーションが上がらない日々を過ごしている皆さんこんにちは。

Top30に入らなかったからやる気がなくなった、とかそんな訳ではなくて、ちょっと休憩したい気分が長く続いている感じ。人はそれを「サボり癖が付いた」と呼ぶかもしれない、(∩゚д゚)アーアーきこえなーい

 

螺旋階段を登る

そんな訳で仁王2が売り切れで遊べなかったので、仕方なく週末はUnityで遊んだ成果がこちら

 

f:id:Karvan:20200317215302g:plain

 

ちょっとぎこちないですが青いボールはRigidBodyにAddForceで力を加える事で動かしています。

これまでtransformやDoTweenを使ったオブジェクトの公転運動について記事を書いてきたので、それならRigidBodyを使っても同じようなことが出来ないかチャレンジしてみたんです。

www.karvan1230.com

円軌道に沿う

高校の物理などで学びますが、物体の円運動は円の中央方向へ引き付ける力と慣性力によって離れようとする力が均衡した状態となっている運動で、移動方向は円軌道の接線となります。

 つまり、逆に言うと物体に対して円軌道の接線方向に力を加え続ければ円運動になると言う事です。

f:id:Karvan:20200317215747p:plain

 なのでRigidBodyに円軌道の接線方向にAddForceで力を加える事を考えます。

 

接線方向を求める

円軌道が真円の場合、接線方向は半径方向に対して垂直となるので半径方向のベクトルと回転軸となるY軸ベクトルが作る面の法線を求めることが出来ればそれが力を加える方向となります。

f:id:Karvan:20200317215900p:plain

 

Unityで法線ベクトルを求めるにはVector3のCrossを使用します。

// 半径方向のベクトル
Vector3 radialVec = CenterPosition - SphereBody.transform.position;

// 接線方向のベクトルを求める
Vector3 crossVec = Vector3.Cross(Vector3.up, radialVec.normalized);

接線ベクトルは方向だけ分かれば良いのでnormalizedで正規化しています。
先程の動画では青いボールだけが跳ね上がった時にだけ上のコードで求めた接線方向へ力を加えています。

 

先程の動画のように、未だぎこちない動きとなるので加える力の大きさとかタイミングなどまだ調整が必要ですが、RigidBodyを使った公転運動の実装で方向性としては間違ってないかな、と思っています。

 

 




以上の内容はhttps://www.karvan1230.com/entry/2020/03/17/220735より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14