サイトアイコン schilverberch★ROBLOX

パーツを動かす

Partの移動アニメーション

スムーズにパーツを移動させます。

  1. Workspace に Part を1つ追加します。
  2. 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 を動かす場合は下記の通りになります。

  1. いくつかの Part を追加します。
  2. それらを Model にします。(すべて選択し、右クリックメニューで Group を実行)
  3. Model の Anchor をオンにします。
  4. Model 内の代表的な Part の名前を変更します。(下記の例では「primary」としました)
  5. 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へ往復移動させます。

  1. 適当なモデルをToolBoxから挿入します。Anchor をオンにします。
  2. 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を使うのがベストです。

TweenAnimation

モバイルバージョンを終了