質問: よろしくお願い致します。 Unityバージョンは 5.3.5f1 を使用しています ### まず3DObjectからCubeを作って名前をKingとします 次にRigidbodyを追加します RigidbodyにあるUseGravityのチェックを外して IsKinematicにチェックを入れます。 最後に座標をX:0 Y:0 Z:1 にして完成 このObjectを複製して 同様にRigidbodyを設定して 名前をJackに変更し 座標をX:0 Y:0 Z:0 にします。 これでKingとJack2つのCubeが出来ます ### 次にKingにScriptを追加します 中身は右方向に進むだけです ``` using UnityEngine; using System.Collections; public class King : MonoBehaviour { void Update () { GetComponent().MovePosition(transform.position + Vector3.right * Time.deltaTime); } } ``` JackにもScriptを追加します こっちは左方向に動かします ``` using UnityEngine; using System.Collections; public class Jack : MonoBehaviour { void Update () { GetComponent().MovePosition(transform.position + Vector3.left * Time.deltaTime); } } ``` ### この状態で実行すると KingとJackはそれぞれの方向に動くのですが Kingの中にJackを入れて親子階層にして実行すると (親Kingで子Jackですね) JackはKingと同じ方向へ動くのです この親子階層にある中でKingとJackを それぞれの方向に動かすにはどうすればよいかと 悩んでおります。 一応、JackのIsKinematicを外せば期待通りの動きをするのですが IsKinematicでないため、他Objectからの衝突を受け付けてしまいます。 それではよろしくお願い致します。
回答: うーん、そうですね。 `Rigidbody.MovePosition()`をやめて、**transform.position**を直接制御する形に変更して、毎フレーム**position**に**localPosition**を代入することで解決する方法もありますが、Rigidbodyで制御する時と挙動が異なる可能性が高いです。 それならば逆転の発想で指定オブジェクトを衝突しないように対応する方法はどうでしょうか。 > > 一応、JackのIsKinematicを外せば期待通りの動きをするのですが > > IsKinematicでないため、他Objectからの衝突を受け付けてしまいます。 > > > メニューより Edit > Project Settings > Physics より PhysicsManagerが開けます。 その中のLayerCollisionMatrixで衝突するレイヤーの判定を指定できます。 Jackのオブジェクトのレイヤーを他のオブジェクトと衝突しないようにするという方法はどうでしょうか。 !イメージ説明