「Linear Velocity(線速度)」は LinearVelocity に該当します。これは、Roblox で特定の物理的なインタラクションを制御するためのツールの一つです。特定の直線速度(移動速度)を維持するようにパーツを強制します。
具体的には、パーツは指定した向きと速度で一定の直線移動を続けます。移動方向は VectorVelocity プロパティを使って指定します。そして、RelativeTo プロパティを使用すると、速度が「World」(世界座標系)に対して適用されるか、または「Attachment0」(制約の初めのアタッチメント)に対して適用されるかを指定できます。
例えば、飛行機や車、電車などの移動物体のシミュレーションで使用できます。
パーツに速度を加えたい場合、BodyVelocityというものを使用していました。そのBodyVelocityが非推奨になり、Roblox Studio で直接挿入することができなくなってしまいました。LinearVelocityはそれに代わるものとして使用します。
以下に LinearVelocity のプログラム例を示します。このプログラムは単独で動作しますので、Workspace もしくは ServerScriptService に入れて実行してください。
-- Workspace内に新しいパーツを作成します
local part = Instance.new("Part", workspace)
part.Size = Vector3.new(4, 1, 2)
part.Position = Vector3.new(0,0.5,0)
part.Anchored = false
-- パーツに新しいAttachmentを作成します
local attachment0 = Instance.new("Attachment", part)
attachment0.Axis = Vector3.new(0,1,0)
-- LinearVelocityを作成し、Attachmentを設定します
local linearVelocity = Instance.new("LinearVelocity", part)
linearVelocity.Attachment0 = attachment0
linearVelocity.MaxForce = 100000 -- 力の大きさ
linearVelocity.VectorVelocity = Vector3.new(0,1,0)
上昇するパーツに乗る
プレイヤーが上昇するパーツに乗ると、その重さで回転してしまいます。これを防ぐには、AngularVelocity を使うと良いでしょう。AngularVelocity はパーツに回転を与えるというものですが、回転をさせたくない場合も使用できます。上記のプログラムに追加します。
-- AngularVelocityを作成し、Attachmentを設定します
local angularVelocity = Instance.new("AngularVelocity", part)
angularVelocity.Attachment0 = attachment0
angularVelocity.AngularVelocity = Vector3.new(0,0,0) -- 無回転
angularVelocity.MaxTorque = math.huge -- 最大値
それでも若干回転してしまう場合
それでも、プレイヤーがパーツの上で飛び跳ねると回転してしまいます。それを防ぐには次のプログラムを追加し、常に回転角度を0にリセットすれば良いでしょう。
while wait(1) do -- wait() にするとゲーム処理が重くなるので1秒単位にしている
part.CFrame = CFrame.new(part.Position) -- 角度のリセット
end