How are prefab parameters stored in instances?

In our project, we’re evaluating where designer-tweakable data should be stored for any given Prefab.

The easy answer is that components expose tweak-able variables which can be edited in an inspector. So something like-

[SomePrefab] contains [SomeComponent] which has a public integer called ‘TweakValue’. So our designer goes into the inspector and changes the value of that field.

My question is, if at runtime, I then spawn 1000 [SomePrefab] which each has its own [SomeComponent], does each instance have a copy of ‘TweakValue’ allocated in memory?

Thanks for any clarity you can give.

Yes. Every var you see is copied for every instance.

Scripts are just classes which Unity invisibly news for you with the Instantiate. The standard rules for classes are that all vars are copied. If Person is a class with fName and LastName, and you have 100 people, you have 100 first and last names.

A static class var has one copy ever. Saves a lot of space, but you can no longer tweak different instances differently.

Most Unity projects probably create lots of pointless data. If machineGun bullet goes at speed 12 and does 2.3 damage with this explosion PE … then every machineGun bullet wastefully stores all that data. But it probably isn’t that much, and not worth “fixing.”

The fix (to this often non-problem) is to think of it like a relational dataBase. Make a class called “fixedBulletData” with things that identify types of bullets. Make them prefabs so you can link your real bullet PFs to them. Then have give your actual bullets use something like public fixedBulletData myStats; for the link.