As a Roblox developer, it is currently too hard to blacklist parts in the popper camera without using a hack to bind before and after the camera update. This makes it very hard to blacklist items the user is interacting with.
Right now I have a hack implemented to avoid forking the popper camera. This uses some really bad code and can be seen here:
Fixing this would result in much more performance friendly code, or allow me to not for the camera script.
Good camera controls are critical to good gamplay on Roblox. Having a solution to this would be really good.
This is 6 years old, but I’m sure someone else will run into this issue. I spent many hours trying to figure out all of this. This is what worked for me: Roblox Poppercam Ignorelist
Note on Parts vs Model
We can simply put the Model, not each part or children/descendants. It’s better, or easier at the least, than parts:
The Path for the Popper
The crux of the issue, though, is needing to fork Roblox’s PlayerModule, instead of having an accessible point to add to via require(path_to_popper_module). Actual path is:
local PlayerModule_Popper = require(game.Players.LocalPlayer.PlayerScripts:WaitForChild("PlayerModule").CameraModule.ZoomController.Popper)
Note:
PopperCam & Popper?
What’s made things a little confusing as well is that there’s the PopperCam and a Popper Module, two different things. They likely interact at some point, but the whole “Exclusing” Models/Parts seems to have been moved from PopperCam to Popper at some point. That made following older links on this confusing.
CameraAPI?, Removal?, and Forking Issue
Along this journey, I found this Do *NOT* remove the CameraModule API?, which I didn’t even really know there was a CameraModule API, and there was the CameraModule API Public Override. I’m not sure what the state of that API is at the moment, but the feature request (first link) by Max had this:
And, that’s where I’m at now with THIS thread/feature request…
My understanding of modules isn’t amazing, but wouldn’t something like this solve the issue?
local Popper = {}
Popper.excludeList = {}
return Popper
This way, we don’t need to fork the Popper Module, and by extension, the entire PlayerModule script. We could instead use require with the path, and simply do
local PlayerModule_Popper = require(game.Players.LocalPlayer.PlayerScripts:WaitForChild("PlayerModule").CameraModule.ZoomController.Popper)
table.insert(PlayerModule_Popper.excludeList, ModelHere)