動くブロック(Part)の作り方【Roblox Studio】

乗ってキャラクターが運ばれるブロックの作り方を2種類ご紹介します。

BodyPosition – 指定の位置まで移動
BodyVelocity – 一定の速度で移動


共通内容

PartにScriptとBodyAngularVelocityをインサート

BodyAngularVelocityのプロパティを変更

BodyAngularVelocityのプロパティを変更します。
変更しないとブロックに乗った時に回転してしまいます。

AngularVelocity:0.0.0
MaxTorgue: inf,inf,inf

Partのプロパティを変更(任意)

動かしたいブロックPartが別の物体に衝突する場合は以下の値を設定しておくと安定します。

Dencity:100
Elacity:1
ElacityWeight:100

あとはAnchoredのチェックはないことを確認しておきましょう

BodyPositionを利用する場合

特定の位置まで移動したい場合はBodyPositionを利用します。ただし、速度が一定ではなく最初が速く、目的地に近づくにつれ、徐々に減速します。

BodyPositionをインサート

BodyPositionのプロパティを変更

BodyPositionのプロパティを変更します。
MaxForceが低いと空中に浮いてくれません。

MaxForce: inf,inf,inf
Velocity: 0,0,0

P(Power)の値で速度を調整します。

Scriptを記載

local rootPart = script.Parent
local rootPosition = rootPart.Position
local bodyPosition = rootPart.BodyPosition

local direction1 = Vector3.new(0, 30, 0)
local movingTime = 4

while true do

	bodyPosition.Position = rootPosition + direction1
	wait(movingTime)

	bodyPosition.Position = rootPosition
	wait(movingTime)

end

BodyVelocityを利用する場合

一定の速度で移動させたい場合はBodyVelocityを利用します。ただし、物体やプレイヤーに衝突すると軌道がずれる可能性があります。

BodyVelocityをインサート

動かしたいPartにBodyVelocityをインサートします。

BodyVelocityのプロパティを変更

BodyVelocityのプロパティを変更します。
MaxForceが低いと空中に浮いてくれません。

MaxForce: inf,inf,inf
Velocity: 0,0,0

Scriptを記載

Script:

local part = script.Parent
local bodyVelocity = part.BodyVelocity

local direction1 = Vector3.new(-10, 0, 0)
local direction2 = Vector3.new(10, 0, 0)
local neutral = Vector3.new(0, 0, 0)
local stoppingTime  = 1
local movingTime = 3


while true do
		
	bodyVelocity.Velocity = direction1
	wait(movingTime)
	
	bodyVelocity.Velocity = neutral
	wait(stoppingTime)
	
	bodyVelocity.Velocity = direction2
	wait(movingTime)
	
	bodyVelocity.Velocity = neutral
	wait(stoppingTime)
	
end

参考

詳しくは公式ドキュメントを参考。
https://developer.roblox.com/en-us/articles/BodyMover