Unity事例ノート

UNITY

プレーヤーがひっくり返らないようにする

リジッドボディを追加したプレーヤーが、ひっくり返らないようにしましょう。

とくにSphereColliderやCapsuleColliderなど、足元が不安定なコライダーでは、他のオブジェクトにぶつかれば倒れてしまうことがあります。

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

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

Constraintsをスクリプトで制御する

Plane、Cube、Capsuleを作成し、このように配置します。

今回はCapsuleをプレーヤーとして操作します。

Capsuleにリジッドボディを追加しましょう。

このままCapsuleを動かした場合、Cubeにぶつかると倒れてしまいます。

通常はこのように、XとZを軸として回転する物理挙動になっています。

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

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

PlayerMove.csを記述します。

FreezeRotationXと書けば、X軸の回転をロックできます。

今回は、X軸とZ軸という特定の2つをロックしたい場合、間に「|」を入れて書きます。

ゲームプレイしてみましょう。

スタートすると、Constraintsの回転を固定にある、XとZにチェックが入ります。

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

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