unity C#プログラミングで角度制限について球のオブジェクトを物理演算で転がるようにしたいですが、その際、X・Y・Z軸それぞれが○度しか転がらない様にしたいです。何方か解る方記述例をお願いいいたします。

1件の回答

回答を書く

1164615

2026-01-22 19:50

+ フォロー

UnityでC#を使用して物理演算で球体オブジェクトを転がらせ、かつX・Y・Z転がりの角度を制限したい場合、以下のようなアプローチを試すことができます。

まず、刚体(Rigidbody)コンポーネントを使用して物理演算を適用します。その後、角度制限を適用するには、UnityのOnFixedUpdateメソッド内で刚体の回転角度を定期的にチェックし、必要に応じて修正します。

以下に具体的なコード例を示します:

csharp

using UnityEngine;

public class BallRotationLimiter : MonoBehaviour

public Rigidbody ballRigidbody;

public float maxXRotation = 30f; // X軸の最大角度

public float maxYRotation = 30f; // Y軸の最大角度

public float maxZRotation = 30f; // Z軸の最大角度

void Start()

if (ballRigidbody == null)

ballRigidbody = GetComponent();

}

}

void FixedUpdate()

// 現在の回転角度を取得

Quaternion currentRotation = ballRigidbody.rotation;

Vector3 eulerAngles = currentRotation.eulerAngles;

// 各軸の回転角度を制限

float clampedXRotation = ClampAngle(eulerAngles.x, maxXRotation);

float clampedYRotation = ClampAngle(eulerAngles.y, maxYRotation);

float clampedZRotation = ClampAngle(eulerAngles.z, maxZRotation);

// 制限された角度に剛体の回転を設定

ballRigidbody.MoveRotation(Quaternion.Euler(clampedXRotation, clampedYRotation, clampedZRotation));

}

float ClampAngle(float angle, float maxAngle)

// 360度の範囲内に角度を正規化

angle = NormalizeAngle(angle);

// 角度の範囲を制限

if (angle > 180f)

angle = Mathf.Clamp(angle, 360f - maxAngle, 360f);

}

else

angle = Mathf.Clamp(angle, 0f, maxAngle);

}

return angle;

}

float NormalizeAngle(float angle)

// 360度を超える角度を正規化

while (angle < 0f)

angle += 360f;

}

while (angle > 360f)

angle -= 360f;

}

return angle;

}

}

このスクリプトは、ballRigidbodyに指定されたRigidbodyの回転角度を、それぞれの軸に対して最大角度(maxXRotation, maxYRotation, maxZRotation)を制限します。各角度は360度の範囲内で正規化され、必要に応じてMathf.Clampを使用して制限されます。

このスクリプトを使用するには、球体オブジェクトにRigidbodyコンポーネントとこのスクリプトを追加し、maxXRotation, maxYRotation, maxZRotationのパラメータをInspectorで調整します。

ただし、物理演算の制限は非常にリアルなシミュレーションとは一致しない場合があります。完全な角度制限を物理演算内で適用するには、より複雑な制約システムが必要になる場合があります。例えば、UnityのConfigurableJointHingeJointなどの物理ジョイントを使用して制約を加えることも考えられます。

うったえる有益だ(0シェアするブックマークする

関連質問

Copyright © 2026 AQ188.com All Rights Reserved.

博識 著作権所有