「Ball in Socket/旋回軸」は BallSocketConstraint というものに該当します。これはRobloxの物理エンジンが管理する2つのパーツを接続し、それらを一緒に保持する一方で、パーツ間の任意の回転を許可します。これは、その名前が示すように、「ボールとソケット」の関係性をエミュレートします。例えば、人間の肩関節のような動きを模倣するために使用されます。
以下に、2つのパーツを BallSocketConstraint を使用して接続するプログラム例を示します。このプログラムは単独で動作しますので、Workspace もしくは ServerScriptService に入れて実行してください。
-- 2つのパーツを作成
local part1 = Instance.new("Part",workspace)
part1.Position = Vector3.new(0,9,0)
part1.Size = Vector3.new(1,1,1)
part1.Anchored = true
local part2 = Instance.new("Part",workspace)
part2.Position = Vector3.new(0,6.5,0)
part2.Size = Vector3.new(4,4,4)
part2.Shape = Enum.PartType.Ball
-- それぞれのパーツにAttachmentを追加
local attachment0 = Instance.new("Attachment", part1)
local attachment1 = Instance.new("Attachment", part2)
-- Attachment の位置を面にする
attachment0.Position = Vector3.new(0,-0.5,0)
attachment1.Position = Vector3.new(0,2,0)
-- RigidConstraintを作成
local rigidConstraint = Instance.new("BallSocketConstraint",part1)
rigidConstraint.Attachment0 = attachment0
rigidConstraint.Attachment1 = attachment1
このプログラムは、Part1(立方体)とPart2(球体)の2
つのパーツを相互に接続し、それらの間に任意の回転を許可します。それぞれのパーツに Attachment を追加し、それらを新たに作成した BallSocketConstraint に接続します。
BallSocketConstraint を使用する場合、それが接続するパーツは両方とも Anchored プロパティが false(アンカーされていない)である必要があります。パーツがアンカーされている場合、物理エンジンはそのパーツを固定されたオブジェクトとみなし、BallSocketConstraint は期待通りに動作しない可能性があります。
Limits
LimitsEnabled プロパティを有効にすると、ボールソケットの傾きとひねりの両方を制限するUpperAngleが表示されます。LimitsEnabledプロパティを有効にすると、UpperAngle が表示され、円錐内の傾きを制限することができます。また、TwistLimitsEnabledプロパティも公開され、有効にすると、TwistLowerAngleとTwistUpperAngleの制限を通してねじれの回転を制限することができます。