Help with moving and rotating in zero-gravity

I want to make a simulator for a space station like the ISS and I need help creating a script that can float. It can rotate and move.

I have tried the Fly script but it can only move back and forth and I have to double click the space bar to fly. I also want the body to follow the camera.

local Player = game.Players.LocalPlayer
local Character = Player.Character or Player.CharacterAdded:Wait()
local Humanoid = Character:WaitForChild("Humanoid")
local Anim = Instance.new("Animation")
Anim.AnimationId = "rbxassetid://2522658890"
local PlayAnim = Humanoid:LoadAnimation(Anim)
local HumaoidRP = Character:WaitForChild("HumanoidRootPart")
local UIS = game:GetService("UserInputService")
local Mouse = Player:GetMouse()


local TapTime = .25
local Tapped = false
local Toggle = false

UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.Space then
		if not Tapped then
			Tapped = true
			wait(TapTime)
			Tapped = false
		else
			if Toggle == false then
				local Jump = Instance.new("BodyVelocity",HumaoidRP)
				Jump.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
				Jump.Velocity = Vector3.new(0,50,0)
				game.Debris:AddItem(Jump,.5)
				wait(.5)
				HumaoidRP.Anchored = true
				Toggle = true
			elseif Toggle == true then
				Toggle = false
				HumaoidRP.Anchored = false
				local Children = HumaoidRP:GetChildren()
				for i, child in pairs(Children) do
					if child:IsA("BodyVelocity") then
						child:Destroy()
					end
				end
			end
		end
	end
end)
UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.W then
		if Toggle == false then return end
		PlayAnim:Play()
		HumaoidRP.Anchored = false
		if HumaoidRP:FindFirstChildOfClass("BodyVelocity") then
			HumaoidRP:FindFirstChildOfClass("BodyVelocity"):Destroy()
		end
		local Forward = Instance.new("BodyVelocity",HumaoidRP)
		Forward.Name = "ForwardMovement"
		Forward.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
		local Gyro = Instance.new("BodyGyro",HumaoidRP)
		Gyro.MaxTorque = Vector3.new(math.huge,math.huge,math.huge)
		Gyro.D = 100
		Gyro.P = 10000
		while Toggle == true do
			Forward.Velocity = Mouse.Hit.lookVector*10
			Gyro.CFrame = Mouse.Hit
			wait()
		end
	end
end)
UIS.InputEnded:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.W then
		if Toggle == false then return end
		if HumaoidRP:FindFirstChild("ForwardMovement") then
			HumaoidRP.ForwardMovement:Destroy()
			HumaoidRP.Anchored = true
			PlayAnim:Stop()
			if HumaoidRP:FindFirstChildOfClass("BodyGyro") then
				HumaoidRP:FindFirstChildOfClass("BodyGyro"):Destroy()
			end
		end
	end
end)
UIS.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.S then
		if Toggle == false then return end
		HumaoidRP.Anchored = false
		if HumaoidRP:FindFirstChildOfClass("BodyVelocity") then
			HumaoidRP:FindFirstChildOfClass("BodyVelocity"):Destroy()
		end
		local Back = Instance.new("BodyVelocity",HumaoidRP)
		Back.Name = "BackMovement"
		Back.MaxForce = Vector3.new(math.huge,math.huge,math.huge)
		local Gyro = Instance.new("BodyGyro",HumaoidRP)
		Gyro.MaxTorque = Vector3.new(math.huge,math.huge,math.huge)
		Gyro.D = 100
		Gyro.P = 10000
		while Toggle == true do
			Back.Velocity = Mouse.Hit.lookVector*-10
			Gyro.CFrame = Mouse.Hit
			wait()
		end
	end
end)
UIS.InputEnded:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.S then
		if Toggle == false then return end
		if HumaoidRP:FindFirstChild("BackMovement") then
			HumaoidRP.BackMovement:Destroy()
			HumaoidRP.Anchored = true
			if HumaoidRP:FindFirstChildOfClass("BodyGyro") then
				HumaoidRP:FindFirstChildOfClass("BodyGyro"):Destroy()
			end
		end
	end
end)

Move with WASD.
Press Q or E to spin left or right.

1 Like