如何在统一塔防游戏中从列表中保留不同组件的数量

时间:2018-01-20 18:11:16

标签: c# unity3d unity5 monodevelop

所以我为'Tower'制作了一个公共结构,其中包含了我的塔防游戏中塔的所有变量。

fileB.py

稍后在脚本中,我有一个用于塔类型的公共枚举,它们从Tower结构中获得变量的统计信息。

public struct Tower
{

// Variables for Tower

public string Name;
public int type, Price, Count;
public float range, Cooldown, CurrCooldown;
public Sprite Spr;




public Tower(string Name, int type, float range, float cd, int Price, int Count, string path)
{
    this.Name = Name;
    this.type = type;
    this.range = range;
    this.Count = Count;
    Cooldown = cd;
    this.Price = Price;
    Spr = Resources.Load<Sprite> (path);
    CurrCooldown = 0;

}

我为塔楼制作了公开名单

public enum TowerType // The type of tower selected. Each have different stats based on public lists (see below)

{
    FIRST_TOWER,
    SECOND_TOWER,
    THIRD_TOWER

}

并为每种塔类型添加了唯一的变量值

public class GameControllerScr : MonoBehaviour {

public List<Tower> AllTowers = new List<Tower> (); 

我想知道的是我如何为每座塔楼提供“TowerCount”。在我的游戏中,您可以在地图上的任何位置构建一个塔,玩家可以选择在商店面板中选择三个塔中的任何一个。

private void Awake()

{
    AllTowers.Add (new Tower ("Laser Piercer", 0, 2, .5f, 20, 1, "TowerSprites/FTower")); // Name, type, range, Cooldown, price
    AllTowers.Add (new Tower ("Horde Destroyer", 1, 3, 3f, 40, 2, "TowerSprites/STower"));
    AllTowers.Add (new Tower ("Freeze Ray", 2, 2, 1f, 30, 3, "TowerSprites/TTower"));

如何区分每个塔,并创建一个单独的变量,这些变量根据地图上塔型的数量而变化(例如,有3个1型塔,2个2型塔和0个3型塔)。

1 个答案:

答案 0 :(得分:0)

您可以探索的选项是塔组件脚本,或者附加到每个对象的任何脚本,您可以包含一个可以轻松引用的静态列表。

我对你的代码不熟悉,知道它会是什么类。但是,让我们说每个塔上都有一个组件,即#Tower; TowerComponent&#34;。所以你可以:

public class TowerComponent: MonoBehaviour
{
   public static Dictionary<TowerComponent, TowerType> currentTowers = 
      new Dictionary<TowerComponent, TowerType>();

   private void Awake()
   {
      currentTowers.Add(this, typeOfTower);
   }
}

这基本上只是说每当塔进入场景时,它会自动添加到自己的引用字典中,您可以从任何地方引用它。你可以说:

TowerComponent.curentTowers.Count(x=>x.value == towerType);

这将返回您在任何脚本中寻找的塔类型的数量。这将导致依赖,但它是一种获得你所追求的东西的方式。