title: Unity best practice: How to represent (hold and pass) the game items/enemies/attacks/etc? as scriptable-objects or prefabs?
body: <p>I want to create a game with tons of different enemies, items, accessories, heroes, attacks and more.
  To make it easily expandable and maintenance, I want to create the game in the most modular way possible so nothing in the game will be built-in and every aspect of the game will be assembled and configured.</p>
  <p>But I'm undecided as to how the elements should be modeled:</p>
  <ol>
  <li><p>As <strong>ScriptableObject</strong>s - (for example) every enemy will be configured and represented by some scriptabe-object and this asset will contains the enemy stats and behaviours but also the enemy prefabs so the script will tell us how to create the enemy object in the game.
  <strong>so if I have some place that I want to put some enemy in it, I should (for example) attach on the inspector the enemy's scriptable-object</strong>.</p>
  </li>
  <li><p>As <strong>Prefab</strong>s - every enemy will be represented by some prefab and the prefab root object will contains some scriptable-object that its purpose is to hold some specific enemy stats and behaviours and the enemy will be act according to them.
  <strong>so if I have some place that I want to put some enemy in it, I should attach on the inspector the enemy's prefab</strong>.</p>
  </li>
  </ol>
  <p>Is there some best practice for that? a way that will make my life easier when the game will be particularly large and complex?</p>