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

By schilverberch

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

4 thoughts on “パーツを動かす”
  1. パーツを動かした場合、上下だとキャラクターもついてくるのですが左右だとキャラクターは落ちてしまいます。
    動くパーツとキャラクターも一緒に動くようにはどのようにすればよいのでしょうか?

      1. 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とキャラクターが同時に動くようにしたいのですがどのようにすればよいのでしょうか?

        1. 確かにその通りですね。
          キャラクターを上に乗せて動かしたい場合は、PrismaticConstraint を使うといいでしょう。
          下記のページで簡単に解説していますのでご覧ください。
          https://roblox-jp.com/technology/prismaticconstraint/
          あと、「ロブロックス先生」も活用できますのでご利用ください。
          https://chat.openai.com/g/g-koM7AR3zh-roburotukusuxian-sheng

コメントを残す コメントをキャンセル

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