рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реАрдХреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдЕрдЧрд░ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рдг рдХрд╛рд░рдЦрд╛рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рддреЛ рд╕реНрд╡рд┐рдЪ рдХреА рддрд░рд╣ред
рд▓реЗрдХрд┐рди рдпрд╣ рдкрдврд╝рдиреЗ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред
рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЛред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрд▓реЗрд╢рд░ рдЧреЗрдо рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдореЛрдб рд╣реИрдВ: рдЖрд╕рд╛рди, рдордзреНрдпрдо, рдХрдард┐рдиред рдЗрд╕рд▓рд┐рдП, рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬреАрд╡рди рдФрд░ рдХреНрд╖рддрд┐ рд╣реЛрдиреЗ рджреЗрдВред рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд░рдЪрдирд╛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ? рд╕рдм рдХреБрдЫ рдЕрдВрдбрд░рдХрдЯ рд╣реИред
1. рд╡рд┐рд╡рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд░рд╛рдХреНрд╖рд╕ рдХрд╛ рдЕрдиреБрдорд╛рдирд┐рдд рд╡рд┐рд╡рд░рдг рдмрдирд╛рдПрдВред
[Serializable] public class MobDescription { public float MaxHealth; public float Damage; }
2. рд╕реНрддрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╣рдорд╛рд░реЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЛ рднрд░реЗрдВ
рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ json, xml рдпрд╛ рд╕рд┐рд░реНрдл ScriptableObject рд╣реЛред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо ScriptableObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╣рдо рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВрдЧреЗред
[CreateAssetMenu(fileName = "MobDescriptions", menuName = "MobDescriptions", order = 51)] public class MobDescriptions : ScriptableObject { [SerializeField] private List<MobDescription> _listOgre; [SerializeField] private List<MobDescription> _listTroll; public List<MobDescription> ListOgre => _listOgre; public List<MobDescription> ListTroll => _listTroll; }
рдФрд░ рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

рдЪреВрдВрдХрд┐ рд╣рдо рдХрдард┐рдирд╛рдИ рдХреЗ 3 рд╕реНрддрд░реЛрдВ рдХреЛ рдХрд░рддреЗ рд╣реИрдВ, рдЖрдЗрдП рднрд░реЗрдВ

рдЦреИрд░, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдард┐рдирд╛рдИ рд╕реНрддрд░реЛрдВ рдХреЗ рд╕рднреА рд╡рд┐рд╡рд░рдг рд╣реИрдВред
3. mvc рд░рд╛рдХреНрд╖рд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдмрдирд╛рдПрдВред
рдпрд╣ рдореЙрдбрд▓ рдореЗрдВ рд░рд╛рдХреНрд╖рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рд╕реНрдЯреЛрд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред
public class MobModel { private MobDescription _description; private float _currentHealth; public MobDescription Description => _description; public MobModel(MobDescription description){ _description = description; _currentHealth = _description.MaxHealth; }
4. рдЕрдм рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬреЛ рдХрдард┐рдирд╛рдИ рдХреЗ рд╕реНрддрд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рд╕рд╛рде рд╣реА рдбреНрд░реЙрдк рдпрд╛ рд╕реНрдкреЙрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИред
public class Factory { private Dictionary<string, Func<int, MobModel>> mobFactory; public void Init(MobDescriptions descriptions) { mobFactory = new Dictionary<string, Func<int, MobModel>>() { {"ogre", (level) => new MobModel(descriptions.ListOgre[level])}, {"troll", (level) => new MobModel(descriptions.ListTroll[level])} }; } public MobModel CreateMobModel(string nameMob, int level) { return mobFactory[nameMob](level); } }
5. рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рд░рд╛рдХреНрд╖рд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рдЬрдмрдХрд┐ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рд╣рдо рд╣рд╛рд░реНрдбрдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдпрд╣ рдЙрд╕ рд╕реНрддрд░ рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд░рд╛рдХреНрд╖рд╕реЛрдВ рдХреЗ рд╕реНрдкреЙрди рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдХреЛрдИ рдЦрд┐рд▓рд╛рдбрд╝реА рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдмрд┐рдВрджреБ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рддреЛ рд╕реНрддрд░ X рдХрд╛ N рджреБрд╢реНрдорди рд╕реНрдкреЙрди рдХрд░реЗрдЧрд╛ред
public class GameManager : MonoBehaviour { [SerializeField] private MobDescriptions _mobDescriptions; private Factory _factory; private void Start() { _factory = new Factory(); _factory.Init(_mobDescriptions); _factory.CreateMobModel("ogre", 2); } }