Your crashes is mostly because of improper handling of the object's ownership.
When you add something to a collection, you should clearly understand who's owning the object. Is that handler owns the added objects now, and may delete those when time has come? Or is that handler only references the objects, and there's some other subsystem that will destroy ...
Another option is to use the Projector object in the unity standard assets folder. It isn't very performant, but is really easy to set up. So for simple cases, it may be exactly what you are looking for. But like I said it has a pretty significant performance impact especially if you're projecting larger textures.
Looks like that there's a referenced missing script, attached to some of your game objects.
You can use this kind of helper scripts, to find problems, if you have some super big hierarchy.
Find Missing Scripts