C#でRigidbodyのConstraintsを制御する方法

コンストレイントをスクリプトから制御する方法_アイキャッチ

「リジッドボディのコンストレイントをスクリプトから動的に制御したいけどどうすればいいの?」

今回はこの疑問を解決する方法を紹介していきます。

とても簡単だけど少しだけ注意が必要!そのポイントも含めて分かりやすくまとめてみました!

目次

制御のパターン

Constraintsを制御する方法は以下の表にまとめた

目的方法(Constraintsに代入)結果
座標を制御FreezePositionX
FreezePositionY
FreezePositionZ
FreezaPosition
X 軸の移動をさせない
Y 軸の移動をさせない
Z 軸の移動をさせない
全ての軸を移動させない
回転を制御FreezeRotationX
FreezeRotationY
FreezeRotationZ
FreezeRotation
X 軸の回転をさせない
Y 軸の回転をさせない
Z 軸の回転をさせない
全ての軸を移動させない
制限を解除(移動も回転もする)None制限なし
全てを制限(移動も回転もしない)FreezeAll移動と回転をさせない

スクリプトで制御するサンプルコード

実際にサンプルコードを見て確認していきましょう。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class FreezeConstraints: MonoBehaviour
{
  private Rigidbody _rb;
    void Start()
    {
        _rb = GetComponent<Rigidbody>();
 
        // 座標を制御
        _rb.constraints = RigidbodyConstraints.FreezePositionX;  //PositionのXのみオン
        _rb.constraints = RigidbodyConstraints.FreezePositionY;  //PositionのYのみオン
        _rb.constraints = RigidbodyConstraints.FreezePositionZ;  //PositionのZのみオン
        _rb.constraints = RigidbodyConstraints.FreezePosition;   //Positionを全てオン

        // 回転を制御
        _rb.constraints = RigidbodyConstraints.FreezeRotationX;  //RotationのXのみオン
        _rb.constraints = RigidbodyConstraints.FreezeRotationY;  //RotationのYのみオン
        _rb.constraints = RigidbodyConstraints.FreezeRotationZ;  //RotationのZのみオン
        _rb.constraints = RigidbodyConstraints.FreezeRotation;   //Rotationを全てオン

        // 制限を解除
        _rb.constraints = RigidbodyConstraints.None;             //制限なし

        // 全てを制限
        _rb.constraints = RigidbodyConstraints.FreezeAll;        //移動も回転もしないようにする
       
    }
}

フリーズする座標や軸を細かく指定したい場合は「|(or演算子)」で指定してあげるとうまくいきます。


// 制限を解除
_rb.constraints = RigidbodyConstraints.None;             //制限なし

// 全てを制限
_rb.constraints = RigidbodyConstraints.FreezeAll;        //移動も回転もしないようにする

// 制限する軸を細かく指定(PositionXとRotationのXをオン)
_rb.constraints = 
      RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.FreezeRotationX;  

まとめ

うまく制御できたでしょうか。細かく制御するとなると少し分かりにくいので気を付けて制御していきましょう。

よかったらシェアしてね!
目次