I'm making a FPS game in Unity3d with a lot of weapons, but when I'm aiming I can see through the weapon. I know I can adjust the near clipping panel, but when I do that, my terrain starts flickering. Is there some solution?
A common solution to this problem is to create a second camera that only renders a specific custom layer. Then, you simply put the weapon in that same layer. The environment and UI are drawn by the first camera, with its ordinary clipping planes, and the second one can be set up to correctly display the weapon without affecting any other parts of your scene.
Of course, the fact that your terrain is flickering when you adjust your camera's clipping planes might also point to another problem that might need looking into.
You could render the weapon in a separate pass/camera, and just overlay the weapon onto the other view. In Unity this is pretty easy to do by adjusting stuff like the Clipping Mask and Clear Flags of the Camera.