Unity_Lesson

Rigidbodyを使ってオブジェクトを動かす場合、物理的な力を使って回転を制御するためにAddTorqueを使うことができます。
AddTorqueは力を加えてオブジェクトを回転させる際に便利で、物理演算を使った自然な動きを実現できます。これにより、慣性や摩擦の影響も受けた回転をシミュレートできます。

以下では、AddTorqueを使用した例と、いくつかの考慮事項を紹介します。

AddTorqueの基本使用方法

using UnityEngine;

public class RotateWithTorque : MonoBehaviour
{
    public float torqueAmount = 10f;  // トルクの強さ
    private Rigidbody rb;

    void Start() {
        rb = GetComponent<Rigidbody>();  // Rigidbodyコンポーネントの取得
    }

    void Update() {
        // 左右の入力に基づいてトルクを加える
        float inputX = Input.GetAxis("Horizontal");
        
        // Y軸を中心にトルクを加える (回転軸を指定)
        rb.AddTorque(Vector3.up * inputX * torqueAmount);
    }
}

説明:


AddTorqueを使用する際の注意点

  1. 力の継続的な加算
    AddTorque は瞬間的な力を加えるため、フレームごとに呼び出すと回転が加速し続けます。もし加速をコントロールしたい場合は、入力に基づいて力を適度に制御する必要があります。例えば、入力が0の時にはトルクを加えないか、回転速度を一定に保つための対策が必要です。

    void Update() {
        float inputX = Input.GetAxis("Horizontal");
    
        if (inputX != 0) {
            rb.AddTorque(Vector3.up * inputX * torqueAmount);
        } else {
            // 慣性を使って減速させる場合は、摩擦を利用
        }
    }
    
  2. 慣性モーメントの影響
    Rigidbody による物理シミュレーションでは、オブジェクトの質量や形状によって回転の仕方が変わります。特に、慣性モーメントが大きいオブジェクトは、トルクを加えても回転がゆっくりになったりします。必要に応じて Rigidbody.massRigidbody.drag などのプロパティを調整することで、回転の挙動を変えられます。

  3. 摩擦とドラッグ
    回転速度が無限に加速しないように、摩擦 (angularDrag) や物理的な抵抗を設定することも重要です。Rigidbody.angularDrag を使うことで、回転速度を制御できます。これは空気抵抗や摩擦のような役割を果たし、オブジェクトが徐々に回転を停止します。

    rb.angularDrag = 0.5f;  // 摩擦を設定して回転が徐々に止まるように
    
  4. 瞬時に回転を制御する場合
    AddTorque は力を加えるため、回転は物理的な慣性に基づいて滑らかに発生しますが、瞬時に回転を特定の角度に設定したい場合は、Rigidbody.MoveRotation などを使用できます。

    Quaternion targetRotation = Quaternion.Euler(0, 90, 0);  // 90度の回転をターゲット
    rb.MoveRotation(targetRotation);  // オブジェクトを瞬時に指定の角度に回転
    

その他の回転方法との比較

  1. transform.RotateAddTorqueの違い
    transform.Rotateはオブジェクトを毎フレーム単純に回転させるため、物理演算を考慮しません。ゲームオブジェクトを物理的に回転させたい場合にはAddTorqueを使い、物理演算を考慮しない単純な回転ではtransform.Rotateを使うべきです。

  2. Quaternion.RotateTowardsとの比較
    RotateTowards はターゲットの回転に向かって徐々に回転させるためのメソッドで、AddTorque のように物理的な力を使用しません。滑らかに回転させたい場合は、RotateTowards が便利ですが、慣性や摩擦のような物理挙動を伴った回転をシミュレーションする場合には AddTorque の方が自然な結果を得られます。


まとめ

このように、オブジェクトの回転には目的に応じた方法を選ぶ必要があります。それぞれの方法にメリットがあるので、状況に応じて使い分けることが推奨されます。