How Could I Make This Camera Script Work Properly For Mobile?

Hey Everyone! so im making this game kind of like piggy but in first person. The pc version is fine but the mobile version is kind of buggy and weird with the camera movement this is what i mean-


as you can see whenever i use the thumbstick (dynamicthumbstick) the camera moves aswell. i have been trying to find a way where i can check if the player is using the thumbstick so the camera doesnt move but i just cant seem to find any help on this what should i do?

-Here Is The Script-

repeat wait() until game:GetService("Players").LocalPlayer.Character ~= nil
local runService = game:GetService("RunService")
local input = game:GetService("UserInputService")
local players = game:GetService("Players")
CanViewBody = true 
Sensitivity = 0.2
Smoothness = 0.05
FieldOfView = 90

local cam = game.Workspace.CurrentCamera
local player = players.LocalPlayer
local m = player:GetMouse()
m.Icon = "http://www.roblox.com/asset/?id=569021388"
local character = player.Character or player.CharacterAdded:wait()
local humanoidpart = character.HumanoidRootPart

local head = character:WaitForChild("Head")
local CamPos,TargetCamPos = cam.CoordinateFrame.p,cam.CoordinateFrame.p 
local AngleX,TargetAngleX = 0,0
local AngleY,TargetAngleY = 0,0

local running = true
local freemouse = false

function updatechar()

	for _, v in pairs(character:GetChildren())do
		if CanViewBody then
			if v.Name == 'Head' then
				v.LocalTransparencyModifier = 1
				v.CanCollide = false
			end
		else
			if v:IsA'Part' or v:IsA'UnionOperation' or v:IsA'MeshPart' then
				v.LocalTransparencyModifier = 1
				v.CanCollide = false
			end
		end
		if v:IsA'Accessory' then
			v:FindFirstChild('Handle').LocalTransparencyModifier = 1
			v:FindFirstChild('Handle').CanCollide = false
		end
		if v:IsA'Hat' then
			v:FindFirstChild('Handle').LocalTransparencyModifier = 1
			v:FindFirstChild('Handle').CanCollide = false
		end

	end

end



input.InputChanged:connect(function(inputObject)

	if inputObject.UserInputType == Enum.UserInputType.Touch then
		local delta = Vector2.new(inputObject.Delta.x/Sensitivity,inputObject.Delta.y/Sensitivity) * Smoothness

		local X = TargetAngleX - delta.y 
		TargetAngleX = (X >= 80 and 80) or (X <= -80 and -80) or X 
		TargetAngleY = (TargetAngleY - delta.x) %360 
	end	

end)


runService.RenderStepped:connect(function()

	if running then
		updatechar()

		CamPos = CamPos + (TargetCamPos - CamPos) *0.28 
		AngleX = AngleX + (TargetAngleX - AngleX) *0.35 
		local dist = TargetAngleY - AngleY 
		dist = math.abs(dist) > 180 and dist - (dist / math.abs(dist)) * 360 or dist 
		AngleY = (AngleY + dist *0.35) %360
		cam.CameraType = Enum.CameraType.Scriptable

		cam.CoordinateFrame = CFrame.new(head.Position) 
			* CFrame.Angles(0,math.rad(AngleY),0) 
			* CFrame.Angles(math.rad(AngleX),0,0)
			* CFrame.new(0,0.8,0)

		humanoidpart.CFrame=CFrame.new(humanoidpart.Position)*CFrame.Angles(0,math.rad(AngleY),0)
		character.Humanoid.AutoRotate = false
	else game:GetService("UserInputService").MouseBehavior = Enum.MouseBehavior.Default; character.Humanoid.AutoRotate = true
	end

	if (cam.Focus.p-cam.CoordinateFrame.p).magnitude < 1 then
		running = false
	else
		running = true
	end

	cam.FieldOfView = FieldOfView

end)

-------------------------
local uis = game:GetService("UserInputService")
local ismobile = false

local function onInputTypeChanged(inputType)
	if inputType == Enum.UserInputType.Touch then
		script.Enabled = true
	else
		script.Enabled = false
	end
end

onInputTypeChanged(uis:GetLastInputType())

uis.LastInputTypeChanged:Connect(onInputTypeChanged)

Some May Recognise This Script Its Because Its A Modified free model script (i know i shouldnt use them but for a complicated script like this im just not this experienced to make my own from scratch)

THANKS FOR YOUR TIME

2 Likes

Instead of moving the characters head move the characters HumanoidRootPart.

but then if i do that whenever i try to look around wouldnt the humanoid root part move around aswell?
what im trying to achieve is where i cant move the head if the dynamicthumbstick is being used

UPDATE i fixed it by checking if the right part of the screen is touched only then would it proceed to move the camera!

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.