メインコンテンツまでスキップ

AddTorque

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: これは指定された回転軸に対してトルク(回転する力)を加えるためのメソッドです。Vector3で回転軸を指定し、トルクの量を調整します。
  • Vector3.up: これはY軸を指し、オブジェクトがY軸を中心に回転することを意味します。例えば、車のハンドルのように左右に回転する操作をシミュレートできます。
  • Input.GetAxis("Horizontal"): キーボードの左右キーまたはゲームパッドのスティックで回転を制御します。

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 の方が自然な結果を得られます。


まとめ

  • AddTorque を使うと、物理演算に基づくリアルな回転が実現できます。
  • 回転を制御する際には、慣性摩擦ドラッグを考慮して調整することが重要です。
  • 瞬時に回転させたい場合や、シンプルな回転にはtransform.RotateQuaternion.RotateTowardsなど他の方法もありますが、物理的な回転にはRigidbodyAddTorqueを使うのが適切です。

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