回転するオブジェクトは、3D空間内で1つ以上の軸を中心に回転するオブジェクトです。Robloxのシミュレーションエンジンの内蔵機能を使用することで、オブジェクトを回転させ、プレイヤーが直感的に理解できる現実世界の物理的挙動を模倣する方法で、環境と相互作用させることができます。これには、重力、空気力学、摩擦などが含まれます。
回転するオブジェクト .rbxlファイルを参照して、このチュートリアルでは、物理的力がStudio内の角運動に与える影響を説明し、異なる回転動作を持つオブジェクトをあなたの体験の中で回転させるための様々な技法を示します。これには以下が含まれます:
- AngularVelocity モーバー制約を使用して、全体のアセンブリを一定の角速度で回転させる。
- HingeConstraint 機械的制約を使用して、アセンブリ内のパーツを一定の角速度で回転させ、アセンブリの他の部分を静止させる。
- ApplyAngularImpulse メソッドを使用して、アセンブリに初期の角力を与え、アセンブリがゆっくりと減速するようにする。
角運動と物理的力
Roblox Studioはリアルタイムで物理的挙動をシミュレートする現実世界のシミュレーションエンジンであるため、体験内での回転するオブジェクトの挙動を予測するには、現実世界における角運動の理解が重要です。
角運動、または回転運動は、固定された点または軸の周りの動きです。例えば、プロペラが角運動を持つ場合、それはプロペラの中央にある回転軸の周りを回転します。

角運動は、オブジェクトを回転させるために外部の物理的力が押すまたは引く必要があります。ニュートンの第一法則によれば、静止している物体は静止したままであり、動いている物体は外部の力が作用しない限り一定の速度で動き続けます。例えば、静止したプロペラは、風などの物理的力が作用しなければその場に留まります。
トルクは、物体を回転させる原因となる物理的力の測定値であり、物体が角加速度を得るためのものです。この概念は、Studio内で物体を回転させるためには特に重要です。適用するトルクが大きいほど、物体は速く加速することができます。
これは、トルクが、重力や摩擦のように物体に対して逆方向に作用する物理的力よりも大きい必要があるからです。例えば、プロペラを土の上に置いた場合、風の物理的力は、回転し続けるために土からの摩擦の量を上回る必要があります。風の力が土の摩擦よりもそれほど大きくない場合、プロペラは加速しますが、前の例よりも遅く加速します。

角速度は、物体の回転速度の測定値、または物体が固定された点または軸の周りで回転する速さを示します。Studioでは、物体が1秒間に回転するRadiansの数に基づいて角速度を測定します。1回転には2πラジアン(6.283)が存在するため、物体が1秒間に完全な回転をするには、約6ラジアン回転するのに十分なトルクが必要です。角速度を理解することは、体験のゲームプレイを設計する上で重要であり、回転するオブジェクトの特定の加速度を達成するために必要なトルクを決定するのに役立ちます。
次のセクションでは、固定または初期の角速度でオブジェクトを回転させる方法を学び、環境内の逆向きの物理的力を克服するための必要なトルクを理解します。これからの技術を使って物理の概念を検討しながら、Studio内で理想的な回転動作を実現するためにプロパティの値を調整する方法をより正確に予測できるようになります。
一定の角力を維持する
オブジェクトが一定の角速度に達し、それを維持するためには、オブジェクトの角速度を減速させる或いは静止させる逆向きの物理的力を克服するための角力が必要です。例えば、Studio内でオブジェクトの角速度を [0, 12, 0] に設定したい場合、そのオブジェクトが環境内でY軸に沿って1秒間に 12 ラジアン回転するために十分なトルクが必要です。つまり、約1秒間に2回の完全な回転をするということです。
適用するトルクの量は、環境内の逆向きの物理的力、例えば重力や摩擦だけでなく、オブジェクト自体にも依存します。例えば、同じ形の2つのオブジェクトが同じ軸で回転している場合、大きい方のオブジェクトはより大きな慣性モーメントが必要なため、同じ角加速度を達成するためにはより多くのトルクが必要です。
次のサブセクションでは異なる形状とサイズのアセンブリを使用して、オブジェクト全体を回転させる方法またはオブジェクトの一部だけを回転させる方法を学びます。さまざまなプロパティの値を試すことで、独自の体験のアセンブリに必要な最大トルクを推定する方法を学びます。
AngularVelocity制約を使用する
AngularVelocityオブジェクトは、全アセンブリにトルクを適用し、一定の角速度を維持するためのモーバー制約の一種です。アセンブリを回転させ始めるには、AngularVelocity制約は以下を知る必要があります:
- 角力を適用する点と正または負の方向。
- アセンブリを1秒間に何ラジアン回転させたいか。
- アセンブリが一定の角速度に達するためにエンジンが適用できる最大のトルク。
このプロセスを実演するために、アセンブリを回転させるためのアタッチメントを持つブロックをワークスペースに追加し、そのブロックをY軸に沿って1秒間に6ラジアンの角速度で回転させます。

