How to properly destroy non-instantiated objects over a network?

After more than a week testing and retesting many different ways to do this and examining every post I can find here and elsewhere, I am starting to think this is not even possible via any means within unity. This not so much a code question but a concept clarification as I really just don’t get Unity’s take on networking.

Is there a way to destroy an object which was in the scene when the game was started - non-Network.Instantiate’d - and have it permanently removed from the scene so that it does not reappear for players joining later. Surely there is some way the server can do this. I have tried sending messages and RPCs in every possible combination I can think of but I just can’t make it work. It would be counter productive if I were to post the code in question because as I have said I have tried so many combinations which simply haven’t worked.

Add to this the fact of starting 2 clients and a server to check it thousands of times and I’m sure you can relate to my current state of sanity :slight_smile:

I just find it mind-boggling bizarre that Unity doesn’t seem to be able to do this. At the moment it seems like I would need to Network.Instantiate every item that might possibly be destroyed during a game. Surely that can’t be the case - can it?

Again not looking for specific code examples but conceptual de-obfuscation, any help very much appreciated. I hope I have just misunderstood or overlooked something and hopefully your response will provide a simple solution which makes me look very foolish :slight_smile:

Since I have an answer that resolves from several different inputs, I will try to encapsulate the approach I took as an answer.

I used a single networkview on an empty game object and made all destructibles children of that object. I used a dictionary to store references to the destructible objects and also gave them an ID via attached script which matched the index in the dictionary. The result was that I had direct access to the object for both getting (via raycasthit - ID) and setting health (via RPC - index) with no iteration involved.

Destroy was called locally on server with RPC to others. No buffered RPCs required.

Again thanks to those who helped out with most useful guidance.