小白贪狼做塔防(2)

让我们继续探讨防御塔的建造,升级,卖出
建造:

void Biuld()
    {
        if (GameData.Instance.money < gameObj.tw.GetComponent().value)
        {
            return;
        }
        hitInfo.collider.gameObject.GetComponent().level++;
        //动态加载防御塔
        gameObj.tw = (GameObject)Resources.Load("Prefabs_Turrets/" + bt.cv.GetComponent().text + hitInfo.collider.gameObject.GetComponent().level.ToString());
        //金币处理      
        GameData.Instance.money -= gameObj.tw.GetComponent().value;
        //实例化o
        o = Instantiate(gameObj.tw, hitInfo.collider.gameObject.transform.position + Vector3.up * 2.8f, hitInfo.collider.gameObject.transform.rotation) as GameObject;
        o.transform.parent = hitInfo.collider.gameObject.transform;
        hitInfo.collider.gameObject.GetComponent().towername = bt.cv.GetComponent().text;
        //o = Instantiate(gameObj.tower, hitInfo.collider.gameObject.transform.position + Vector3.up * 2.8, hitInfo.collider.gameObject.transform.rotation) as GameObject;
        hitInfo.collider.gameObject.GetComponent().isBiuld = true;       
        bt.cv.GetComponent().text = "";
    }

首先,/判断钱够不够/,够的话我们就将基座等级+1,并通过Canvas上的Text获取想要建造的名字(前面已经判断基座上没有塔,并判定Canvas上的Text是否为空),并/扣除对应金币/,然后实例化防御塔,并将isBiuld设为true,表明基座上已经有塔,避免同一位置重复建造。然后重点来了,一定一定要将bt.cv.GetComponent().text清空,不然,你建完一座塔后,鼠标点中其他基座,也会建造并扣钱。
卖出:

void Des()
    {
        GameData.Instance.money += (hitInfo.collider.gameObject.transform.GetChild(1).gameObject.GetComponent().value*0.7f);
        Debug.Log("卖了之后,金币数-----" + GameData.Instance.money);
        Destroy(hitInfo.collider.gameObject.transform.GetChild(0).gameObject);
        //卖炮塔   
        hitInfo.collider.gameObject.GetComponent().isBiuld = false;        
        bt.cv.GetComponent().text = "";
    }

这个逻辑比较简单,选中卖出操作后,点击基座。如果上面没有塔,则将bt.cv.GetComponent().text清空,若有塔,则将点击的塔的子物体销毁(我之前将防御塔实例化再基座的子物体上了)并返还部分金币。

升级:

void Up()
    {
        hitInfo.collider.gameObject.GetComponent().level++;
        gameObj.tw = (GameObject)Resources.Load("Prefabs_Turrets/" + hitInfo.collider.gameObject.GetComponent().towername + hitInfo.collider.gameObject.GetComponent().level.ToString());
        //金币处理
        if (GameData.Instance.money < gameObj.tw.GetComponent().value)
        {
            hitInfo.collider.gameObject.GetComponent().level--;
            return;
        }
        GameData.Instance.money -= gameObj.tw.GetComponent().value;
        Debug.Log("金币数-----" + GameData.Instance.money);       
        //实例化
        o = Instantiate(gameObj.tw, hitInfo.collider.gameObject.transform.position + Vector3.up * 2.8f, hitInfo.collider.gameObject.transform.rotation) as GameObject;
        o.transform.parent = hitInfo.collider.gameObject.transform;        
        //销毁旧       
        Destroy(hitInfo.collider.gameObject.transform.GetChild(1).gameObject);
        hitInfo.collider.gameObject.GetComponent().isBiuld = true;
        bt.cv.GetComponent().text = "";
    }

当时我卡在升级操作一整个上午,完全找不到错误,知道某一位神明在冥冥之中点醒了我,原来我之前在上级函数里,写的还是,销毁原来的塔,并实例化level+1的塔,我却忽略了,我是使用Canvas上的Text获取的“塔名”,但是事实上并没有“LvUp”这个塔,所以我在Tower脚本里加了String towername,用来记录基座上面塔的名字(在Biuld里,赋值)。并且在钱不够的return,操作我忘记了把升过的级扣回去,导致出现了,钱不够时点击也会升级底座记录的等级,不过不实例化,然后当你钱够在该塔基座建新塔时,会出现用一级的钱造出2级甚至3级塔的bug(已修复)。

biuld.gif
Up.gif
Destory.gif

你可能感兴趣的:(小白贪狼做塔防(2))