Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
2

How to move a part using a script?

Asked by 4 years ago

I want to make a moving spotlight. Please tell me how to move and rotate a part using a script.

0
thank you everyone who helped me! mr_maker231 14 — 4y

3 answers

Log in to vote
0
Answered by
Borrahh 265 Moderation Voter
4 years ago

I would suggest you to Google Basic Stuff, to understand them Better.

Firstly, You need to locate it, Your Part must be in the workspace. So you locate it with:

game.workspace.Part.CFrame = CFrame.new(4, 6, 5)

On The Parameters CFrame.new(You write here where you want the place to teleport to)

Ad
Log in to vote
0
Answered by 4 years ago
Edited 4 years ago

Hello, mr_maker231. Looks like your a beginner. You'd need to use Position. For example,

workspace.Part.Position = Vector3.new(10, 10, 10)

We use Vector3 for things like position and size. That code would make the part go up 10 studs on the Y-axis (hight), 10 studs on the X-axis (width), and 10 studs on the Z-axis (length). Studs are the units used to measure size and coordinates on Roblox. You can also use CFrames, but that can be a little too advanced for a beginner. Please accept this answer if it helped.

Log in to vote
0
Answered by 4 years ago
Edited 4 years ago

Hey there, by moving spotlight I assume you're trying to make a moving lamp or something similar. There are multiple ways to do this, and I'll start with the simplest method.

1. Incremental Vector3

This is fairly simple. Your brick has a Position and you can tell it to gradually move in a direction or a vector. To do this, you can use Vector3.

local Part = game.Workspace.Part
Part.Position = Part.Position + Vector3.new(0, 1, 0)

-- Here, we are telling the game that the part's position is now equal to itself... PLUS 1 stud in the y-axis.
-- What this means is that we are moving the part 1 stud upwards.

If we wanted to make the brick look like it's levitating up and down, we can use a loop:

local Part = game.Workspace.Part

while true do
    for i=1, 5 do
        Part.Position = Part.Position + Vector3.new(0, 0.1, 0)
        wait(0.1)
    end
    for i=1, 5 do
        Part.Position = Part.Position + Vector3.new(0, -0.1, 0)
        wait(0.1)
    end
end

2. Incremental CFrame

If you want to rotate and move the part then you would use CFrame. Unlike Vector3, a part's CFrame (from Coordinate-Frame) also contains values on the orientation of the part. If you only give it information on which direction to move the part, it will assume the new orientation is zero.

Part.CFrame = CFrame.new(script.Parent.Position + Vector3.new(0, 1, 0))

-- It's best to use CFrame when you need a rotation. If my part was rotated in any way before this script, it will rotate back to (0, 0, 0) afterwards because I haven't given it any orientation value.

3. TweenService

This is probably a bit more complicated than the previous two, but it's definitely more pleasing to the eye and I recommend taking the time to properly learn about TweenService.

Here's how I would set it up for a brick that 'swings' left and right.

local TweenService = game:GetService("TweenService")
local Part = game.Workspace.Part

local TweeningInformation = TweenInfo.new(
    2, -- The animation would last two seconds
    Enum.EasingStyle.Quad, -- Move the brick using a quadratic formula
    Enum.EasingDirection.Out, -- Move the brick outwards
    0, -- Repeat it zero times
    false, -- We don't want to reverse
    0.1 -- Let's have a tiny delay between every swing
)

local Destination1 = {Position = Part.Position + Vector3.new(2.5, 0, 0)} -- We're swinging 2.5 studs to the right.
local Destination2 = {Position = Part.Position + Vector3.new(-2.5, 0, 0)} -- ... And 2.5 studs to the left.

Tween1 = TweenService:Create(Part, TweeningInformation, Destination1) -- Defining the right-swing
Tween2 = TweenService:Create(Part, TweeningInformation, Destination2) -- Defining the left-swing

while true do -- Our main loop
    Tween1:Play() -- Play the swing-right animation
    wait(2.1) -- Wait the time it takes to finish
    Tween2:Play() -- Now to the left...
    wait(2.1) -- And wait for it to finish again
end

You'll notice I had to use Vector3 earlier to define the destination. CFrame still works fine, but I didn't want to reset the part's orientation to (0, 0, 0). If I wanted the lamp to tilt then I would have to use CFrame.

Answer this question