原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【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を使った公転運動の実装で方向性としては間違ってないかな、と思っています。

 

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。