Managing 100's of cards.

I’ve learnt Unity basics, and have done quite a few tutorials and am now looking to start my first solo project. Based on a ‘match 2’ game found in the Unity Blueprints book I want to expand on the idea and create a Magic: The Gathering type game. Each card will have a prefab with the necessary texture applied to it, and a script to set the card variables such as mana cost, type, ability and so on.

Right now, the scripts I plan to use are:

  1. A script on each prefab to contain card variables, such as Mana cost, type, ability and so on.
  2. 1 on an empty gameobject to dictate game flow. Turns, phases etc. This script will also handle player input, shuffle the deck and control card drawing. So it needs to pull information from each prefab to get the cards variables. It will also need to create multiple versions of the same prefab.

I don’t want people to write the scripts for me, however I would like some advice on the best way to handle this. Is this even the best way to do it?

Should I create a script that creates all the cards information and variables, and then applies the necessary prefab to that card when its needed in game?

I hope I’ve made myself clear enough, as I just need some advice on the best way to achieve this.

My suggestion would be to separate the card information from your scripts. Store the card information in a config file (could be plain text, JSON, xml etc.). When you start up the game load all the card data into CardManager class. The CardManager class would act like an object factory where you would call a method like

   Card card = CardManager.createCard("name of the card");

This way if you want to change the card values while balancing the game you don’t have to worry about messing around with your scripts. Depending on how complicated your card actions are your config file could be as simple as storing values (attack, defense, mana, cardName, cardDescription etc.) or as complicated as storing some sort of basic instruction set for how the card interacts with the game.

Creating some kind of GameManager class that manages player turns and other global game information sounds like a good idea to me.

Good Luck!