どうも、大石です。
unityで動く床を作ったのに
オブジェクトが上に乗ると滑って
一緒に付いて行かずに落ちる、、
みたいなことで悩んでますか?
この記事を読めば、unityで動く床に乗っても
滑ることなく一緒に付いていってくれますよ。
ということで動く床が滑ることで悩んでたら
読んでください。
スポンサードサーチ
unityで動く床にのるとオブジェクトが滑る場合の解決法
unityで動く床に乗った時に
滑らないようにするには、
床オブジェクトを移動させるのに、
transformを使うのをやめましょう。
そして代わりに、rigidbodyのAddforce、
又はvelocityを使うと解決します。
というのもtranform.positionなどで
床を動かすと、床は移動してくれますが、
上に乗ったオブジェクトが滑って移動しないからです。
ですが、rigidbodyのAddforceなどで、
床オブジェクトを動かすと、
上に乗ったオブジェクトは滑らずに
ちゃんと床と一緒に進行方向に動いてくれるからです。
ということで、その証拠として動画を
とったので、みてみましょう。
はい、このように、床をrigidbodyで
動かしてやると、
床の上に乗ったオブジェクトは
滑り落ちずに、ちゃんと一緒に動いて
ついてきてくれます。
ということで、あなたがunityで
床を動かす時に、上に乗るオブジェクトが
滑るなら、
rigidbodyで床を動かしましょう。
rigidbodyで動かす際の注意点
又一応注意ですが、
動く床も、上に乗るオブジェクトも
rigidbodyコンポーネントをつけてる必要があります。
また、動く床の方は、
rigidbodyコンポーネントの
constraintsから、
回転と進行方向(必要なら)を
制限しておきましょう。
でないとオブジェクトが動く床に
乗った時に床が回転してオブジェクトが落ちたり、
進行方向がずれていったり、
物理が働くので意図した動きを
しなくなることがあります。
ということで制限をかけておきましょう。
addforceかvelocityどちらを使うか
ちなみにここからは余談ですが、
rigidbodyで動かす際、addforce()でも
床を動かすことはできます。
そして、その床の上に乗っても
rigidbodyなのでオブジェクトは滑ることなく、
ちゃんと一緒についてきれくれます。
ですが、addforce()で床を動かすと、
床が動くスピードがどんどん加速します。
というのもaddforceとは、力がずっと
オブジェクトにかかり続けるので、
どんどん加速してしまいます。
すると動く床としては使いにくくなるので、
動く床を作る時には、
rigidbodyのvelocityを使うと良いでしょう。
ちなみにvelocityに関しては書き方は、
Rigidbodyの変数宣言を取得した後、
Rigidbodyの変数.velocity = new Vector3(x,y,z);
で書けば良いです。
詳しくは以下のコードを参考にしてみてください。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class floor : MonoBehaviour
{
Rigidbody rb;
// Start is called before the first frame update
void Start()
{
rb = GetComponent();
}
// Update is called once per frame
void Update()
{
rb.velocity = new Vector3 (0,0,1);
}
}
ご存知だとおもいますが、
new Vector3(x,y,z)の部分に数字を入れると
その方向に対して床が進んで行くので、
床の進行方向はそこでコントロールしてください。
スポンサードサーチ
まとめ
ということでまとめに入ります。
unityで動く床を作ったのに、
上に乗るオブジェクトが滑るなら、
transform.positionで動かさずに、
rigidbodyで動く床を作りましょう。
それでは読んでもらってありがとうございました。
大石