「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

By schilverberch

ROBLOXでゲームを作ろう! 一緒にプログラミングを学びましょう。

コメントを残す