アタッチメントを追加
アセンブリを回転させるための固定点を指定するには、アセンブリにAttachmentオブジェクトを追加し、3D空間内でアタッチメントの位置を設定します。サンプルの回転するオブジェクト体験では、制約がブロックの中央を回転させることができるように、ブロックパーツの中心にアタッチメントを配置しています。
アタッチメントには、その回転軸を視覚化するための視覚的補助が含まれています。黄色い矢印はアタッチメントの主軸を示し、オレンジの矢印はアタッチメントの副軸を示します。この手法の手順ではどちらの回転軸もブロックの回転に影響を与えませんが、HingeConstraintなどのさまざまなタイプの制約の理想的な挙動を判断するのに役立ちますので、将来的に参照するために理解しておくことが重要です。

アタッチメントを追加するには:
Explorerウィンドウで、ブロックパーツをWorkspaceに挿入します。

新しいパーツにアタッチメントを挿入します。
- Explorerウィンドウで、パーツの上にカーソルを置き、⊕ボタンをクリックします。コンテキストメニューが表示されます。
- メニューからアタッチメントを挿入します。アタッチメントがパーツの中心に表示されます。
- アタッチメントの名前をSpinAttachmentに変更します。

制約を設定
ブロックに回転させるための固定点ができたので、AngularVelocity制約のプロパティを設定し、回転の方向、ターゲットの一定の角速度を適用する軸、ブロックが1秒間に何ラジアン回転するか、ブロックが一定の角速度に達するためにエンジンが適用できる最大トルクを指定できます。
サンプルの回転するオブジェクト体験では、ブロックをY軸に沿って1秒間に6ラジアンの一定の角速度で回転させるため、最大1000Rowtonスタッドの角力を適用します。Rowtonスタッドは、トルクを測定するためのRobloxの主要な物理単位です。Robloxの物理単位とそれらがメートル法の単位にどのように変換されるかについては、Roblox Unitsを参照してください。
AngularVelocity制約を設定するには:
制約の回転の方向を参照できるようにするため、Studioの表示メニューから制約の詳細を表示を有効にします。
パーツにAngularVelocity制約を挿入します。
- Explorerウィンドウでパーツにカーソルを合わせて⊕アイコンをクリックします。コンテキストメニューが表示されます。
- コンテキストメニューからAngularVelocityを挿入します。制約の視覚的補助がパーツの中央に表示されます。
新しい制約にパーツのアタッチメントを割り当てます。
- Explorerウィンドウで制約を選択します。
- プロパティウィンドウで、
- Attachment0をSpinAttachmentに設定します。
- AngularVelocityを0, 6, 0に設定して、パーツがY軸に沿って6ラジアン回転するようにします。もしこのプロパティを0, -6, 0に設定すると、ブロックは時計回りに回転します。
- MaxTorqueを1000に設定して、ターゲット角速度を達成するために最大1000Rowtonスタッドの一定の角力を1秒あたり適用します。
- RelativeToをWorldに設定して、ブロックが世界の位置と向きを基準に回転するようにします。

設定したトルクの量がブロックを1秒間にY軸に沿って6ラジアン回転させるかどうか確認します。
メザニンのドロップダウンメニューからランシミュレーションモードを選択し、再生ボタンをクリックして開始します。Studioは、3D空間内のアバターなしで、現在のカメラ位置で体験をシミュレートします。

