一人称視点で机の引き出しや扉を動かしてみます。
まず、Blenderで机を作って、UnityでコライダーやRigidbodyを追加します。引き出しにはConfigurable Jointを、扉にはヒンジジョイントを付けました。
RigidbodyのDragで抵抗を設定しています。
Configurable Jointでは、Axisの方向へ移動制限を付けたいときはX MotionをLimitedにします。それ以外はLockedにして動かないようにしました。
移動制限はすべての軸の両側へ同じ値を使います。
これで引き出しを動かしてみると、戻すときにガタガタして動かしにくいです。これは引き出しが机に衝突しているのが原因のようです。物理マテリアルで摩擦を0にしたりしてもだめでした。
引き出しはマウスの縦横の移動をカメラの正面と右方向にかけたものをRigidbody.velocityに代入して動かしています。動かしたい方向へまっすぐ動かすようにすると良いのかもしれません。
Vector3 move = y * transform.forward + x * transform.right;
itemRb.velocity = Vector3.Lerp(itemRb.velocity, move, 0.2f);
今回は机と引き出しを衝突させないようにして解決してみました。まず引き出しと机にレイヤーを設定します。
そして、Edit -> Project Settings… -> Physics のLayer Collision Matrix でこの2つのレイヤーの交点にあるチェックを外します。
するとスムーズに動かせるようになりましたが、引き出しが机を突き抜けてしまいます。
なので、空のゲームオブジェクトを使って、引き出しを止めるためのコライダーを新しく追加しました。
引き出しの中に物を入れる
MeshコライダーとIsKinematicにチェックを入れていないRigidbodyを併用するときは、MeshコライダーのConvexにチェックを入れないとエラーが出ます。
Convexにチェックを入れると、Meshコライダーの口がふさがって閉まって、中に物を入れられません。
Convexのチェックを外す代わりにIsKinematicのチェックを入れて、RigidbodyでなくTransformで動かしてもうまく行かないようです。
なので、1つの引き出しにBoxコライダーを5個付けて、引き出しの形に配置しました。
すると中に物を入れられるようになりました。