So I need help in creating this telekinesis script for my game. The idea is, you press e while your mouse is hovering over your target (another player) then the target will be floating and going wherever the position of your mouse is
create a attachment/part on wherever your mouse is when you press E based off raycasting, if a target is found like player then thats where the original position of the instance will be, after that you’re just constantly updating the parts positions to the direction of the mouse whilst maintain respect for the magnitude/distance from the first raycast
Hi! Sorry for the late reply but how exactly do I make the part constantly update its position? (I’m also new to scripting so I apologize)
Well, I won’t be able to really help you for the next 7-8 hours, but after that I could get on my computer and help you, I actually have already made this exact thing
renderstepped mouse position to world space raycast
Thanks! Any help would be appreciated
I have made a LocalScript for you but there’s 3 problems
- It will make you drag EVERY single draggable part
- It constantly moves to the player’s camera, meaning you can barely do anything with your draggable part
- It’s sort of choppy
You can’t really use this script, but you can take a general Idea of how you’d want your script to be done:
-- Get every part in Workspace (including parts in folders, models, other parts etc.)
local descendants = game.Workspace:GetDescendants()
-- Used to detect if player presses keys
local UIS = game:GetService("UserInputService")
-- Used to constantly do an action in this context
local RS = game:GetService("RunService")
-- get the player's mouse
local mouse = game.Players.LocalPlayer:GetMouse()
-- used to not make the player spam the "E" key
local db = false
-- Do something when finding all descendants
for index, descendant in pairs(descendants) do
--[[
1) Go to your draggable part that you want to control with telekinesis
2) Click on "Properties" Tab
3) All the way down , add an ATTRIBUTE with a "Boolean" Value and name it "Draggable"
4) Set the "Draggable" Boolean to true after making the value
5) NOW we find the attribute in the part and we do something with it IF we find it
]]
local Draggable = descendant:GetAttribute("Draggable")
-- if the descendant(part) is draggable, do something
if Draggable == true then
-- Use UIS to detect the player's keys now
UIS.InputBegan:Connect(function(input)
-- If player presses the "E" key
if input.KeyCode == Enum.KeyCode.E then
if db == false then
db = true
RS.RenderStepped:Connect(function()
descendant.position = mouse.Hit.p
end)
end
if db == true then
db = false
descendant.Position = descendant.Position
end
end
end)
end
end
Also, in cases like this, Attributes may not be the best thing to use to find the desired parts
to make the part constantly change the position, you use stuff like RenderStepped Events:
local RS = game:GetService("RunService")
RS.RenderStepped:Connect(function()
descendant.position = -- whatever position you want it to be
end)