ブロックのスケールや環境内の逆向きの物理的力に応じてトルクを調整する必要があるかもしれません。例えば、サンプルの体験のAngularVelocity制約のプロパティは、プラスチック素材のフラットプラットフォーム上にデフォルトサイズ4, 1, 2のブロックパーツに適しています。そして、クラシックプリセットの重力を持つ環境です。
しかし、ブロックがより大きなサイズで草地にある場合、角力はブロックの質量と環境からの摩擦を克服する必要があるため、AngularVelocity.MaxTorqueプロパティを増やす必要があります。例えば、サンプルのパーツの4倍のサイズの大きなブロックパーツは、設定された角速度を達成するために少なくとも300000Rowtonスタッドの一定の角力が必要です!
HingeConstraint制約を使用する
HingeConstraintオブジェクトは、2つのアタッチメントが1つの軸の周りで回転できるようにする機械的制約の一種です。この制約は、アタッチメントの主軸を同じ方向に合わせることで、アタッチメントを同じ位置に制約します。HingeConstraint.ActuatorTypeをモーターに設定すると、この制約は2つのアタッチメントにトルクを適用し、アタッチメントが一定の角速度に達し、これを維持することを目指します。
さらに、2つのオブジェクトを持つアセンブリにアタッチメントを配置すると、オブジェクトはロックされ、アタッチメントの固定された主軸に従って一緒に回転しようとします。これらのオブジェクトのうち1つを固定すると、角力は他のオブジェクトを一定の角速度で回転させ続けます。
例えば、アセンブリ内の特定のオブジェクトを回転させ始めるには、HingeConstraint制約は以下を知る必要があります:
- アタッチメントが重なる位置。
- 角力を適用する点と正または負の方向。
- アタッチメントが1秒間に何ラジアン回転することを望むか。
- アタッチメントが一定の角速度に達するためにエンジンが適用できる最大トルク。
このプロセスを実証するために、ワークスペースに2つのオブジェクトを持つプロペラアセンブリを追加し、両方のオブジェクトにHingeConstraint制約が参照するアタッチメントを持たせて、プロペラをY軸に沿って1秒間に3ラジアン(約半回転)で定常状態で回転させます。

プロペラアセットの取得
クリエイターストアは、RobloxやRobloxコミュニティによって作成されたすべてのアセットをプロジェクト内で使用するために見つけるためのツールボックスのタブです。モデル、画像、メッシュ、オーディオ、プラグイン、ビデオ、およびフォントアセットを含むアセットライブラリをプロジェクトに直接追加するために使用できます。このチュートリアルでは、各ステップのHingeConstraint技法を複製するために使用できるプロペラモデルを参照します。このプロペラアセットをインベントリから体験に取り入れる方法は以下の通りです。
プロペラをインベントリに追加します。
- アセットの詳細ページに移動します。
- 右上のモデルを取得ボタンをクリックします。プロペラアセットがインベントリに追加され、プラットフォーム上の任意のプロジェクトで再利用できます。
Studioで、ホームタブに移動し、ツールボックスボタンをクリックします。ツールボックスウィンドウが開きます。

ツールボックスウィンドウで、インベントリタブをクリックします。マイモデルのソートが表示されます。

プロペラタイルをクリックします。モデルがビューポートに表示されます。

アタッチメントを設定
アセンブリ内の特定のオブジェクトを回転させるために、アタッチメントの重なる位置と回転運動の方向を指定するには、アセンブリに2つのAttachmentオブジェクトを追加し、それらの配置と向きを3D空間内で設定します。
サンプルの回転するオブジェクト体験では、固定されたプロペラが固定されたベースと重なる位置の近くに2つのアタッチメントが配置されており、それらの主軸が上向きに整列されているので、回転が反時計回りになります。この例では、ベースのアタッチメントは固定されているため、回転することはできません。
ヒンジ制約のためのアタッチメントを設定するには:
HeadとBaseにそれぞれAttachmentオブジェクトを挿入します。
- ExplorerウィンドウでHeadにカーソルを合わせ、⊕ボタンをクリックします。コンテキストメニューが表示されます。
- メニューからアタッチメントを挿入します。
- Baseでもこのプロセスを繰り返します。
- 両方のアタッチメントをそれぞれHeadAttachmentとBaseAttachmentに名前を変更します。

