リジッドボディを追加したプレーヤーが、ひっくり返らないようにしましょう。
とくにSphereColliderやCapsuleColliderなど、足元が不安定なコライダーでは、他のオブジェクトにぶつかれば倒れてしまうことがあります。

Constraintsをスクリプトから制御する方法で、このような転倒を防ぎます。

関連記事:
Colliderを使った接触判定
触れた相手のコライダーを削除(無効にする)
OnCollisionEnterとOnTriggerEnterの違い
Constraintsをスクリプトで制御する
Plane、Cube、Capsuleを作成し、このように配置します。

今回はCapsuleをプレーヤーとして操作します。
Capsuleにリジッドボディを追加しましょう。

このままCapsuleを動かした場合、Cubeにぶつかると倒れてしまいます。
通常はこのように、XとZを軸として回転する物理挙動になっています。

リジッドボディのConstraints、「回転を固定」のX軸とZ軸にチェックを入れると解決するのですが、これをスクリプトから行えるようにしましょう。

PlayerMove.csを作成し、Capsuleに追加します。

PlayerMove.csを記述します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27  | 
						using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerMove : MonoBehaviour {     private float speed = 3.0f;     Rigidbody rb;     void Start()     {         rb = GetComponent<Rigidbody>();         rb.constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationZ;     }     void Update()     {         float moveX = Input.GetAxis("Horizontal") * Time.deltaTime * speed;         float moveZ = Input.GetAxis("Vertical") * Time.deltaTime * speed;         transform.position = new Vector3         (             transform.position.x + moveX,              transform.position.y,              transform.position.z + moveZ         );     } }  | 
					
FreezeRotationXと書けば、X軸の回転をロックできます。
今回は、X軸とZ軸という特定の2つをロックしたい場合、間に「|」を入れて書きます。
ゲームプレイしてみましょう。
スタートすると、Constraintsの回転を固定にある、XとZにチェックが入ります。

Cubeにぶつかっても、ひっくり返らずに移動できるようになりました。

関連記事:
Colliderを使った接触判定
触れた相手のコライダーを削除(無効にする)
OnCollisionEnterとOnTriggerEnterの違い