I made a Module that can be used to create realistically projected optics, I am very new to scripting so please be gentle and leave suggestions or feedback.
It assumes this kind of structure, which is commonly used when making gun optics
It also assumes that the SurfaceGui.Face is set to front, however this is easily modifyable.
API:
Reticle.new(Cam instance,ZeroDistance int,Decal instance,Surface instance)
returns Reticle object
Cam: Your camera
ZeroDistance: The distance at which the reticle is projected(doesn’t account for bulletdrop)
Decal: ImageLabel of the reticle
Surface: Surface that the reticle is projected onto
Reticle:Update(lookVector Vector3)
Should be tied to a RunService event, updates reticle based on the given lookVector.
You should give the LookVector of something that faces the direction that your bullet will fire.
Reticle:Destroy()
https://www.roblox.com/library/7709787645/Projected-Reticle-Module
Edit:
You sometimes have to wrap the call of the Update() function into a coroutine or a spawned function for it to work.