HeadAttachmentとBaseAttachmentを回転させて、各アタッチメントの主軸がY軸の上向きになるようにします。これにより、Studioはアタッチメントを反時計回りに回転させます。

BaseAttachmentをBaseの上部に、HeadAttachmentをプロペラの下部エッジに移動します。これにより、Studioはヒンジ自体をどこで接続するべきか、両方のアタッチメントをランタイムで重ね合わせます。

制約を設定
アタッチメントの位置が重なり、回転運動の方向が決まったので、HingeConstraint制約のプロパティを設定して、アタッチメントが1秒間に何ラジアン回転することを望むか、アタッチメントが一定の角速度に達するためにエンジンが適用できる最大トルクを指定できます。
前の技術と同様に、サンプルの回転するオブジェクト体験では、アタッチメントをY軸に沿って1秒間に3ラジアンの一定の角速度で回転させるために最大1000Rowtonスタッドの角力を適用します。ただし、根本的アタッチメントは固定されたオブジェクト内にあるため、プロペラのアタッチメントのみが回転できます。
ヒンジ制約を設定するには:
HeadにHingeConstraintオブジェクトを挿入します。
- ExplorerウィンドウでHeadにカーソルを合わせ、⊕アイコンをクリックします。コンテキストメニューが表示されます。
- コンテキストメニューからHingeConstraintを挿入します。
プロペラのアタッチメントを新しい制約に割り当てて、プロペラが固定されたベースに相対して回転するようにします。
- Explorerウィンドウで制約を選択します。
- プロパティウィンドウで、
- Attachment0をBaseAttachmentに設定します。
- Attachment1をHeadAttachmentに設定します。ヒンジがビューポートに表示されます。

Explorerウィンドウで制約を選択し、プロパティウィンドウで、
- ActuatorTypeをモーターに設定します。新しいプロパティフィールドが表示されます。
- MotorMaxTorqueを1000に設定して、ターゲット角速度を達成するために最大1000Rowtonスタッドの一定の角力を適用します。
- AngularVelocityを3に設定して、プロペラの頭部を1秒間に3ラジアン回転させます。

設定したトルクの量がプロペラをY軸に沿って1秒間に3ラジアン回転させるかどうか確認します。
メザニンのドロップダウンメニューからランシミュレーションモードを選択し、再生ボタンをクリックして開始します。Studioは、3D空間内のアバターなしで、現在のカメラ位置でその体験をシミュレートします。

初期の角力を適用
オブジェクトの角速度を変更する別の方法は、角力のインパルスを適用することです。角力のインパルスの後、物体は摩擦のような逆向きの力が存在する場合には減速して静止するか、逆向きの力がなければ一定の速度で動き続けます。
この技法は、強い風のような重要なゲームプレイまたは天候イベントの後にオブジェクトを回転させるのに便利で、プレイヤーに瞬時にフィードバックを提供します。このプロセスを実証するために、次のサブセクションでは、初期のランダムな角力を持つアセンブリを回転させる方法を教え、その値を新しく適応してゲームプレイの要件に合わせていきます。
ApplyAngularImpulseを使用する
ApplyAngularImpulseメソッドは、オブジェクトに初期の角速度を獲得させるために全アセンブリにトルクを適用し、その後停止するまで減速します。アセンブリを回転させ始めるには、メソッドは以下を知る必要があります:
- 回転させたいアセンブリ。
- 初期の角速度に到達するためにトルクを適用する軸。
- 各軸に適用するトルクの量。
これらの値はスクリプト内で定義できます。例えば、サンプルスクリプトでは、回転させるアセンブリをスクリプトの親と定義し、その後Y軸上で0から100 Rowtonスタッドのランダムな角力を適用します。
ApplyAngularImpulseを使用してアセンブリを回転させるには:
Workspaceに球体パーツを挿入します。サンプルでは、運動を明確に視覚化できるようにMaterialVariantを持つ球体を使用しています。

新しいパーツにスクリプトを挿入します。
- Explorerウィンドウで、パーツの上にカーソルを置き、⊕ボタンをクリックします。コンテキストメニューが表示されます。
- メニューからスクリプトを挿入します。
デフォルトのコードを以下のコードに置き換えます:
local part = script.Parentlocal impulse = Vector3.new(0, math.random(0, 100), 0)part:ApplyAngularImpulse(impulse)