Hello, I'm just going to go right into this...
recently I added a camera script into my first person game that makes the player's camera have an offset, the advantage to this is that it gives a good effect, but it has it's downside, which is that the player's camera can clip through the walls.
Is there a way to prevent this? It's ruining the effect of my game and the only way I see a way of fixing this is to entirely remove the script, or add invisible parts along the walls to give a bigger hitbox.
Code I'm using (FM script I modified)
local camera = game:GetService("Workspace").CurrentCamera
local player = game.Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local function setCameraOffset(operation)
if operation == 1 then
humanoid.CameraOffset = Vector3.new(0,0,-1.2)
elseif operation == 2 then
humanoid.CameraOffset = Vector3.new(0,-1,-1.2)
elseif operation == 3 then
humanoid.CameraOffset = Vector3.new(0,-3,-1.2)
end
end
local function lock(part)
if part and part:IsA("BasePart") then
part.LocalTransparencyModifier = part.Transparency
part.Changed:Connect(function(property)
part.LocalTransparencyModifier = part.Transparency
end)
end
end
character.ChildAdded:Connect(lock)
while wait(1) do
if humanoid.CameraOffset == Vector3.new(0,0,0) then
setCameraOffset(1)
elseif humanoid.CameraOffset == Vector3.new(0,0,-1.2) then
setCameraOffset(1)
elseif humanoid.CameraOffset == Vector3.new(0,-1,-1.2) then
setCameraOffset(2)
elseif humanoid.CameraOffset == Vector3.new(0,-3,-1.2) then
setCameraOffset(3)
end
for _,v in pairs(character:GetChildren()) do
lock(v)
end
end

4 comments
Probably you need to make second script that make the player cannot get more near than 1 stus from a wall
1 stud* / elseif the player is getting very near to a wall let's the camera script just move the camera 0.5 stud away from the wall/walls
How would I do that? Raycasting?
raycasting