Partの移動アニメーション
スムーズにパーツを移動させます。
- Workspace に Part を1つ追加します。
- Part に Scriptを追加します。
local part = script.Parent
function move(x,y,z)
for i=1,20 do
part.Position += Vector3.new(x,y,z)
wait(0.01)
end
end
while true do
move(1,0,0)
move(-1,0,0)
move(0,1,0)
move(0,-1,0)
move(0,0,1)
move(0,0,-1)
end
Modelの移動アニメーション(1)
一般的には、複数のパーツを1つにまとめ、Model にすると思います。Model を動かす場合は下記の通りになります。
- いくつかの Part を追加します。
- それらを Model にします。(すべて選択し、右クリックメニューで Group を実行)
- Model の Anchor をオンにします。
- Model 内の代表的な Part の名前を変更します。(下記の例では「primary」としました)
- Model に Script を追加します。
-- 事前にModelのPropertiesのPrimaryPartに設定するのもOK
local model = script.Parent
model.PrimaryPart = model.primary
function move(x,y,z)
for i=1,20 do
model:MoveTo(model.primary.Position + Vector3.new(x,y,z))
wait(0.01)
end
end
while true do
move(1,0,0)
move(-1,0,0)
move(0,1,0)
move(0,-1,0)
move(0,0,1)
move(0,0,-1)
end
Modelの移動アニメーション(2)
PivotTo を使用すれば、PrimaryPart を設定しなくても移動できます。
local model = script.Parent
function move(x,y,z)
for i=1,20 do
model:PivotTo(model:GetPivot() + Vector3.new(x,y,z))
wait(0.01)
end
end
while true do
move(1,0,0)
move(-1,0,0)
move(0,1,0)
move(0,-1,0)
move(0,0,1)
move(0,0,-1)
end
MoveToとPivotToの違い
MoveTo も PivotTo もどちらもモデルを移動する関数ですが違いがあります。
MoveTo の方は、モデル同士が重ならないように座標が調整されます。一方、PivotTo の方は座標変換は行われませんので、モデル同士が重なることがあります。
また、MoveTo は 表示されているモデルが対象になりますが、PivotTo は表示していないモデルでも座標を更新することができます。
座標間のスムーズ移動
Model を座標1から座標2へ往復移動させます。
- 適当なモデルをToolBoxから挿入します。Anchor をオンにします。
- Model に Script を追加します。
local next1CFrame = CFrame.new(-116,90,-108) -- 座標1
local next2Cframe = CFrame.new(50,8,180) -- 座標2
local model = script.Parent
model:SetPrimaryPartCFrame(next1CFrame) -- modelがすでにnext1CFrameにある場合は不要
while true do
for i=0, 1, 0.05 do -- ステップ数(0.05) の数字を大きくすると移動速度が速くなる
model:SetPrimaryPartCFrame(model:GetPrimaryPartCFrame():Lerp(next2CFrame,i))
-- model:GetPrimaryPartCFrame() が現在の位置
wait()
end
for i=0, 1, 0.05 do
model:SetPrimaryPartCFrame(model:GetPrimaryPartCFrame():Lerp(next1Cframe,i))
wait()
end
end
Lerp は、Vector3 のメソッドです。Leap(Vector3 goal,number alpha) で指定します。goal との間を alpha によって線形補間された Vector3 を返します。なお、alpha の範囲 [0, 1] に限定されません。
TweenAnimationを使う
上記の方法では「スタートからゴール位置まで2秒で動かしたい」というようなことを実現するには非常に困難です。そのような場合は、TweenAnimationを使うのがベストです。
パーツを動かした場合、上下だとキャラクターもついてくるのですが左右だとキャラクターは落ちてしまいます。
動くパーツとキャラクターも一緒に動くようにはどのようにすればよいのでしょうか?
もう少し詳しくご説明ください。
プログラムコードを貼り付けていただければ分かり易いかと思います。
Workspace
∟ MoveBlock
∟ MoveBlockScript
のようにMoveBlockを作ったとします。
プログラム
local move = script.Parent
while true do
for count = 1,50,1 do
move.Position += Vector3.new(0,0,1)
wait()
end
for count = 1,50,1 do
move.Position -= Vector3.new(0,0,1)
wait()
end
end
MoveBlockを上記のプログラムで横移動させると、キャラクターはその場に留まりMoveBlockだけが横移動してキャラクターがブロックから落ちてしまいます。
MoveBlockとキャラクターが同時に動くようにしたいのですがどのようにすればよいのでしょうか?
確かにその通りですね。
キャラクターを上に乗せて動かしたい場合は、PrismaticConstraint を使うといいでしょう。
下記のページで簡単に解説していますのでご覧ください。
https://roblox-jp.com/technology/prismaticconstraint/
あと、「ロブロックス先生」も活用できますのでご利用ください。
https://chat.openai.com/g/g-koM7AR3zh-roburotukusuxian-sheng