These examples represent two common approaches. Essentially, there's a spectrum between programmatic and manual asset creation. The first project is closer to the programmatic end of the spectrum and the second is closer to the manual end of the spectrum.
Choosing between the two will depend on how you want your project organized and the level of coding you're comfortable with.
Personally, I would choose option one. There are a few major benefits with creating cars more by script than with prefab:
- Cars can be generated purely from an external data file. This means you (or your users) can add additional cars later on, simply by loading in new data to your "CarGenerator" prefab.
- Changes to scripts can be merged much easier than changes to a prefab. This is especially important when working in a team environment like you are. If two people made changes to a prefab, it's going to be harder to merge the changes between two prefabs (it gets easier by forcing text serialization in the project settings).
- You can more easily make changes to all your cars, by just changing one car. Consider if you created a new script that needed to be attached to cars. You'd have to attach that script to each of your car prefabs. In the case of using a single prefab that generates all cars, that's only one car prefab that needs modifying.
On the other side of things, having a prefab for each car has benefits as well:
- It's much less scripting work. This means it's likely faster to for a team that doesn't have a lot of coding experience to add new cars.
- It's less complex. You make it once and it is always going to be generated in the way you made it. This simplifies the creation of assets.