【Unity】ボールの移動について(TranslateとAddForceの違い)

Unityをやっとこさ弄り始めました。

Unity便利ですね
本当に単純な物ならオブジェクト置いてカチカチやるだけで出来るし、
C#でスクリプトが書けるのも素晴らしい。
複雑な事やろうとするとまた違うのかも知れないですが(汗)

触り始めの勉強も兼ねて、
今回はボール(Sphere)をプレイヤーに見立てて、移動させるだけのゲーム(?)を作ってみました。

f:id:recrox:20160619231030j:plain

ボールが床を突き破ったり空を飛んだり

f:id:recrox:20160619231724g:plain

色々試した後に画像作成したので右側にボタンとか表示されてます。
上のgifアニメの用に色々動かしているとボールが床を突き破って落ちていく現象が発生しました。

ちなみに、
ボールにはRigidbodyを設定してあるので物理演算で落ちていくようになっています。
簡単に物理演算を適用することが出来るUnityが好き。

で、原因は何だったかというと、
ボールを動かす際の移動方法が問題でした。

Translateを用いた移動は相対的な移動

f:id:recrox:20160619232509g:plain

Translateを使うと、
対象を基準とした移動になるんですね。
上の画像がわかりやすいかと思います。

壁にぶつかってボールが回転する
→座標軸がズレる
→ボール基準の座標で動くので大暴れ

AddForceを用いた移動は絶対的な移動(※)

f:id:recrox:20160619233410g:plain

絶対的な移動というよりは、軸に対して絶対的な力を加える感じ?
上の画像みたいにぐるぐる回転してます。
上下の移動が無くなったので枠内から出るような動作はしなくなりました。

おわりに

f:id:recrox:20160619233453g:plain


ボールを移動させるだけで引っかかるとは…
ただまぁ、TranslateとAddForceの違いが分かって勉強になりました。
今回はただボールを移動させるだけのモノでしたが、
次回はゲームを作りたいですね。

それでは。

※gif画像のサイズが大きくなりすぎたかもo...rz