- Home /
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.
Answer by Owen-Reynolds · Jun 12, 2013 at 11:52 PM
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.
Right, I assumed as much, just wanted to make sure that wasn't some optimization happening during code generation. Also agree its probably not worth the memory savings to try a separate scheme, just wanted to be aware of it.
Thanks.
Your answer
Follow this Question
Related Questions
How to disable referenced Prefabs being preallocated in memory?? 0 Answers
Webplayer crashes on Chrome, but not on any other browser. Any way to avoid ? 1 Answer
Optimization on list handling 2 Answers
Do duplicate gameobjects use duplicate memory? 2 Answers
Long load time for scene... Some optimization questions. 1 Answer